Browse Source

Force keyboard focus on first idle

Rack does it too, so whatever..

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.02
falkTX 3 years ago
parent
commit
461fbeb51d
2 changed files with 56 additions and 45 deletions
  1. +1
    -1
      plugins/AudibleInstruments
  2. +55
    -44
      src/CardinalUI.cpp

+ 1
- 1
plugins/AudibleInstruments

@@ -1 +1 @@
Subproject commit e5f724d2611e16669e9261b6e82b38e7d2283ed4
Subproject commit fec73bc29fc3771d23e6ea03132597774f61c92e

+ 55
- 44
src/CardinalUI.cpp View File

@@ -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


Loading…
Cancel
Save