clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

commit 7852fb4d0356fbb85aeb817a1799168d154469cc
parent 43969b12f8b3d21b6e29c9dad3fe51adb5da84e3
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date:   Mon, 30 Aug 2021 22:36:52 +0200

Add utility to recreate the plugin window

Diffstat:
Mexamples/host/main-window.cc | 30++++++++++++++++++++++++++++++
Mexamples/host/main-window.hh | 4++++
Mexamples/host/plugin-host.cc | 28+++++++++++++++++++++++++++-
Mexamples/host/plugin-host.hh | 6++++++
4 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/examples/host/main-window.cc b/examples/host/main-window.cc @@ -77,6 +77,19 @@ void MainWindow::createMenu() { &QAction::triggered, this, &MainWindow::showPluginQuickControlsWindow); + menuBar->addSeparator(); + connect(windowsMenu->addAction(tr("Toggle Plugin Window Visibility")), + &QAction::triggered, + this, + &MainWindow::togglePluginWindowVisibility); + connect(windowsMenu->addAction(tr("Recreate Plugin Window")), + &QAction::triggered, + this, + &MainWindow::recreatePluginWindow); + connect(windowsMenu->addAction(tr("Scale Plugin Window")), + &QAction::triggered, + this, + &MainWindow::scalePluginWindow); QMenu *helpMenu = menuBar->addMenu(tr("Help")); helpMenu->addAction(tr("Manual")); @@ -108,4 +121,21 @@ void MainWindow::loadNativePluginPreset() return; application_.engine()->pluginHost().loadNativePluginPreset(file.toStdString()); +} + +void MainWindow::togglePluginWindowVisibility() +{ + bool isVisible = !pluginViewWidget_->isVisible(); + pluginViewWidget_->setVisible(isVisible); + application_.engine()->pluginHost().setPluginWindowVisibility(isVisible); +} + +void MainWindow::recreatePluginWindow() +{ + application_.engine()->pluginHost().setParentWindow(pluginViewWindow_->winId()); +} + +void MainWindow::scalePluginWindow() +{ + // TODO } \ No newline at end of file diff --git a/examples/host/main-window.hh b/examples/host/main-window.hh @@ -26,6 +26,10 @@ public: private: void createMenu(); + void togglePluginWindowVisibility(); + void recreatePluginWindow(); + void scalePluginWindow(); + Application & application_; SettingsDialog *settingsDialog_ = nullptr; QWindow * pluginViewWindow_ = nullptr; diff --git a/examples/host/plugin-host.cc b/examples/host/plugin-host.cc @@ -248,9 +248,19 @@ void PluginHost::setPorts(int numInputs, float **inputs, int numOutputs, float * void PluginHost::setParentWindow(WId parentWindow) { checkForMainThread(); + if (isGuiCreated_) + { + pluginGui_->destroy(plugin_); + isGuiCreated_ = false; + isGuiVisible_ = false; + } + if (!pluginGui_->create(plugin_)) return; + isGuiCreated_ = true; + assert(isGuiVisible_ == false); + uint32_t width = 0; uint32_t height = 0; @@ -272,7 +282,23 @@ void PluginHost::setParentWindow(WId parentWindow) { Application::instance().mainWindow()->resizePluginView(width, height); - pluginGui_->show(plugin_); + setPluginWindowVisibility(true); +} + +void PluginHost::setPluginWindowVisibility(bool isVisible) { + assert(clapIsMainThread(&host_)); + + if (!isGuiCreated_) + return; + + if (isVisible && !isGuiVisible_) { + pluginGui_->show(plugin_); + isGuiVisible_ = true; + } else if (!isVisible && isGuiVisible_) + { + pluginGui_->hide(plugin_); + isGuiVisible_ = false; + } } void PluginHost::clapLog(const clap_host *host, clap_log_severity severity, const char *msg) { diff --git a/examples/host/plugin-host.hh b/examples/host/plugin-host.hh @@ -34,6 +34,9 @@ public: void activate(int32_t sample_rate); void deactivate(); + void recreatePluginWindow(); + void setPluginWindowVisibility(bool isVisible); + void setPorts(int numInputs, float **inputs, int numOutputs, float **outputs); void setParentWindow(WId parentWindow); @@ -226,4 +229,7 @@ private: bool stateIsDirty_ = false; bool scheduleRestart_ = false; + + bool isGuiCreated_ = false; + bool isGuiVisible_ = false; };