Browse Source

VST3: Add stubs for keyboard handling

Signed-off-by: falkTX <falktx@falktx.com>
pull/338/head
falkTX 4 years ago
parent
commit
ca84b57669
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
2 changed files with 73 additions and 4 deletions
  1. +23
    -0
      distrho/src/DistrhoUIInternal.hpp
  2. +50
    -4
      distrho/src/DistrhoUIVST3.cpp

+ 23
- 0
distrho/src/DistrhoUIInternal.hpp View File

@@ -331,6 +331,29 @@ public:
ui->onCharacterInput(cev);
return ret;
}

bool handlePluginKeyboardVST3(const bool press, const uint keychar, const uint keycode, const uint16_t mods)
{
DGL_NAMESPACE::Widget::KeyboardEvent ev;
ev.mod = mods;
ev.press = press;
ev.key = keychar;
ev.keycode = keycode;

const bool ret = ui->onKeyboard(ev);

DGL_NAMESPACE::Widget::CharacterInputEvent cev;
cev.mod = mods;
cev.keycode = keycode;
cev.character = keychar;

// if shift modifier is on, convert a-z -> A-Z for character input
if (keychar >= 'a' && keychar <= 'z' && (mods & DGL_NAMESPACE::kModifierShift) != 0)
cev.character -= 'a' - 'A';

ui->onCharacterInput(cev);
return ret;
}
#endif

// -------------------------------------------------------------------


+ 50
- 4
distrho/src/DistrhoUIVST3.cpp View File

@@ -191,16 +191,62 @@ public:
return V3_NOT_IMPLEMENTED;
}

v3_result onKeyDown(int16_t /*key_char*/, int16_t /*key_code*/, int16_t /*modifiers*/)
v3_result onKeyDown(const int16_t keychar, const int16_t keycode, const int16_t modifiers)
{
d_stdout("onKeyDown %i %i %x\n", keychar, keycode, modifiers);
DISTRHO_SAFE_ASSERT_INT_RETURN(keychar >= 0 && keychar < 0x7f, keychar, V3_FALSE);

// TODO
return V3_NOT_IMPLEMENTED;
uint dglcode = 0;

// TODO verify these
uint dglmods = 0;
if (modifiers & (1 << 0))
dglmods |= kModifierShift;
if (modifiers & (1 << 1))
dglmods |= kModifierAlt;
#ifdef DISTRHO_OS_MAC
if (modifiers & (1 << 2))
dglmods |= kModifierSuper;
if (modifiers & (1 << 3))
dglmods |= kModifierControl;
#else
if (modifiers & (1 << 2))
dglmods |= kModifierControl;
if (modifiers & (1 << 3))
dglmods |= kModifierSuper;
#endif

return fUI.handlePluginKeyboardVST3(true, static_cast<uint>(keychar), dglcode, dglmods) ? V3_TRUE : V3_FALSE;
}

v3_result onKeyUp(int16_t /*key_char*/, int16_t /*key_code*/, int16_t /*modifiers*/)
v3_result onKeyUp(const int16_t keychar, const int16_t keycode, const int16_t modifiers)
{
d_stdout("onKeyDown %i %i %x\n", keychar, keycode, modifiers);
DISTRHO_SAFE_ASSERT_INT_RETURN(keychar >= 0 && keychar < 0x7f, keychar, V3_FALSE);

// TODO
return V3_NOT_IMPLEMENTED;
uint dglcode = 0;

// TODO verify these
uint dglmods = 0;
if (modifiers & (1 << 0))
dglmods |= kModifierShift;
if (modifiers & (1 << 1))
dglmods |= kModifierAlt;
#ifdef DISTRHO_OS_MAC
if (modifiers & (1 << 2))
dglmods |= kModifierSuper;
if (modifiers & (1 << 3))
dglmods |= kModifierControl;
#else
if (modifiers & (1 << 2))
dglmods |= kModifierControl;
if (modifiers & (1 << 3))
dglmods |= kModifierSuper;
#endif

return fUI.handlePluginKeyboardVST3(false, static_cast<uint>(keychar), dglcode, dglmods) ? V3_TRUE : V3_FALSE;
}

v3_result getSize(v3_view_rect* const rect) const noexcept


Loading…
Cancel
Save