| @@ -114,13 +114,22 @@ struct CarlaPluginClapEventData { | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| struct carla_clap_host : clap_host_t { | |||
| class Callback { | |||
| public: | |||
| virtual ~Callback() {} | |||
| virtual void hostRequestResize(uint width, uint height) = 0; | |||
| }; | |||
| Callback* const uiCallback; | |||
| clap_host_gui_t gui; | |||
| clap_host_timer_support_t timer; | |||
| // TESTING | |||
| clap_id inUseTimerId; | |||
| carla_clap_host() | |||
| carla_clap_host(Callback* const uiCb) | |||
| : uiCallback(uiCb) | |||
| { | |||
| clap_version = CLAP_VERSION; | |||
| host_data = this; | |||
| @@ -164,7 +173,15 @@ struct carla_clap_host : clap_host_t { | |||
| static void carla_request_callback(const clap_host_t*) {} | |||
| static void carla_resize_hints_changed(const clap_host_t *host) {} | |||
| static bool carla_request_resize(const clap_host_t *host, uint32_t width, uint32_t height) { return false; } | |||
| static bool carla_request_resize(const clap_host_t* const host, const uint32_t width, const uint32_t height) | |||
| { | |||
| const carla_clap_host* const self = static_cast<const carla_clap_host*>(host->host_data); | |||
| self->uiCallback->hostRequestResize(width, height); | |||
| return true; | |||
| } | |||
| static bool carla_request_show(const clap_host_t *host) { return false; } | |||
| static bool carla_request_hide(const clap_host_t *host) { return false; } | |||
| static void carla_closed(const clap_host_t *host, bool was_destroyed) {} | |||
| @@ -500,7 +517,8 @@ struct carla_clap_output_events : clap_output_events_t, CarlaPluginClapEventData | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| class CarlaPluginCLAP : public CarlaPlugin, | |||
| private CarlaPluginUI::Callback | |||
| private CarlaPluginUI::Callback, | |||
| private carla_clap_host::Callback | |||
| { | |||
| public: | |||
| CarlaPluginCLAP(CarlaEngine* const engine, const uint id) | |||
| @@ -508,7 +526,7 @@ public: | |||
| fPlugin(nullptr), | |||
| fPluginDescriptor(nullptr), | |||
| fPluginEntry(nullptr), | |||
| fHost(), | |||
| fHost(this), | |||
| fExtensions(), | |||
| fInputAudioBuffers(), | |||
| fOutputAudioBuffers(), | |||
| @@ -840,11 +858,11 @@ public: | |||
| if (fUI.isEmbed) | |||
| { | |||
| if (fUI.window != nullptr) | |||
| fUI.window->setTitle(pData->uiTitle.buffer()); | |||
| fUI.window->setTitle(uiTitle.buffer()); | |||
| } | |||
| else | |||
| { | |||
| fExtensions.gui->suggest_title(fPlugin, pData->uiTitle.buffer()); | |||
| fExtensions.gui->suggest_title(fPlugin, uiTitle.buffer()); | |||
| } | |||
| } | |||
| @@ -911,15 +929,13 @@ public: | |||
| if (carla_isNotZero(opts.uiScale)) | |||
| fExtensions.gui->set_scale(fPlugin, opts.uiScale); | |||
| setWindowTitle(nullptr); | |||
| if (fUI.isEmbed) | |||
| { | |||
| clap_window_t win = { CLAP_WINDOW_API_NATIVE, {} }; | |||
| win.ptr = fUI.window->getPtr(); | |||
| fExtensions.gui->set_parent(fPlugin, &win); | |||
| if (pData->uiTitle.isNotEmpty()) | |||
| fUI.window->setTitle(pData->uiTitle.buffer()); | |||
| fExtensions.gui->show(fPlugin); | |||
| fUI.window->show(); | |||
| } | |||
| @@ -928,12 +944,7 @@ public: | |||
| clap_window_t win = { CLAP_WINDOW_API_NATIVE, {} }; | |||
| win.uptr = opts.frontendWinId; | |||
| fExtensions.gui->set_transient(fPlugin, &win); | |||
| if (pData->uiTitle.isNotEmpty()) | |||
| fExtensions.gui->suggest_title(fPlugin, pData->uiTitle.buffer()); | |||
| fExtensions.gui->show(fPlugin); | |||
| #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH | |||
| pData->tryTransient(); | |||
| #endif | |||
| @@ -2171,9 +2182,10 @@ public: | |||
| // ------------------------------------------------------------------- | |||
| protected: | |||
| #ifdef CLAP_WINDOW_API_NATIVE | |||
| void handlePluginUIClosed() override | |||
| { | |||
| // CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); | |||
| carla_debug("CarlaPluginCLAP::handlePluginUIClosed()"); | |||
| showCustomUI(false); | |||
| @@ -2186,9 +2198,21 @@ protected: | |||
| void handlePluginUIResized(const uint width, const uint height) override | |||
| { | |||
| // CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); | |||
| CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); | |||
| carla_debug("CarlaPluginCLAP::handlePluginUIResized(%u, %u)", width, height); | |||
| if (fExtensions.gui != nullptr) | |||
| fExtensions.gui->set_size(fPlugin, width, height); | |||
| } | |||
| void hostRequestResize(const uint width, const uint height) override | |||
| { | |||
| CARLA_SAFE_ASSERT_RETURN(fUI.window != nullptr,); | |||
| carla_debug("CarlaPluginCLAP::hostRequestResize(%u, %u)", width, height); | |||
| fUI.window->setSize(width, height, true); | |||
| } | |||
| #endif | |||
| // ------------------------------------------------------------------- | |||