From 83deb531770cacff8ba012dfc34b0cf70233caed Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 25 Mar 2019 20:47:55 +0100 Subject: [PATCH] Pass ui scale to ui bridges Signed-off-by: falkTX --- source/backend/plugin/CarlaPluginLV2.cpp | 4 ++ source/bridges-ui/CarlaBridgeFormat.cpp | 6 ++- source/bridges-ui/CarlaBridgeFormat.hpp | 4 +- source/bridges-ui/CarlaBridgeFormatLV2.cpp | 48 ++++++++++++------- .../distrho/src/DistrhoPluginCarla.cpp | 6 ++- 5 files changed, 49 insertions(+), 19 deletions(-) diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp index 17f1ece07..2d1b88dd9 100644 --- a/source/backend/plugin/CarlaPluginLV2.cpp +++ b/source/backend/plugin/CarlaPluginLV2.cpp @@ -1489,6 +1489,10 @@ public: if (! fPipeServer.writeMessage(tmpBuf)) return; + std::snprintf(tmpBuf, 0xff, "%f\n", static_cast(pData->engine->getOptions().uiScale)); + if (! fPipeServer.writeMessage(tmpBuf)) + return; + std::snprintf(tmpBuf, 0xff, "%s\n", bool2str(true)); // useTheme if (! fPipeServer.writeMessage(tmpBuf)) return; diff --git a/source/bridges-ui/CarlaBridgeFormat.cpp b/source/bridges-ui/CarlaBridgeFormat.cpp index dc48415c9..e8152ac3f 100644 --- a/source/bridges-ui/CarlaBridgeFormat.cpp +++ b/source/bridges-ui/CarlaBridgeFormat.cpp @@ -228,17 +228,21 @@ bool CarlaBridgeFormat::msgReceived(const char* const msg) noexcept { double sampleRate; bool useTheme, useThemeColors; + float uiScale; const char* windowTitle; uint64_t transientWindowId; CARLA_SAFE_ASSERT_RETURN(readNextLineAsDouble(sampleRate), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(uiScale), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(useTheme), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(useThemeColors), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(windowTitle), true); CARLA_SAFE_ASSERT_RETURN(readNextLineAsULong(transientWindowId), true); fGotOptions = true; - uiOptionsChanged(sampleRate, useTheme, useThemeColors, windowTitle, static_cast(transientWindowId)); + uiOptionsChanged(sampleRate, uiScale, + useTheme, useThemeColors, + windowTitle, static_cast(transientWindowId)); delete[] windowTitle; return true; diff --git a/source/bridges-ui/CarlaBridgeFormat.hpp b/source/bridges-ui/CarlaBridgeFormat.hpp index 718716b4f..2b5f4ac67 100644 --- a/source/bridges-ui/CarlaBridgeFormat.hpp +++ b/source/bridges-ui/CarlaBridgeFormat.hpp @@ -69,7 +69,9 @@ protected: virtual void dspAtomReceived(const uint32_t index, const LV2_Atom* const atom) = 0; virtual void dspURIDReceived(const LV2_URID urid, const char* const uri) = 0; - virtual void uiOptionsChanged(const double sampleRate, const bool useTheme, const bool useThemeColors, const char* const windowTitle, uintptr_t transientWindowId) = 0; + virtual void uiOptionsChanged(const double sampleRate, const float uiScale, + const bool useTheme, const bool useThemeColors, + const char* const windowTitle, const uintptr_t transientWindowId) = 0; public: // --------------------------------------------------------------------- diff --git a/source/bridges-ui/CarlaBridgeFormatLV2.cpp b/source/bridges-ui/CarlaBridgeFormatLV2.cpp index 095c11af1..a380998eb 100644 --- a/source/bridges-ui/CarlaBridgeFormatLV2.cpp +++ b/source/bridges-ui/CarlaBridgeFormatLV2.cpp @@ -140,14 +140,12 @@ struct Lv2PluginOptions { float sampleRate; int64_t transientWinId; float uiScale; - const char* windowTitle; LV2_Options_Option opts[Count]; Lv2PluginOptions() noexcept : sampleRate(static_cast(gInitialSampleRate)), transientWinId(0), - uiScale(1.0f), - windowTitle(kNullWindowTitle) + uiScale(1.0f) { LV2_Options_Option& optSampleRate(opts[SampleRate]); optSampleRate.context = LV2_OPTIONS_INSTANCE; @@ -600,9 +598,17 @@ public: fCustomURIDs.push_back(uri); } - void uiOptionsChanged(const double sampleRate, const bool useTheme, const bool useThemeColors, const char* const windowTitle, uintptr_t transientWindowId) override + void uiOptionsChanged(const double sampleRate, const float uiScale, + const bool useTheme, const bool useThemeColors, + const char* const windowTitle, const uintptr_t transientWindowId) override { - carla_debug("CarlaLv2Client::uiOptionsChanged(%g, %s, %s, \"%s\", " P_UINTPTR ")", sampleRate, bool2str(useTheme), bool2str(useThemeColors), windowTitle, transientWindowId); + carla_debug("CarlaLv2Client::uiOptionsChanged(%f, %f, %s, %s, \"%s\", " P_UINTPTR ")", + sampleRate, static_cast(uiScale), + bool2str(useTheme), bool2str(useThemeColors), + windowTitle, transientWindowId); + + // ------------------------------------------------------------------------------------------------------------ + // sample rate const float sampleRatef = static_cast(sampleRate); @@ -627,23 +633,33 @@ public: } } - if (fLv2Options.windowTitle != nullptr && fLv2Options.windowTitle != kNullWindowTitle) - delete[] fLv2Options.windowTitle; + // ------------------------------------------------------------------------------------------------------------ + // ui scale + + fLv2Options.uiScale = uiScale; - fLv2Options.transientWinId = static_cast(transientWindowId); - fLv2Options.windowTitle = carla_strdup_safe(windowTitle); + // ------------------------------------------------------------------------------------------------------------ + // window title - if (fLv2Options.windowTitle == nullptr) - fLv2Options.windowTitle = kNullWindowTitle; + if (windowTitle != nullptr) + fUiOptions.windowTitle = windowTitle; else - fUiOptions.windowTitle = fLv2Options.windowTitle; + fUiOptions.windowTitle.clear(); - fLv2Options.opts[Lv2PluginOptions::WindowTitle].size = (uint32_t)std::strlen(fLv2Options.windowTitle); - fLv2Options.opts[Lv2PluginOptions::WindowTitle].value = fLv2Options.windowTitle; + fLv2Options.opts[Lv2PluginOptions::WindowTitle].size = static_cast(fUiOptions.windowTitle.length()); + fLv2Options.opts[Lv2PluginOptions::WindowTitle].value = fUiOptions.windowTitle.buffer(); - fUiOptions.useTheme = useTheme; - fUiOptions.useThemeColors = useThemeColors; + // ------------------------------------------------------------------------------------------------------------ + // transient win id + + fLv2Options.transientWinId = static_cast(transientWindowId); fUiOptions.transientWindowId = transientWindowId; + + // ------------------------------------------------------------------------------------------------------------ + // other + + fUiOptions.useTheme = useTheme; + fUiOptions.useThemeColors = useThemeColors; } void uiResized(const uint width, const uint height) override diff --git a/source/modules/distrho/src/DistrhoPluginCarla.cpp b/source/modules/distrho/src/DistrhoPluginCarla.cpp index 9ff337c61..2a1fe068a 100644 --- a/source/modules/distrho/src/DistrhoPluginCarla.cpp +++ b/source/modules/distrho/src/DistrhoPluginCarla.cpp @@ -100,7 +100,11 @@ public: protected: void handleEditParameter(const uint32_t rindex, const bool touch) { - fHost->ui_parameter_touch(fHost->handle, rindex, touch); + pHost->dispatcher(pHost->handle, + NATIVE_HOST_OPCODE_UI_TOUCH_PARAMETER, + static_cast(rindex), + touch ? 1 : 0, + nullptr, 0.0f); } void handleSetParameterValue(const uint32_t rindex, const float value)