From 08b6a8ef8bd1e79507f717fdfb95ea89f0d8d928 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 22 Oct 2021 12:04:53 +0100 Subject: [PATCH] Implement the rest of parameters / user-settings Signed-off-by: falkTX --- src/CardinalPlugin.cpp | 63 +++++++++++++++++++++++++++++++++++++--- src/CardinalUI.cpp | 61 ++++++++++++++++++++++++++++++++++++-- src/Window.cpp | 40 +++++++++++++++++++++++++ src/WindowParameters.hpp | 11 ++++++- 4 files changed, 168 insertions(+), 7 deletions(-) diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 1beeadc..651d6fb 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -180,6 +180,7 @@ class CardinalPlugin : public CardinalBasePlugin std::list fMidiInputs; Mutex fDeviceMutex; + // real values, not VCV interpreted ones float fWindowParameters[kWindowParameterCount]; public: @@ -192,10 +193,15 @@ public: fCurrentAudioDevice(nullptr), fCurrentMidiOutput(nullptr) { + fWindowParameters[kWindowParameterShowTooltips] = 1.0f; fWindowParameters[kWindowParameterCableOpacity] = 50.0f; fWindowParameters[kWindowParameterCableTension] = 50.0f; fWindowParameters[kWindowParameterRackBrightness] = 100.0f; fWindowParameters[kWindowParameterHaloBrightness] = 25.0f; + fWindowParameters[kWindowParameterKnobMode] = 0.0f; + fWindowParameters[kWindowParameterWheelKnobControl] = 0.0f; + fWindowParameters[kWindowParameterWheelSensitivity] = 1.0f; + fWindowParameters[kWindowParameterLockModulePositions] = 0.0f; // create unique temporary path for this instance try { @@ -395,8 +401,16 @@ protected: switch (index - kModuleParameters) { + case kWindowParameterShowTooltips: + parameter.name = "Show tooltips"; + parameter.symbol = "tooltips"; + parameter.hints = kParameterIsAutomable|kParameterIsInteger|kParameterIsBoolean; + parameter.ranges.def = 1.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 1.0f; + break; case kWindowParameterCableOpacity: - parameter.name = "Cable Opacity"; + parameter.name = "Cable opacity"; parameter.symbol = "cableOpacity"; parameter.unit = "%"; parameter.hints = kParameterIsAutomable; @@ -405,7 +419,7 @@ protected: parameter.ranges.max = 100.0f; break; case kWindowParameterCableTension: - parameter.name = "Cable Tension"; + parameter.name = "Cable tension"; parameter.symbol = "cableTension"; parameter.unit = "%"; parameter.hints = kParameterIsAutomable; @@ -414,7 +428,7 @@ protected: parameter.ranges.max = 100.0f; break; case kWindowParameterRackBrightness: - parameter.name = "Rack Brightness"; + parameter.name = "Room brightness"; parameter.symbol = "rackBrightness"; parameter.unit = "%"; parameter.hints = kParameterIsAutomable; @@ -423,7 +437,7 @@ protected: parameter.ranges.max = 100.0f; break; case kWindowParameterHaloBrightness: - parameter.name = "Halo Brightness"; + parameter.name = "Light Bloom"; parameter.symbol = "haloBrightness"; parameter.unit = "%"; parameter.hints = kParameterIsAutomable; @@ -431,6 +445,47 @@ protected: parameter.ranges.min = 0.0f; parameter.ranges.max = 100.0f; break; + case kWindowParameterKnobMode: + parameter.name = "Knob mode"; + parameter.symbol = "knobMode"; + parameter.hints = kParameterIsAutomable|kParameterIsInteger; + parameter.ranges.def = 0.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 2.0f; + parameter.enumValues.count = 3; + parameter.enumValues.restrictedMode = true; + parameter.enumValues.values = new ParameterEnumerationValue[3]; + parameter.enumValues.values[0].label = "Linear"; + parameter.enumValues.values[0].value = 0.0f; + parameter.enumValues.values[1].label = "Absolute rotary"; + parameter.enumValues.values[1].value = 1.0f; + parameter.enumValues.values[2].label = "Relative rotary"; + parameter.enumValues.values[2].value = 2.0f; + break; + case kWindowParameterWheelKnobControl: + parameter.name = "Scroll wheel knob control"; + parameter.symbol = "knobScroll"; + parameter.hints = kParameterIsAutomable|kParameterIsInteger|kParameterIsBoolean; + parameter.ranges.def = 0.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 1.0f; + break; + case kWindowParameterWheelSensitivity: + parameter.name = "Scroll wheel knob sensitivity"; + parameter.symbol = "knobScrollSensitivity"; + parameter.hints = kParameterIsAutomable|kParameterIsLogarithmic; + parameter.ranges.def = 1.0f; + parameter.ranges.min = 0.1f; + parameter.ranges.max = 10.0f; + break; + case kWindowParameterLockModulePositions: + parameter.name = "Lock module positions"; + parameter.symbol = "lockModules"; + parameter.hints = kParameterIsAutomable|kParameterIsInteger|kParameterIsBoolean; + parameter.ranges.def = 0.0f; + parameter.ranges.min = 0.0f; + parameter.ranges.max = 1.0f; + break; } } diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index f5ebddd..cdda709 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -169,12 +170,15 @@ public: repaint(); } - void WindowParametersChanged(const WindowParameterList param, const float value) override + void WindowParametersChanged(const WindowParameterList param, float value) override { - float mult; + float mult = 1.0f; switch (param) { + case kWindowParameterShowTooltips: + fWindowParameters.tooltips = value > 0.5f; + break; case kWindowParameterCableOpacity: mult = 100.0f; fWindowParameters.cableOpacity = value; @@ -191,6 +195,33 @@ public: mult = 100.0f; fWindowParameters.haloBrightness = value; break; + case kWindowParameterKnobMode: + switch (static_cast(value + 0.5f)) + { + case rack::settings::KNOB_MODE_LINEAR: + value = 0; + fWindowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; + break; + case rack::settings::KNOB_MODE_ROTARY_ABSOLUTE: + value = 1; + fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; + break; + case rack::settings::KNOB_MODE_ROTARY_RELATIVE: + value = 2; + fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; + break; + } + break; + case kWindowParameterWheelKnobControl: + fWindowParameters.knobScroll = value > 0.5f; + break; + case kWindowParameterWheelSensitivity: + mult = 1000.0f; + fWindowParameters.knobScrollSensitivity = value; + break; + case kWindowParameterLockModulePositions: + fWindowParameters.lockModules = value > 0.5f; + break; default: return; } @@ -213,6 +244,9 @@ protected: switch (index - kModuleParameters) { + case kWindowParameterShowTooltips: + fWindowParameters.tooltips = value > 0.5f; + break; case kWindowParameterCableOpacity: fWindowParameters.cableOpacity = value / 100.0f; break; @@ -225,6 +259,29 @@ protected: case kWindowParameterHaloBrightness: fWindowParameters.haloBrightness = value / 100.0f; break; + case kWindowParameterKnobMode: + switch (static_cast(value + 0.5f)) + { + case 0: + fWindowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; + break; + case 1: + fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; + break; + case 2: + fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; + break; + } + break; + case kWindowParameterWheelKnobControl: + fWindowParameters.knobScroll = value > 0.5f; + break; + case kWindowParameterWheelSensitivity: + fWindowParameters.knobScrollSensitivity = value / 1000.0f; + break; + case kWindowParameterLockModulePositions: + fWindowParameters.lockModules = value > 0.5f; + break; default: return; } diff --git a/src/Window.cpp b/src/Window.cpp index 86d0a9e..086544a 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -367,6 +367,41 @@ void WindowParametersSave(rack::window::Window* const window) window->internal->callback->WindowParametersChanged(kWindowParameterHaloBrightness, rack::settings::haloBrightness); } + if (d_isNotEqual(window->internal->params.knobScrollSensitivity, rack::settings::knobScrollSensitivity)) + { + window->internal->params.knobScrollSensitivity = rack::settings::knobScrollSensitivity; + if (window->internal->callback != nullptr) + window->internal->callback->WindowParametersChanged(kWindowParameterWheelSensitivity, + rack::settings::knobScrollSensitivity); + } + if (window->internal->params.knobMode != rack::settings::knobMode) + { + window->internal->params.knobMode = rack::settings::knobMode; + if (window->internal->callback != nullptr) + window->internal->callback->WindowParametersChanged(kWindowParameterKnobMode, + rack::settings::knobMode); + } + if (window->internal->params.tooltips != rack::settings::tooltips) + { + window->internal->params.tooltips = rack::settings::tooltips; + if (window->internal->callback != nullptr) + window->internal->callback->WindowParametersChanged(kWindowParameterShowTooltips, + rack::settings::tooltips); + } + if (window->internal->params.knobScroll != rack::settings::knobScroll) + { + window->internal->params.knobScroll = rack::settings::knobScroll; + if (window->internal->callback != nullptr) + window->internal->callback->WindowParametersChanged(kWindowParameterWheelKnobControl, + rack::settings::knobScroll); + } + if (window->internal->params.lockModules != rack::settings::lockModules) + { + window->internal->params.lockModules = rack::settings::lockModules; + if (window->internal->callback != nullptr) + window->internal->callback->WindowParametersChanged(kWindowParameterLockModulePositions, + rack::settings::lockModules); + } } void WindowParametersRestore(rack::window::Window* const window) @@ -375,6 +410,11 @@ void WindowParametersRestore(rack::window::Window* const window) rack::settings::cableTension = window->internal->params.cableTension; rack::settings::rackBrightness = window->internal->params.rackBrightness; rack::settings::haloBrightness = window->internal->params.haloBrightness; + rack::settings::knobScrollSensitivity = window->internal->params.knobScrollSensitivity; + rack::settings::knobMode = static_cast(window->internal->params.knobMode); + rack::settings::tooltips = window->internal->params.tooltips; + rack::settings::knobScroll = window->internal->params.knobScroll; + rack::settings::lockModules = window->internal->params.lockModules; } void WindowParametersSetCallback(rack::window::Window* const window, WindowParametersCallback* const callback) diff --git a/src/WindowParameters.hpp b/src/WindowParameters.hpp index bdc589b..3b5f44a 100644 --- a/src/WindowParameters.hpp +++ b/src/WindowParameters.hpp @@ -30,10 +30,15 @@ START_NAMESPACE_DISTRHO // ----------------------------------------------------------------------------------------------------------- enum WindowParameterList { + kWindowParameterShowTooltips, kWindowParameterCableOpacity, kWindowParameterCableTension, kWindowParameterRackBrightness, kWindowParameterHaloBrightness, + kWindowParameterKnobMode, + kWindowParameterWheelKnobControl, + kWindowParameterWheelSensitivity, + kWindowParameterLockModulePositions, kWindowParameterCount, }; @@ -42,7 +47,11 @@ struct WindowParameters { float cableTension = 0.5f; float rackBrightness = 1.0f; float haloBrightness = 0.25f; - // KnobMode knobMode = KNOB_MODE_LINEAR; + float knobScrollSensitivity = 0.001f; + int knobMode = 0; + bool tooltips = true; + bool knobScroll = false; + bool lockModules = false; }; struct WindowParametersCallback {