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,
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<int>(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<int>(value + 0.5f);
fRateLimitStep = 0;
windowParameters.rateLimit = static_cast<int>(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<int>(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<int>(value + 0.5f);
fRateLimitStep = 0;
windowParameters.rateLimit = static_cast<int>(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


Loading…
Cancel
Save