Force keyboard focus on first idle
Rack does it too, so whatever.. Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
parent
14a2cb153e
commit
461fbeb51d
2 changed files with 56 additions and 45 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit e5f724d2611e16669e9261b6e82b38e7d2283ed4
|
||||
Subproject commit fec73bc29fc3771d23e6ea03132597774f61c92e
|
||||
|
|
@ -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,14 +714,18 @@ protected:
|
|||
setState("windowSize", sizeString);
|
||||
}
|
||||
|
||||
void uiFocus(const bool focus, CrossingMode) override
|
||||
void uiFocus(const bool gotFocus, CrossingMode) override
|
||||
{
|
||||
if (gotFocus)
|
||||
{
|
||||
getWindow().focus();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (focus)
|
||||
return;
|
||||
|
||||
const ScopedContext sc(this, 0);
|
||||
context->event->handleLeave();
|
||||
}
|
||||
}
|
||||
|
||||
void uiFileBrowserSelected(const char* const filename) override
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue