Signed-off-by: falkTX <falktx@falktx.com>tags/22.02
| @@ -180,6 +180,7 @@ class CardinalPlugin : public CardinalBasePlugin | |||
| std::list<CardinalMidiInputDevice*> 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; | |||
| } | |||
| } | |||
| @@ -18,6 +18,7 @@ | |||
| #include <app/Scene.hpp> | |||
| #include <context.hpp> | |||
| #include <patch.hpp> | |||
| #include <settings.hpp> | |||
| #include <ui/Button.hpp> | |||
| #include <ui/MenuItem.hpp> | |||
| #include <window/Window.hpp> | |||
| @@ -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<int>(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<int>(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; | |||
| } | |||
| @@ -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<rack::settings::KnobMode>(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) | |||
| @@ -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 { | |||