diff --git a/source/backend/CarlaBackend.h b/source/backend/CarlaBackend.h index b8b070d60..95642c416 100644 --- a/source/backend/CarlaBackend.h +++ b/source/backend/CarlaBackend.h @@ -1357,51 +1357,61 @@ typedef enum { ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 22, /*! - * Set UI scaling used in frontend, so backend can do the same for plugin UIs. + * Set background color used in the frontend, so backend can do the same for plugin UIs. */ - ENGINE_OPTION_FRONTEND_UI_SCALE = 23, + ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR = 23, + + /*! + * Set foreground color used in the frontend, so backend can do the same for plugin UIs. + */ + ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR = 24, + + /*! + * Set UI scaling used in the frontend, so backend can do the same for plugin UIs. + */ + ENGINE_OPTION_FRONTEND_UI_SCALE = 25, /*! * Set frontend winId, used to define as parent window for plugin UIs. */ - ENGINE_OPTION_FRONTEND_WIN_ID = 24, + ENGINE_OPTION_FRONTEND_WIN_ID = 26, #if !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) && !defined(CARLA_OS_WIN) /*! * Set path to wine executable. */ - ENGINE_OPTION_WINE_EXECUTABLE = 25, + ENGINE_OPTION_WINE_EXECUTABLE = 27, /*! * Enable automatic wineprefix detection. */ - ENGINE_OPTION_WINE_AUTO_PREFIX = 26, + ENGINE_OPTION_WINE_AUTO_PREFIX = 28, /*! * Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. */ - ENGINE_OPTION_WINE_FALLBACK_PREFIX = 27, + ENGINE_OPTION_WINE_FALLBACK_PREFIX = 29, /*! * Enable realtime priority for Wine application and server threads. */ - ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 28, + ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 30, /*! * Base realtime priority for Wine threads. */ - ENGINE_OPTION_WINE_BASE_RT_PRIO = 29, + ENGINE_OPTION_WINE_BASE_RT_PRIO = 31, /*! * Wine server realtime priority. */ - ENGINE_OPTION_WINE_SERVER_RT_PRIO = 30, + ENGINE_OPTION_WINE_SERVER_RT_PRIO = 32, #endif /*! * Capture console output into debug callbacks. */ - ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 31 + ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 33 } EngineOption; diff --git a/source/backend/CarlaEngine.hpp b/source/backend/CarlaEngine.hpp index a0781af43..fd8d66ae0 100644 --- a/source/backend/CarlaEngine.hpp +++ b/source/backend/CarlaEngine.hpp @@ -239,6 +239,8 @@ struct CARLA_API EngineOptions { bool preferPluginBridges; bool preferUiBridges; bool uisAlwaysOnTop; + uint bgColor; + uint fgColor; float uiScale; uint maxParameters; diff --git a/source/backend/CarlaStandalone.cpp b/source/backend/CarlaStandalone.cpp index 281c6f1d3..bad647985 100644 --- a/source/backend/CarlaStandalone.cpp +++ b/source/backend/CarlaStandalone.cpp @@ -312,6 +312,8 @@ static void carla_engine_init_common(CarlaEngine* const engine) engine->setOption(CB::ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR, gStandalone.engineOptions.preventBadBehaviour ? 1 : 0, nullptr); + engine->setOption(CB::ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR, static_cast(gStandalone.engineOptions.bgColor), nullptr); + engine->setOption(CB::ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR, static_cast(gStandalone.engineOptions.fgColor), nullptr); engine->setOption(CB::ENGINE_OPTION_FRONTEND_UI_SCALE, static_cast(gStandalone.engineOptions.uiScale * 1000.0f), nullptr); if (gStandalone.engineOptions.frontendWinId != 0) @@ -848,6 +850,14 @@ void carla_set_engine_option(EngineOption option, int value, const char* valueSt gStandalone.engineOptions.preventBadBehaviour = (value != 0); break; + case CB::ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR: + gStandalone.engineOptions.bgColor = static_cast(value); + break; + + case CB::ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR: + gStandalone.engineOptions.fgColor = static_cast(value); + break; + case CB::ENGINE_OPTION_FRONTEND_UI_SCALE: CARLA_SAFE_ASSERT_RETURN(value > 0,); gStandalone.engineOptions.uiScale = static_cast(value) / 1000; diff --git a/source/backend/engine/CarlaEngine.cpp b/source/backend/engine/CarlaEngine.cpp index f67a666c0..1d9d0b3b4 100644 --- a/source/backend/engine/CarlaEngine.cpp +++ b/source/backend/engine/CarlaEngine.cpp @@ -1901,6 +1901,14 @@ void CarlaEngine::setOption(const EngineOption option, const int value, const ch #endif } break; + case ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR: + pData->options.bgColor = static_cast(value); + break; + + case ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR: + pData->options.fgColor = static_cast(value); + break; + case ENGINE_OPTION_FRONTEND_UI_SCALE: CARLA_SAFE_ASSERT_RETURN(value > 0,); pData->options.uiScale = static_cast(value) / 1000; diff --git a/source/backend/engine/CarlaEngineData.cpp b/source/backend/engine/CarlaEngineData.cpp index d44306dce..5c92a2be6 100644 --- a/source/backend/engine/CarlaEngineData.cpp +++ b/source/backend/engine/CarlaEngineData.cpp @@ -192,6 +192,8 @@ EngineOptions::EngineOptions() noexcept preferUiBridges(true), #endif uisAlwaysOnTop(true), + bgColor(0x000000ff), + fgColor(0xffffffff), uiScale(1.0f), maxParameters(MAX_DEFAULT_PARAMETERS), uiBridgesTimeout(4000), diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp index 3f0fe9598..3f4b41f4d 100644 --- a/source/backend/plugin/CarlaPluginLV2.cpp +++ b/source/backend/plugin/CarlaPluginLV2.cpp @@ -132,11 +132,16 @@ enum CarlaLv2URIDs { kUridTimeTicksPerBeat, kUridMidiEvent, kUridParamSampleRate, + // ui stuff + kUridBackgroundColor, + kUridForegroundColor, kUridScaleFactor, kUridWindowTitle, + // custom carla props kUridCarlaAtomWorkerIn, kUridCarlaAtomWorkerResp, kUridCarlaTransientWindowId, + // count kUridCount }; @@ -316,6 +321,8 @@ struct CarlaPluginLV2Options { SequenceSize, SampleRate, TransientWinId, + BackgroundColor, + ForegroundColor, ScaleFactor, WindowTitle, Null, @@ -328,6 +335,8 @@ struct CarlaPluginLV2Options { int sequenceSize; float sampleRate; int64_t transientWinId; + uint32_t bgColor; + uint32_t fgColor; float uiScale; const char* windowTitle; LV2_Options_Option opts[Count]; @@ -339,6 +348,8 @@ struct CarlaPluginLV2Options { sequenceSize(MAX_DEFAULT_BUFFER_SIZE), sampleRate(0.0), transientWinId(0), + bgColor(0x000000ff), + fgColor(0xffffffff), uiScale(1.0f), windowTitle(nullptr) { @@ -374,6 +385,22 @@ struct CarlaPluginLV2Options { optSequenceSize.type = kUridAtomInt; optSequenceSize.value = &sequenceSize; + LV2_Options_Option& optBackgroundColor(opts[BackgroundColor]); + optBackgroundColor.context = LV2_OPTIONS_INSTANCE; + optBackgroundColor.subject = 0; + optBackgroundColor.key = kUridBackgroundColor; + optBackgroundColor.size = sizeof(int32_t); + optBackgroundColor.type = kUridAtomInt; + optBackgroundColor.value = &bgColor; + + LV2_Options_Option& optForegroundColor(opts[ForegroundColor]); + optForegroundColor.context = LV2_OPTIONS_INSTANCE; + optForegroundColor.subject = 0; + optForegroundColor.key = kUridForegroundColor; + optForegroundColor.size = sizeof(int32_t); + optForegroundColor.type = kUridAtomInt; + optForegroundColor.value = &fgColor; + LV2_Options_Option& optScaleFactor(opts[ScaleFactor]); optScaleFactor.context = LV2_OPTIONS_INSTANCE; optScaleFactor.subject = 0; @@ -1576,11 +1603,21 @@ public: if (! fPipeServer.writeMessage("uiOptions\n", 10)) return; + const EngineOptions& opts(pData->engine->getOptions()); + std::snprintf(tmpBuf, 0xff, "%g\n", pData->engine->getSampleRate()); if (! fPipeServer.writeMessage(tmpBuf)) return; - std::snprintf(tmpBuf, 0xff, "%.12g\n", static_cast(pData->engine->getOptions().uiScale)); + std::snprintf(tmpBuf, 0xff, "%u\n", opts.bgColor); + if (! fPipeServer.writeMessage(tmpBuf)) + return; + + std::snprintf(tmpBuf, 0xff, "%u\n", opts.fgColor); + if (! fPipeServer.writeMessage(tmpBuf)) + return; + + std::snprintf(tmpBuf, 0xff, "%.12g\n", static_cast(opts.uiScale)); if (! fPipeServer.writeMessage(tmpBuf)) return; @@ -5541,13 +5578,15 @@ public: return false; } + const EngineOptions& opts(pData->engine->getOptions()); + // --------------------------------------------------------------- // Init LV2 World if needed, sets LV2_PATH for lilv Lv2WorldClass& lv2World(Lv2WorldClass::getInstance()); - if (pData->engine->getOptions().pathLV2 != nullptr && pData->engine->getOptions().pathLV2[0] != '\0') - lv2World.initIfNeeded(pData->engine->getOptions().pathLV2); + if (opts.pathLV2 != nullptr && opts.pathLV2[0] != '\0') + lv2World.initIfNeeded(opts.pathLV2); else if (const char* const LV2_PATH = std::getenv("LV2_PATH")) lv2World.initIfNeeded(LV2_PATH); else @@ -5725,7 +5764,7 @@ public: fLv2Options.maxBufferSize = bufferSize; fLv2Options.nominalBufferSize = bufferSize; fLv2Options.sampleRate = static_cast(pData->engine->getSampleRate()); - fLv2Options.transientWinId = static_cast(pData->engine->getOptions().frontendWinId); + fLv2Options.transientWinId = static_cast(opts.frontendWinId); uint32_t eventBufferSize = MAX_DEFAULT_BUFFER_SIZE; @@ -5742,7 +5781,9 @@ public: fLv2Options.sequenceSize = static_cast(eventBufferSize); - fLv2Options.uiScale = pData->engine->getOptions().uiScale; + fLv2Options.bgColor = opts.bgColor; + fLv2Options.fgColor = opts.fgColor; + fLv2Options.uiScale = opts.uiScale; // --------------------------------------------------------------- // initialize features (part 1) @@ -5903,7 +5944,7 @@ public: else if (options & PLUGIN_OPTION_FIXED_BUFFERS) pData->options |= PLUGIN_OPTION_FIXED_BUFFERS; - if (pData->engine->getOptions().forceStereo) + if (opts.forceStereo) pData->options |= PLUGIN_OPTION_FORCE_STEREO; else if (options & PLUGIN_OPTION_FORCE_STEREO) pData->options |= PLUGIN_OPTION_FORCE_STEREO; @@ -6816,6 +6857,10 @@ private: return kUridMidiEvent; if (std::strcmp(uri, LV2_PARAMETERS__sampleRate) == 0) return kUridParamSampleRate; + if (std::strcmp(uri, LV2_UI__backgroundColor) == 0) + return kUridBackgroundColor; + if (std::strcmp(uri, LV2_UI__foregroundColor) == 0) + return kUridForegroundColor; if (std::strcmp(uri, LV2_UI__scaleFactor) == 0) return kUridScaleFactor; if (std::strcmp(uri, LV2_UI__windowTitle) == 0) @@ -6946,6 +6991,10 @@ private: return LV2_MIDI__MidiEvent; case kUridParamSampleRate: return LV2_PARAMETERS__sampleRate; + case kUridBackgroundColor: + return LV2_UI__backgroundColor; + case kUridForegroundColor: + return LV2_UI__foregroundColor; case kUridScaleFactor: return LV2_UI__scaleFactor; case kUridWindowTitle: diff --git a/source/bridges-ui/CarlaBridgeFormat.cpp b/source/bridges-ui/CarlaBridgeFormat.cpp index e8152ac3f..fefa14ec7 100644 --- a/source/bridges-ui/CarlaBridgeFormat.cpp +++ b/source/bridges-ui/CarlaBridgeFormat.cpp @@ -226,25 +226,21 @@ bool CarlaBridgeFormat::msgReceived(const char* const msg) noexcept if (std::strcmp(msg, "uiOptions") == 0) { - 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); + BridgeFormatOptions opts; + + CARLA_SAFE_ASSERT_RETURN(readNextLineAsDouble(opts.sampleRate), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(opts.bgColor), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsUInt(opts.fgColor), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsFloat(opts.uiScale), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(opts.useTheme), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsBool(opts.useThemeColors), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsString(opts.windowTitle), true); + CARLA_SAFE_ASSERT_RETURN(readNextLineAsULong(opts.transientWindowId), true); fGotOptions = true; - uiOptionsChanged(sampleRate, uiScale, - useTheme, useThemeColors, - windowTitle, static_cast(transientWindowId)); + uiOptionsChanged(opts); - delete[] windowTitle; + delete[] opts.windowTitle; return true; } diff --git a/source/bridges-ui/CarlaBridgeFormat.hpp b/source/bridges-ui/CarlaBridgeFormat.hpp index 2b5f4ac67..35205aa6e 100644 --- a/source/bridges-ui/CarlaBridgeFormat.hpp +++ b/source/bridges-ui/CarlaBridgeFormat.hpp @@ -69,9 +69,18 @@ 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 float uiScale, - const bool useTheme, const bool useThemeColors, - const char* const windowTitle, const uintptr_t transientWindowId) = 0; + struct BridgeFormatOptions { + double sampleRate; + uint32_t bgColor; + uint32_t fgColor; + float uiScale; + bool useTheme; + bool useThemeColors; + const char* windowTitle; + uintptr_t transientWindowId; + }; + + virtual void uiOptionsChanged(const BridgeFormatOptions& opts) = 0; public: // --------------------------------------------------------------------- diff --git a/source/bridges-ui/CarlaBridgeFormatLV2.cpp b/source/bridges-ui/CarlaBridgeFormatLV2.cpp index 32cb40db3..b837fb29a 100644 --- a/source/bridges-ui/CarlaBridgeFormatLV2.cpp +++ b/source/bridges-ui/CarlaBridgeFormatLV2.cpp @@ -93,11 +93,16 @@ enum CarlaLv2URIDs { kUridTimeTicksPerBeat, kUridMidiEvent, kUridParamSampleRate, + // ui stuff + kUridBackgroundColor, + kUridForegroundColor, kUridScaleFactor, kUridWindowTitle, + // custom carla props kUridCarlaAtomWorkerIn, kUridCarlaAtomWorkerResp, kUridCarlaTransientWindowId, + // count kUridCount }; @@ -131,6 +136,8 @@ struct Lv2PluginOptions { enum OptIndex { SampleRate, TransientWinId, + BackgroundColor, + ForegroundColor, ScaleFactor, WindowTitle, Null, @@ -139,12 +146,16 @@ struct Lv2PluginOptions { float sampleRate; int64_t transientWinId; + uint32_t bgColor; + uint32_t fgColor; float uiScale; LV2_Options_Option opts[Count]; Lv2PluginOptions() noexcept : sampleRate(static_cast(gInitialSampleRate)), transientWinId(0), + bgColor(0x000000ff), + fgColor(0xffffffff), uiScale(1.0f) { LV2_Options_Option& optSampleRate(opts[SampleRate]); @@ -155,6 +166,22 @@ struct Lv2PluginOptions { optSampleRate.type = kUridAtomFloat; optSampleRate.value = &sampleRate; + LV2_Options_Option& optBackgroundColor(opts[BackgroundColor]); + optBackgroundColor.context = LV2_OPTIONS_INSTANCE; + optBackgroundColor.subject = 0; + optBackgroundColor.key = kUridBackgroundColor; + optBackgroundColor.size = sizeof(int32_t); + optBackgroundColor.type = kUridAtomInt; + optBackgroundColor.value = &bgColor; + + LV2_Options_Option& optForegroundColor(opts[ForegroundColor]); + optForegroundColor.context = LV2_OPTIONS_INSTANCE; + optForegroundColor.subject = 0; + optForegroundColor.key = kUridForegroundColor; + optForegroundColor.size = sizeof(int32_t); + optForegroundColor.type = kUridAtomInt; + optForegroundColor.value = &fgColor; + LV2_Options_Option& optScaleFactor(opts[ScaleFactor]); optScaleFactor.context = LV2_OPTIONS_INSTANCE; optScaleFactor.subject = 0; @@ -598,19 +625,14 @@ public: fCustomURIDs.push_back(uri); } - void uiOptionsChanged(const double sampleRate, const float uiScale, - const bool useTheme, const bool useThemeColors, - const char* const windowTitle, const uintptr_t transientWindowId) override + void uiOptionsChanged(const BridgeFormatOptions& opts) override { - carla_debug("CarlaLv2Client::uiOptionsChanged(%f, %f, %s, %s, \"%s\", " P_UINTPTR ")", - sampleRate, static_cast(uiScale), - bool2str(useTheme), bool2str(useThemeColors), - windowTitle, transientWindowId); + carla_debug("CarlaLv2Client::uiOptionsChanged()"); // ------------------------------------------------------------------------------------------------------------ // sample rate - const float sampleRatef = static_cast(sampleRate); + const float sampleRatef = static_cast(opts.sampleRate); if (carla_isNotEqual(fLv2Options.sampleRate, sampleRatef)) { @@ -634,15 +656,17 @@ public: } // ------------------------------------------------------------------------------------------------------------ - // ui scale + // ui colors and scale - fLv2Options.uiScale = uiScale; + fLv2Options.bgColor = opts.bgColor; + fLv2Options.fgColor = opts.fgColor; + fLv2Options.uiScale = opts.uiScale; // ------------------------------------------------------------------------------------------------------------ // window title - if (windowTitle != nullptr) - fUiOptions.windowTitle = windowTitle; + if (opts.windowTitle != nullptr) + fUiOptions.windowTitle = opts.windowTitle; else fUiOptions.windowTitle.clear(); @@ -652,14 +676,14 @@ public: // ------------------------------------------------------------------------------------------------------------ // transient win id - fLv2Options.transientWinId = static_cast(transientWindowId); - fUiOptions.transientWindowId = transientWindowId; + fLv2Options.transientWinId = static_cast(opts.transientWindowId); + fUiOptions.transientWindowId = opts.transientWindowId; // ------------------------------------------------------------------------------------------------------------ // other - fUiOptions.useTheme = useTheme; - fUiOptions.useThemeColors = useThemeColors; + fUiOptions.useTheme = opts.useTheme; + fUiOptions.useThemeColors = opts.useThemeColors; } void uiResized(const uint width, const uint height) override @@ -1060,6 +1084,10 @@ private: return kUridMidiEvent; if (std::strcmp(uri, LV2_PARAMETERS__sampleRate) == 0) return kUridParamSampleRate; + if (std::strcmp(uri, LV2_UI__backgroundColor) == 0) + return kUridBackgroundColor; + if (std::strcmp(uri, LV2_UI__foregroundColor) == 0) + return kUridForegroundColor; if (std::strcmp(uri, LV2_UI__scaleFactor) == 0) return kUridScaleFactor; if (std::strcmp(uri, LV2_UI__windowTitle) == 0) @@ -1190,6 +1218,10 @@ private: return LV2_MIDI__MidiEvent; case kUridParamSampleRate: return LV2_PARAMETERS__sampleRate; + case kUridBackgroundColor: + return LV2_UI__backgroundColor; + case kUridForegroundColor: + return LV2_UI__foregroundColor; case kUridScaleFactor: return LV2_UI__scaleFactor; case kUridWindowTitle: diff --git a/source/frontend/carla_backend.py b/source/frontend/carla_backend.py index 555f8ed9d..c94ed797f 100644 --- a/source/frontend/carla_backend.py +++ b/source/frontend/carla_backend.py @@ -959,32 +959,38 @@ ENGINE_OPTION_PATH_RESOURCES = 21 # @note: Linux only ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR = 22 -# Set UI scaling used in frontend, so backend can do the same for plugin UIs. -ENGINE_OPTION_FRONTEND_UI_SCALE = 23 +# Set background color used in the frontend, so backend can do the same for plugin UIs. +ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR = 23 + +# Set foreground color used in the frontend, so backend can do the same for plugin UIs. +ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR = 24 + +# Set UI scaling used in the frontend, so backend can do the same for plugin UIs. +ENGINE_OPTION_FRONTEND_UI_SCALE = 25 # Set frontend winId, used to define as parent window for plugin UIs. -ENGINE_OPTION_FRONTEND_WIN_ID = 24 +ENGINE_OPTION_FRONTEND_WIN_ID = 26 # Set path to wine executable. -ENGINE_OPTION_WINE_EXECUTABLE = 25 +ENGINE_OPTION_WINE_EXECUTABLE = 27 # Enable automatic wineprefix detection. -ENGINE_OPTION_WINE_AUTO_PREFIX = 26 +ENGINE_OPTION_WINE_AUTO_PREFIX = 28 # Fallback wineprefix to use if automatic detection fails or is disabled, and WINEPREFIX is not set. -ENGINE_OPTION_WINE_FALLBACK_PREFIX = 27 +ENGINE_OPTION_WINE_FALLBACK_PREFIX = 29 # Enable realtime priority for Wine application and server threads. -ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 28 +ENGINE_OPTION_WINE_RT_PRIO_ENABLED = 30 # Base realtime priority for Wine threads. -ENGINE_OPTION_WINE_BASE_RT_PRIO = 29 +ENGINE_OPTION_WINE_BASE_RT_PRIO = 31 # Wine server realtime priority. -ENGINE_OPTION_WINE_SERVER_RT_PRIO = 30 +ENGINE_OPTION_WINE_SERVER_RT_PRIO = 32 # Capture console output into debug callbacks -ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 31 +ENGINE_OPTION_DEBUG_CONSOLE_OUTPUT = 33 # ------------------------------------------------------------------------------------------------------------ # Engine Process Mode diff --git a/source/frontend/carla_host.py b/source/frontend/carla_host.py index 83f56cb39..8a608a778 100644 --- a/source/frontend/carla_host.py +++ b/source/frontend/carla_host.py @@ -2542,7 +2542,9 @@ class HostWindow(QMainWindow): else: value_fix = 1.5 - bg_color = self.ui.rack.palette().window().color() + rack_pal = self.ui.rack.palette() + bg_color = rack_pal.window().color() + fg_color = rack_pal.text().color() bg_value = 1.0 - bg_color.blackF() if bg_value != 0.0 and bg_value < min_value: pad_color = bg_color.lighter(100*min_value/bg_value*value_fix) @@ -2574,6 +2576,16 @@ class HostWindow(QMainWindow): self.ui.pad_right.setPalette(self.imgR_palette) self.ui.pad_right.setAutoFillBackground(True) + # qt's rgba is actually argb, so convert that + bg_color_value = bg_color.rgba() + bg_color_value = ((bg_color_value & 0xffffff) << 8) | (bg_color_value >> 24) + + fg_color_value = fg_color.rgba() + fg_color_value = ((fg_color_value & 0xffffff) << 8) | (fg_color_value >> 24) + + self.host.set_engine_option(ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR, bg_color_value, "") + self.host.set_engine_option(ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR, fg_color_value, "") + # -------------------------------------------------------------------------------------------------------- # paint event diff --git a/source/includes/lv2/ui.h b/source/includes/lv2/ui.h index 406a19f1c..43bdf7d76 100644 --- a/source/includes/lv2/ui.h +++ b/source/includes/lv2/ui.h @@ -45,8 +45,10 @@ #define LV2_UI__UI LV2_UI_PREFIX "UI" ///< http://lv2plug.in/ns/extensions/ui#UI #define LV2_UI__WindowsUI LV2_UI_PREFIX "WindowsUI" ///< http://lv2plug.in/ns/extensions/ui#WindowsUI #define LV2_UI__X11UI LV2_UI_PREFIX "X11UI" ///< http://lv2plug.in/ns/extensions/ui#X11UI +#define LV2_UI__backgroundColor LV2_UI_PREFIX "backgroundColor" ///< http://lv2plug.in/ns/extensions/ui#backgroundColor #define LV2_UI__binary LV2_UI_PREFIX "binary" ///< http://lv2plug.in/ns/extensions/ui#binary #define LV2_UI__fixedSize LV2_UI_PREFIX "fixedSize" ///< http://lv2plug.in/ns/extensions/ui#fixedSize +#define LV2_UI__foregroundColor LV2_UI_PREFIX "foregroundColor" ///< http://lv2plug.in/ns/extensions/ui#foregroundColor #define LV2_UI__idleInterface LV2_UI_PREFIX "idleInterface" ///< http://lv2plug.in/ns/extensions/ui#idleInterface #define LV2_UI__noUserResize LV2_UI_PREFIX "noUserResize" ///< http://lv2plug.in/ns/extensions/ui#noUserResize #define LV2_UI__notifyType LV2_UI_PREFIX "notifyType" ///< http://lv2plug.in/ns/extensions/ui#notifyType diff --git a/source/utils/CarlaBackendUtils.hpp b/source/utils/CarlaBackendUtils.hpp index 69810ae71..8731e148a 100644 --- a/source/utils/CarlaBackendUtils.hpp +++ b/source/utils/CarlaBackendUtils.hpp @@ -372,6 +372,10 @@ const char* EngineOption2Str(const EngineOption option) noexcept return "ENGINE_OPTION_PATH_RESOURCES"; case ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR: return "ENGINE_OPTION_PREVENT_BAD_BEHAVIOUR"; + case ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR: + return "ENGINE_OPTION_FRONTEND_BACKGROUND_COLOR"; + case ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR: + return "ENGINE_OPTION_FRONTEND_FOREGROUND_COLOR"; case ENGINE_OPTION_FRONTEND_UI_SCALE: return "ENGINE_OPTION_FRONTEND_UI_SCALE"; case ENGINE_OPTION_FRONTEND_WIN_ID: