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,
|
class CardinalUI : public CardinalBaseUI,
|
||||||
public WindowParametersCallback
|
public WindowParametersCallback
|
||||||
{
|
{
|
||||||
rack::math::Vec fLastMousePos;
|
rack::math::Vec lastMousePos;
|
||||||
WindowParameters fWindowParameters;
|
WindowParameters windowParameters;
|
||||||
int fRateLimitStep = 0;
|
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);
|
windowParameters.rateLimit = static_cast<int>(value + 0.5f);
|
||||||
fRateLimitStep = 0;
|
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);
|
windowParameters.rateLimit = static_cast<int>(value + 0.5f);
|
||||||
fRateLimitStep = 0;
|
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)
|
if (gotFocus)
|
||||||
return;
|
{
|
||||||
|
getWindow().focus();
|
||||||
const ScopedContext sc(this, 0);
|
}
|
||||||
context->event->handleLeave();
|
else
|
||||||
|
{
|
||||||
|
const ScopedContext sc(this, 0);
|
||||||
|
context->event->handleLeave();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiFileBrowserSelected(const char* const filename) override
|
void uiFileBrowserSelected(const char* const filename) override
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue