Signed-off-by: falkTX <falktx@falktx.com>tags/22.02
@@ -180,6 +180,7 @@ class CardinalPlugin : public CardinalBasePlugin | |||||
std::list<CardinalMidiInputDevice*> fMidiInputs; | std::list<CardinalMidiInputDevice*> fMidiInputs; | ||||
Mutex fDeviceMutex; | Mutex fDeviceMutex; | ||||
// real values, not VCV interpreted ones | |||||
float fWindowParameters[kWindowParameterCount]; | float fWindowParameters[kWindowParameterCount]; | ||||
public: | public: | ||||
@@ -192,10 +193,15 @@ public: | |||||
fCurrentAudioDevice(nullptr), | fCurrentAudioDevice(nullptr), | ||||
fCurrentMidiOutput(nullptr) | fCurrentMidiOutput(nullptr) | ||||
{ | { | ||||
fWindowParameters[kWindowParameterShowTooltips] = 1.0f; | |||||
fWindowParameters[kWindowParameterCableOpacity] = 50.0f; | fWindowParameters[kWindowParameterCableOpacity] = 50.0f; | ||||
fWindowParameters[kWindowParameterCableTension] = 50.0f; | fWindowParameters[kWindowParameterCableTension] = 50.0f; | ||||
fWindowParameters[kWindowParameterRackBrightness] = 100.0f; | fWindowParameters[kWindowParameterRackBrightness] = 100.0f; | ||||
fWindowParameters[kWindowParameterHaloBrightness] = 25.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 | // create unique temporary path for this instance | ||||
try { | try { | ||||
@@ -395,8 +401,16 @@ protected: | |||||
switch (index - kModuleParameters) | 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: | case kWindowParameterCableOpacity: | ||||
parameter.name = "Cable Opacity"; | |||||
parameter.name = "Cable opacity"; | |||||
parameter.symbol = "cableOpacity"; | parameter.symbol = "cableOpacity"; | ||||
parameter.unit = "%"; | parameter.unit = "%"; | ||||
parameter.hints = kParameterIsAutomable; | parameter.hints = kParameterIsAutomable; | ||||
@@ -405,7 +419,7 @@ protected: | |||||
parameter.ranges.max = 100.0f; | parameter.ranges.max = 100.0f; | ||||
break; | break; | ||||
case kWindowParameterCableTension: | case kWindowParameterCableTension: | ||||
parameter.name = "Cable Tension"; | |||||
parameter.name = "Cable tension"; | |||||
parameter.symbol = "cableTension"; | parameter.symbol = "cableTension"; | ||||
parameter.unit = "%"; | parameter.unit = "%"; | ||||
parameter.hints = kParameterIsAutomable; | parameter.hints = kParameterIsAutomable; | ||||
@@ -414,7 +428,7 @@ protected: | |||||
parameter.ranges.max = 100.0f; | parameter.ranges.max = 100.0f; | ||||
break; | break; | ||||
case kWindowParameterRackBrightness: | case kWindowParameterRackBrightness: | ||||
parameter.name = "Rack Brightness"; | |||||
parameter.name = "Room brightness"; | |||||
parameter.symbol = "rackBrightness"; | parameter.symbol = "rackBrightness"; | ||||
parameter.unit = "%"; | parameter.unit = "%"; | ||||
parameter.hints = kParameterIsAutomable; | parameter.hints = kParameterIsAutomable; | ||||
@@ -423,7 +437,7 @@ protected: | |||||
parameter.ranges.max = 100.0f; | parameter.ranges.max = 100.0f; | ||||
break; | break; | ||||
case kWindowParameterHaloBrightness: | case kWindowParameterHaloBrightness: | ||||
parameter.name = "Halo Brightness"; | |||||
parameter.name = "Light Bloom"; | |||||
parameter.symbol = "haloBrightness"; | parameter.symbol = "haloBrightness"; | ||||
parameter.unit = "%"; | parameter.unit = "%"; | ||||
parameter.hints = kParameterIsAutomable; | parameter.hints = kParameterIsAutomable; | ||||
@@ -431,6 +445,47 @@ protected: | |||||
parameter.ranges.min = 0.0f; | parameter.ranges.min = 0.0f; | ||||
parameter.ranges.max = 100.0f; | parameter.ranges.max = 100.0f; | ||||
break; | 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 <app/Scene.hpp> | ||||
#include <context.hpp> | #include <context.hpp> | ||||
#include <patch.hpp> | #include <patch.hpp> | ||||
#include <settings.hpp> | |||||
#include <ui/Button.hpp> | #include <ui/Button.hpp> | ||||
#include <ui/MenuItem.hpp> | #include <ui/MenuItem.hpp> | ||||
#include <window/Window.hpp> | #include <window/Window.hpp> | ||||
@@ -169,12 +170,15 @@ public: | |||||
repaint(); | 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) | switch (param) | ||||
{ | { | ||||
case kWindowParameterShowTooltips: | |||||
fWindowParameters.tooltips = value > 0.5f; | |||||
break; | |||||
case kWindowParameterCableOpacity: | case kWindowParameterCableOpacity: | ||||
mult = 100.0f; | mult = 100.0f; | ||||
fWindowParameters.cableOpacity = value; | fWindowParameters.cableOpacity = value; | ||||
@@ -191,6 +195,33 @@ public: | |||||
mult = 100.0f; | mult = 100.0f; | ||||
fWindowParameters.haloBrightness = value; | fWindowParameters.haloBrightness = value; | ||||
break; | 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: | default: | ||||
return; | return; | ||||
} | } | ||||
@@ -213,6 +244,9 @@ protected: | |||||
switch (index - kModuleParameters) | switch (index - kModuleParameters) | ||||
{ | { | ||||
case kWindowParameterShowTooltips: | |||||
fWindowParameters.tooltips = value > 0.5f; | |||||
break; | |||||
case kWindowParameterCableOpacity: | case kWindowParameterCableOpacity: | ||||
fWindowParameters.cableOpacity = value / 100.0f; | fWindowParameters.cableOpacity = value / 100.0f; | ||||
break; | break; | ||||
@@ -225,6 +259,29 @@ protected: | |||||
case kWindowParameterHaloBrightness: | case kWindowParameterHaloBrightness: | ||||
fWindowParameters.haloBrightness = value / 100.0f; | fWindowParameters.haloBrightness = value / 100.0f; | ||||
break; | 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: | default: | ||||
return; | return; | ||||
} | } | ||||
@@ -367,6 +367,41 @@ void WindowParametersSave(rack::window::Window* const window) | |||||
window->internal->callback->WindowParametersChanged(kWindowParameterHaloBrightness, | window->internal->callback->WindowParametersChanged(kWindowParameterHaloBrightness, | ||||
rack::settings::haloBrightness); | 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) | 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::cableTension = window->internal->params.cableTension; | ||||
rack::settings::rackBrightness = window->internal->params.rackBrightness; | rack::settings::rackBrightness = window->internal->params.rackBrightness; | ||||
rack::settings::haloBrightness = window->internal->params.haloBrightness; | 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) | void WindowParametersSetCallback(rack::window::Window* const window, WindowParametersCallback* const callback) | ||||
@@ -30,10 +30,15 @@ START_NAMESPACE_DISTRHO | |||||
// ----------------------------------------------------------------------------------------------------------- | // ----------------------------------------------------------------------------------------------------------- | ||||
enum WindowParameterList { | enum WindowParameterList { | ||||
kWindowParameterShowTooltips, | |||||
kWindowParameterCableOpacity, | kWindowParameterCableOpacity, | ||||
kWindowParameterCableTension, | kWindowParameterCableTension, | ||||
kWindowParameterRackBrightness, | kWindowParameterRackBrightness, | ||||
kWindowParameterHaloBrightness, | kWindowParameterHaloBrightness, | ||||
kWindowParameterKnobMode, | |||||
kWindowParameterWheelKnobControl, | |||||
kWindowParameterWheelSensitivity, | |||||
kWindowParameterLockModulePositions, | |||||
kWindowParameterCount, | kWindowParameterCount, | ||||
}; | }; | ||||
@@ -42,7 +47,11 @@ struct WindowParameters { | |||||
float cableTension = 0.5f; | float cableTension = 0.5f; | ||||
float rackBrightness = 1.0f; | float rackBrightness = 1.0f; | ||||
float haloBrightness = 0.25f; | 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 { | struct WindowParametersCallback { | ||||