Implement the rest of parameters / user-settings
Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
parent
f31343119b
commit
08b6a8ef8b
4 changed files with 168 additions and 7 deletions
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue