diff --git a/plugins/AudibleInstruments b/plugins/AudibleInstruments index e5f724d..fec73bc 160000 --- a/plugins/AudibleInstruments +++ b/plugins/AudibleInstruments @@ -1 +1 @@ -Subproject commit e5f724d2611e16669e9261b6e82b38e7d2283ed4 +Subproject commit fec73bc29fc3771d23e6ea03132597774f61c92e diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index 2b1beb8..1c14aa3 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -237,9 +237,10 @@ void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, class CardinalUI : public CardinalBaseUI, 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 { CardinalPluginContext* const context; @@ -349,6 +350,12 @@ public: void uiIdle() override { + if (firstIdle) + { + firstIdle = false; + getWindow().focus(); + } + if (filebrowserhandle != nullptr && fileBrowserIdle(filebrowserhandle)) { { @@ -363,10 +370,10 @@ public: filebrowserhandle = nullptr; } - if (fWindowParameters.rateLimit != 0 && ++fRateLimitStep % (fWindowParameters.rateLimit * 2)) + if (windowParameters.rateLimit != 0 && ++rateLimitStep % (windowParameters.rateLimit * 2)) return; - fRateLimitStep = 0; + rateLimitStep = 0; repaint(); } @@ -377,54 +384,54 @@ public: switch (param) { case kWindowParameterShowTooltips: - fWindowParameters.tooltips = value > 0.5f; + windowParameters.tooltips = value > 0.5f; break; case kWindowParameterCableOpacity: mult = 100.0f; - fWindowParameters.cableOpacity = value; + windowParameters.cableOpacity = value; break; case kWindowParameterCableTension: mult = 100.0f; - fWindowParameters.cableTension = value; + windowParameters.cableTension = value; break; case kWindowParameterRackBrightness: mult = 100.0f; - fWindowParameters.rackBrightness = value; + windowParameters.rackBrightness = value; break; case kWindowParameterHaloBrightness: mult = 100.0f; - fWindowParameters.haloBrightness = value; + windowParameters.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; + windowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; break; case rack::settings::KNOB_MODE_ROTARY_ABSOLUTE: value = 1; - fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; + windowParameters.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; + windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; break; } break; case kWindowParameterWheelKnobControl: - fWindowParameters.knobScroll = value > 0.5f; + windowParameters.knobScroll = value > 0.5f; break; case kWindowParameterWheelSensitivity: mult = 1000.0f; - fWindowParameters.knobScrollSensitivity = value; + windowParameters.knobScrollSensitivity = value; break; case kWindowParameterLockModulePositions: - fWindowParameters.lockModules = value > 0.5f; + windowParameters.lockModules = value > 0.5f; break; case kWindowParameterUpdateRateLimit: - fWindowParameters.rateLimit = static_cast(value + 0.5f); - fRateLimitStep = 0; + windowParameters.rateLimit = static_cast(value + 0.5f); + rateLimitStep = 0; break; default: return; @@ -449,52 +456,52 @@ protected: switch (index - kModuleParameters) { case kWindowParameterShowTooltips: - fWindowParameters.tooltips = value > 0.5f; + windowParameters.tooltips = value > 0.5f; break; case kWindowParameterCableOpacity: - fWindowParameters.cableOpacity = value / 100.0f; + windowParameters.cableOpacity = value / 100.0f; break; case kWindowParameterCableTension: - fWindowParameters.cableTension = value / 100.0f; + windowParameters.cableTension = value / 100.0f; break; case kWindowParameterRackBrightness: - fWindowParameters.rackBrightness = value / 100.0f; + windowParameters.rackBrightness = value / 100.0f; break; case kWindowParameterHaloBrightness: - fWindowParameters.haloBrightness = value / 100.0f; + windowParameters.haloBrightness = value / 100.0f; break; case kWindowParameterKnobMode: switch (static_cast(value + 0.5f)) { case 0: - fWindowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; + windowParameters.knobMode = rack::settings::KNOB_MODE_LINEAR; break; case 1: - fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; + windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_ABSOLUTE; break; case 2: - fWindowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; + windowParameters.knobMode = rack::settings::KNOB_MODE_ROTARY_RELATIVE; break; } break; case kWindowParameterWheelKnobControl: - fWindowParameters.knobScroll = value > 0.5f; + windowParameters.knobScroll = value > 0.5f; break; case kWindowParameterWheelSensitivity: - fWindowParameters.knobScrollSensitivity = value / 1000.0f; + windowParameters.knobScrollSensitivity = value / 1000.0f; break; case kWindowParameterLockModulePositions: - fWindowParameters.lockModules = value > 0.5f; + windowParameters.lockModules = value > 0.5f; break; case kWindowParameterUpdateRateLimit: - fWindowParameters.rateLimit = static_cast(value + 0.5f); - fRateLimitStep = 0; + windowParameters.rateLimit = static_cast(value + 0.5f); + rateLimitStep = 0; break; default: return; } - WindowParametersSetValues(context->window, fWindowParameters); + WindowParametersSetValues(context->window, windowParameters); } void stateChanged(const char* key, const char* value) override @@ -580,15 +587,15 @@ protected: */ 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 { 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)); return context->event->handleHover(mousePos, mouseDelta); @@ -605,7 +612,7 @@ protected: const int mods = glfwMods(ev.mod); const ScopedContext sc(this, mods); - return context->event->handleScroll(fLastMousePos, scrollDelta); + return context->event->handleScroll(lastMousePos, scrollDelta); } bool onCharacterInput(const CharacterInputEvent& ev) override @@ -615,7 +622,7 @@ protected: const int mods = glfwMods(ev.mod); 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 @@ -690,7 +697,7 @@ protected: } 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 @@ -707,13 +714,17 @@ protected: 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