diff --git a/distrho/extra/ExternalWindow.hpp b/distrho/extra/ExternalWindow.hpp index c4b3c886..53b0f541 100644 --- a/distrho/extra/ExternalWindow.hpp +++ b/distrho/extra/ExternalWindow.hpp @@ -297,7 +297,7 @@ public: { DISTRHO_SAFE_ASSERT_UINT2_RETURN(width > 1 && height > 1, width, height,); - if (pData.width == width || pData.height == height) + if (pData.width == width && pData.height == height) return; pData.width = width; diff --git a/examples/EmbedExternalUI/DistrhoPluginInfo.h b/examples/EmbedExternalUI/DistrhoPluginInfo.h index cae5e2c2..b3cf1331 100644 --- a/examples/EmbedExternalUI/DistrhoPluginInfo.h +++ b/examples/EmbedExternalUI/DistrhoPluginInfo.h @@ -30,7 +30,8 @@ #define DISTRHO_UI_USER_RESIZABLE 1 enum Parameters { - kParameterLevel = 0, + kParameterWidth = 0, + kParameterHeight, kParameterCount }; diff --git a/examples/EmbedExternalUI/EmbedExternalExamplePlugin.cpp b/examples/EmbedExternalUI/EmbedExternalExamplePlugin.cpp index 12621032..a88b3d9e 100644 --- a/examples/EmbedExternalUI/EmbedExternalExamplePlugin.cpp +++ b/examples/EmbedExternalUI/EmbedExternalExamplePlugin.cpp @@ -28,7 +28,8 @@ class EmbedExternalExamplePlugin : public Plugin public: EmbedExternalExamplePlugin() : Plugin(kParameterCount, 0, 0), - fValue(0.0f) + fWidth(512.0f), + fHeight(256.0f) { } @@ -104,15 +105,27 @@ protected: */ void initParameter(uint32_t index, Parameter& parameter) override { - if (index != 0) - return; - - parameter.hints = kParameterIsAutomable|kParameterIsInteger; - parameter.ranges.def = 0.0f; - parameter.ranges.min = 0.0f; - parameter.ranges.max = 100.0f; - parameter.name = "Value"; - parameter.symbol = "value"; + switch (index) + { + case kParameterWidth: + parameter.hints = kParameterIsAutomable|kParameterIsInteger; + parameter.ranges.def = 512.0f; + parameter.ranges.min = 256.0f; + parameter.ranges.max = 4096.0f; + parameter.name = "Width"; + parameter.symbol = "width"; + parameter.unit = "px"; + break; + case kParameterHeight: + parameter.hints = kParameterIsAutomable|kParameterIsInteger; + parameter.ranges.def = 256.0f; + parameter.ranges.min = 256.0f; + parameter.ranges.max = 4096.0f; + parameter.name = "Height"; + parameter.symbol = "height"; + parameter.unit = "px"; + break; + } } /* -------------------------------------------------------------------------------------------------------- @@ -124,10 +137,15 @@ protected: */ float getParameterValue(uint32_t index) const override { - if (index != 0) - return 0.0f; + switch (index) + { + case kParameterWidth: + return fWidth; + case kParameterHeight: + return fHeight; + } - return fValue; + return 0.0f; } @@ -139,10 +157,15 @@ protected: */ void setParameterValue(uint32_t index, float value) override { - if (index != 0) - return; - - fValue = value; + switch (index) + { + case kParameterWidth: + fWidth = value; + break; + case kParameterHeight: + fHeight = value; + break; + } } /* -------------------------------------------------------------------------------------------------------- @@ -169,7 +192,7 @@ protected: private: // Parameters - float fValue; + float fWidth, fHeight; /** Set our plugin class as non-copyable and add a leak detector just in case. diff --git a/examples/EmbedExternalUI/EmbedExternalExampleUI.cpp b/examples/EmbedExternalUI/EmbedExternalExampleUI.cpp index 1c3aa266..1e80bd1c 100644 --- a/examples/EmbedExternalUI/EmbedExternalExampleUI.cpp +++ b/examples/EmbedExternalUI/EmbedExternalExampleUI.cpp @@ -61,6 +61,7 @@ class EmbedExternalExampleUI : public UI NSView* fView; NSExternalWindow* fWindow; #elif defined(DISTRHO_OS_WINDOWS) + ::HWND fWindow; #else ::Display* fDisplay; ::Window fWindow; @@ -71,13 +72,13 @@ public: : UI(512, 256), #if defined(DISTRHO_OS_MAC) fView(nullptr), - fWindow(nullptr), + fWindow(nullptr) #elif defined(DISTRHO_OS_WINDOWS) + fWindow(nullptr) #else fDisplay(nullptr), - fWindow(0), + fWindow(0) #endif - fValue(0.0f) { const bool standalone = isStandalone(); d_stdout("isStandalone %d", (int)standalone); @@ -222,10 +223,17 @@ protected: */ void parameterChanged(uint32_t index, float value) override { - if (index != 0) - return; + d_stdout("parameterChanged %u %f", index, value); - fValue = value; + switch (index) + { + case kParameterWidth: + setWidth(static_cast(value + 0.5f)); + break; + case kParameterHeight: + setHeight(static_cast(value + 0.5f)); + break; + } } /* -------------------------------------------------------------------------------------------------------- @@ -257,6 +265,19 @@ protected: return 0; } + void sizeChanged(uint width, uint height) override + { + d_stdout("sizeChanged %u %u", width, height); + UI::sizeChanged(width, height); + +#if defined(DISTRHO_OS_MAC) +#elif defined(DISTRHO_OS_WINDOWS) +#else + if (fWindow != 0) + XResizeWindow(fDisplay, fWindow, width, height); +#endif + } + void titleChanged(const char* const title) override { d_stdout("titleChanged %s", title); @@ -347,7 +368,8 @@ protected: [pool release]; #elif defined(DISTRHO_OS_WINDOWS) - /*MSG msg; + /* + MSG msg; if (! ::PeekMessage(&msg, nullptr, 0, 0, PM_NOREMOVE)) return true; @@ -358,7 +380,8 @@ protected: //TranslateMessage(&msg); DispatchMessage(&msg); - }*/ + } + */ #else if (fDisplay == nullptr) return;