|
@@ -237,9 +237,10 @@ void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, |
|
|
class CardinalUI : public CardinalBaseUI, |
|
|
class CardinalUI : public CardinalBaseUI, |
|
|
public WindowParametersCallback |
|
|
public WindowParametersCallback |
|
|
{ |
|
|
{ |
|
|
rack::math::Vec fLastMousePos; |
|
|
|
|
|
WindowParameters fWindowParameters; |
|
|
|
|
|
int fRateLimitStep = 0; |
|
|
|
|
|
|
|
|
rack::math::Vec lastMousePos; |
|
|
|
|
|
WindowParameters windowParameters; |
|
|
|
|
|
int rateLimitStep = 0; |
|
|
|
|
|
bool firstIdle = true; |
|
|
|
|
|
|
|
|
struct ScopedContext { |
|
|
struct ScopedContext { |
|
|
CardinalPluginContext* const context; |
|
|
CardinalPluginContext* const context; |
|
@@ -349,6 +350,12 @@ public: |
|
|
|
|
|
|
|
|
void uiIdle() override |
|
|
void uiIdle() override |
|
|
{ |
|
|
{ |
|
|
|
|
|
if (firstIdle) |
|
|
|
|
|
{ |
|
|
|
|
|
firstIdle = false; |
|
|
|
|
|
getWindow().focus(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (filebrowserhandle != nullptr && fileBrowserIdle(filebrowserhandle)) |
|
|
if (filebrowserhandle != nullptr && fileBrowserIdle(filebrowserhandle)) |
|
|
{ |
|
|
{ |
|
|
{ |
|
|
{ |
|
@@ -363,10 +370,10 @@ public: |
|
|
filebrowserhandle = nullptr; |
|
|
filebrowserhandle = nullptr; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (fWindowParameters.rateLimit != 0 && ++fRateLimitStep % (fWindowParameters.rateLimit * 2)) |
|
|
|
|
|
|
|
|
if (windowParameters.rateLimit != 0 && ++rateLimitStep % (windowParameters.rateLimit * 2)) |
|
|
return; |
|
|
return; |
|
|
|
|
|
|
|
|
fRateLimitStep = 0; |
|
|
|
|
|
|
|
|
rateLimitStep = 0; |
|
|
repaint(); |
|
|
repaint(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -377,54 +384,54 @@ public: |
|
|
switch (param) |
|
|
switch (param) |
|
|
{ |
|
|
{ |
|
|
case kWindowParameterShowTooltips: |
|
|
case kWindowParameterShowTooltips: |
|
|
fWindowParameters.tooltips = value > 0.5f; |
|
|
|
|
|
|
|
|
windowParameters.tooltips = value > 0.5f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterCableOpacity: |
|
|
case kWindowParameterCableOpacity: |
|
|
mult = 100.0f; |
|
|
mult = 100.0f; |
|
|
fWindowParameters.cableOpacity = value; |
|
|
|
|
|
|
|
|
windowParameters.cableOpacity = value; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterCableTension: |
|
|
case kWindowParameterCableTension: |
|
|
mult = 100.0f; |
|
|
mult = 100.0f; |
|
|
fWindowParameters.cableTension = value; |
|
|
|
|
|
|
|
|
windowParameters.cableTension = value; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterRackBrightness: |
|
|
case kWindowParameterRackBrightness: |
|
|
mult = 100.0f; |
|
|
mult = 100.0f; |
|
|
fWindowParameters.rackBrightness = value; |
|
|
|
|
|
|
|
|
windowParameters.rackBrightness = value; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterHaloBrightness: |
|
|
case kWindowParameterHaloBrightness: |
|
|
mult = 100.0f; |
|
|
mult = 100.0f; |
|
|
fWindowParameters.haloBrightness = value; |
|
|
|
|
|
|
|
|
windowParameters.haloBrightness = value; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterKnobMode: |
|
|
case kWindowParameterKnobMode: |
|
|
switch (static_cast<int>(value + 0.5f)) |
|
|
switch (static_cast<int>(value + 0.5f)) |
|
|
{ |
|
|
{ |
|
|
case rack::settings::KNOB_MODE_LINEAR: |
|
|
case rack::settings::KNOB_MODE_LINEAR: |
|
|
value = 0; |
|
|
value = 0; |
|
|
fWindowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; |
|
|
|
|
|
|
|
|
windowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; |
|
|
break; |
|
|
break; |
|
|
case rack::settings::KNOB_MODE_ROTARY_ABSOLUTE: |
|
|
case rack::settings::KNOB_MODE_ROTARY_ABSOLUTE: |
|
|
value = 1; |
|
|
value = 1; |
|
|
fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; |
|
|
|
|
|
|
|
|
windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; |
|
|
break; |
|
|
break; |
|
|
case rack::settings::KNOB_MODE_ROTARY_RELATIVE: |
|
|
case rack::settings::KNOB_MODE_ROTARY_RELATIVE: |
|
|
value = 2; |
|
|
value = 2; |
|
|
fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; |
|
|
|
|
|
|
|
|
windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterWheelKnobControl: |
|
|
case kWindowParameterWheelKnobControl: |
|
|
fWindowParameters.knobScroll = value > 0.5f; |
|
|
|
|
|
|
|
|
windowParameters.knobScroll = value > 0.5f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterWheelSensitivity: |
|
|
case kWindowParameterWheelSensitivity: |
|
|
mult = 1000.0f; |
|
|
mult = 1000.0f; |
|
|
fWindowParameters.knobScrollSensitivity = value; |
|
|
|
|
|
|
|
|
windowParameters.knobScrollSensitivity = value; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterLockModulePositions: |
|
|
case kWindowParameterLockModulePositions: |
|
|
fWindowParameters.lockModules = value > 0.5f; |
|
|
|
|
|
|
|
|
windowParameters.lockModules = value > 0.5f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterUpdateRateLimit: |
|
|
case kWindowParameterUpdateRateLimit: |
|
|
fWindowParameters.rateLimit = static_cast<int>(value + 0.5f); |
|
|
|
|
|
fRateLimitStep = 0; |
|
|
|
|
|
|
|
|
windowParameters.rateLimit = static_cast<int>(value + 0.5f); |
|
|
|
|
|
rateLimitStep = 0; |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
return; |
|
|
return; |
|
@@ -449,52 +456,52 @@ protected: |
|
|
switch (index - kModuleParameters) |
|
|
switch (index - kModuleParameters) |
|
|
{ |
|
|
{ |
|
|
case kWindowParameterShowTooltips: |
|
|
case kWindowParameterShowTooltips: |
|
|
fWindowParameters.tooltips = value > 0.5f; |
|
|
|
|
|
|
|
|
windowParameters.tooltips = value > 0.5f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterCableOpacity: |
|
|
case kWindowParameterCableOpacity: |
|
|
fWindowParameters.cableOpacity = value / 100.0f; |
|
|
|
|
|
|
|
|
windowParameters.cableOpacity = value / 100.0f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterCableTension: |
|
|
case kWindowParameterCableTension: |
|
|
fWindowParameters.cableTension = value / 100.0f; |
|
|
|
|
|
|
|
|
windowParameters.cableTension = value / 100.0f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterRackBrightness: |
|
|
case kWindowParameterRackBrightness: |
|
|
fWindowParameters.rackBrightness = value / 100.0f; |
|
|
|
|
|
|
|
|
windowParameters.rackBrightness = value / 100.0f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterHaloBrightness: |
|
|
case kWindowParameterHaloBrightness: |
|
|
fWindowParameters.haloBrightness = value / 100.0f; |
|
|
|
|
|
|
|
|
windowParameters.haloBrightness = value / 100.0f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterKnobMode: |
|
|
case kWindowParameterKnobMode: |
|
|
switch (static_cast<int>(value + 0.5f)) |
|
|
switch (static_cast<int>(value + 0.5f)) |
|
|
{ |
|
|
{ |
|
|
case 0: |
|
|
case 0: |
|
|
fWindowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; |
|
|
|
|
|
|
|
|
windowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; |
|
|
break; |
|
|
break; |
|
|
case 1: |
|
|
case 1: |
|
|
fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; |
|
|
|
|
|
|
|
|
windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; |
|
|
break; |
|
|
break; |
|
|
case 2: |
|
|
case 2: |
|
|
fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; |
|
|
|
|
|
|
|
|
windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterWheelKnobControl: |
|
|
case kWindowParameterWheelKnobControl: |
|
|
fWindowParameters.knobScroll = value > 0.5f; |
|
|
|
|
|
|
|
|
windowParameters.knobScroll = value > 0.5f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterWheelSensitivity: |
|
|
case kWindowParameterWheelSensitivity: |
|
|
fWindowParameters.knobScrollSensitivity = value / 1000.0f; |
|
|
|
|
|
|
|
|
windowParameters.knobScrollSensitivity = value / 1000.0f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterLockModulePositions: |
|
|
case kWindowParameterLockModulePositions: |
|
|
fWindowParameters.lockModules = value > 0.5f; |
|
|
|
|
|
|
|
|
windowParameters.lockModules = value > 0.5f; |
|
|
break; |
|
|
break; |
|
|
case kWindowParameterUpdateRateLimit: |
|
|
case kWindowParameterUpdateRateLimit: |
|
|
fWindowParameters.rateLimit = static_cast<int>(value + 0.5f); |
|
|
|
|
|
fRateLimitStep = 0; |
|
|
|
|
|
|
|
|
windowParameters.rateLimit = static_cast<int>(value + 0.5f); |
|
|
|
|
|
rateLimitStep = 0; |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
WindowParametersSetValues(context->window, fWindowParameters); |
|
|
|
|
|
|
|
|
WindowParametersSetValues(context->window, windowParameters); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void stateChanged(const char* key, const char* value) override |
|
|
void stateChanged(const char* key, const char* value) override |
|
@@ -580,15 +587,15 @@ protected: |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
const ScopedContext sc(this, mods); |
|
|
const ScopedContext sc(this, mods); |
|
|
return context->event->handleButton(fLastMousePos, button, action, mods); |
|
|
|
|
|
|
|
|
return context->event->handleButton(lastMousePos, button, action, mods); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool onMotion(const MotionEvent& ev) override |
|
|
bool onMotion(const MotionEvent& ev) override |
|
|
{ |
|
|
{ |
|
|
const rack::math::Vec mousePos = rack::math::Vec(ev.pos.getX(), ev.pos.getY()).div(getScaleFactor()).round(); |
|
|
const rack::math::Vec mousePos = rack::math::Vec(ev.pos.getX(), ev.pos.getY()).div(getScaleFactor()).round(); |
|
|
const rack::math::Vec mouseDelta = mousePos.minus(fLastMousePos); |
|
|
|
|
|
|
|
|
const rack::math::Vec mouseDelta = mousePos.minus(lastMousePos); |
|
|
|
|
|
|
|
|
fLastMousePos = mousePos; |
|
|
|
|
|
|
|
|
lastMousePos = mousePos; |
|
|
|
|
|
|
|
|
const ScopedContext sc(this, glfwMods(ev.mod)); |
|
|
const ScopedContext sc(this, glfwMods(ev.mod)); |
|
|
return context->event->handleHover(mousePos, mouseDelta); |
|
|
return context->event->handleHover(mousePos, mouseDelta); |
|
@@ -605,7 +612,7 @@ protected: |
|
|
|
|
|
|
|
|
const int mods = glfwMods(ev.mod); |
|
|
const int mods = glfwMods(ev.mod); |
|
|
const ScopedContext sc(this, mods); |
|
|
const ScopedContext sc(this, mods); |
|
|
return context->event->handleScroll(fLastMousePos, scrollDelta); |
|
|
|
|
|
|
|
|
return context->event->handleScroll(lastMousePos, scrollDelta); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool onCharacterInput(const CharacterInputEvent& ev) override |
|
|
bool onCharacterInput(const CharacterInputEvent& ev) override |
|
@@ -615,7 +622,7 @@ protected: |
|
|
|
|
|
|
|
|
const int mods = glfwMods(ev.mod); |
|
|
const int mods = glfwMods(ev.mod); |
|
|
const ScopedContext sc(this, mods); |
|
|
const ScopedContext sc(this, mods); |
|
|
return context->event->handleText(fLastMousePos, ev.character); |
|
|
|
|
|
|
|
|
return context->event->handleText(lastMousePos, ev.character); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool onKeyboard(const KeyboardEvent& ev) override |
|
|
bool onKeyboard(const KeyboardEvent& ev) override |
|
@@ -690,7 +697,7 @@ protected: |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const ScopedContext sc(this, mods); |
|
|
const ScopedContext sc(this, mods); |
|
|
return context->event->handleKey(fLastMousePos, key, ev.keycode, action, mods); |
|
|
|
|
|
|
|
|
return context->event->handleKey(lastMousePos, key, ev.keycode, action, mods); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void onResize(const ResizeEvent& ev) override |
|
|
void onResize(const ResizeEvent& ev) override |
|
@@ -707,13 +714,17 @@ protected: |
|
|
setState("windowSize", sizeString); |
|
|
setState("windowSize", sizeString); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void uiFocus(const bool focus, CrossingMode) override |
|
|
|
|
|
|
|
|
void uiFocus(const bool gotFocus, CrossingMode) override |
|
|
{ |
|
|
{ |
|
|
if (focus) |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
const ScopedContext sc(this, 0); |
|
|
|
|
|
context->event->handleLeave(); |
|
|
|
|
|
|
|
|
if (gotFocus) |
|
|
|
|
|
{ |
|
|
|
|
|
getWindow().focus(); |
|
|
|
|
|
} |
|
|
|
|
|
else |
|
|
|
|
|
{ |
|
|
|
|
|
const ScopedContext sc(this, 0); |
|
|
|
|
|
context->event->handleLeave(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void uiFileBrowserSelected(const char* const filename) override |
|
|
void uiFileBrowserSelected(const char* const filename) override |
|
|