From 71e562fbcc5304b18fc93744f76075ab3880c136 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 23 Aug 2021 23:40:30 +0100 Subject: [PATCH] Better handling of text input, implement search Signed-off-by: falkTX --- plugins/ProM/DistrhoUIProM.cpp | 69 +++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/plugins/ProM/DistrhoUIProM.cpp b/plugins/ProM/DistrhoUIProM.cpp index d8e1714..21330ae 100644 --- a/plugins/ProM/DistrhoUIProM.cpp +++ b/plugins/ProM/DistrhoUIProM.cpp @@ -231,9 +231,10 @@ static projectMKeycode dgl2pmkey(const DGL_NAMESPACE::Key key) noexcept case DGL_NAMESPACE::kKeyNumLock: case DGL_NAMESPACE::kKeyPrintScreen: case DGL_NAMESPACE::kKeyPause: - default: - return PROJECTM_K_NONE; + break; } + + return PROJECTM_K_NONE; } bool DistrhoUIProM::onKeyboard(const KeyboardEvent& ev) @@ -268,11 +269,32 @@ bool DistrhoUIProM::onKeyboard(const KeyboardEvent& ev) } #endif + // special handling for text + if (fPM->isTextInputActive(true) && !ev.press) + { + if (ev.key >= ' ' && ev.key <= 'z') + { + std::string key; + key += static_cast(ev.key); + fPM->setSearchText(key); + return true; + } + else if (ev.key == DGL_NAMESPACE::kKeyBackspace) + { + fPM->deleteSearchText(); + return true; + } + } + projectMKeycode pmKey = PROJECTM_K_NONE; - if ((ev.key >= PROJECTM_K_0 && ev.key <= PROJECTM_K_9) || - (ev.key >= PROJECTM_K_A && ev.key <= PROJECTM_K_Z) || - (ev.key >= PROJECTM_K_a && ev.key <= PROJECTM_K_z)) + if (ev.key >= kKeyF1) + { + pmKey = dgl2pmkey(static_cast(ev.key)); + } + else if ((ev.key >= PROJECTM_K_0 && ev.key <= PROJECTM_K_9) || + (ev.key >= PROJECTM_K_A && ev.key <= PROJECTM_K_Z) || + (ev.key >= PROJECTM_K_a && ev.key <= PROJECTM_K_z)) { pmKey = static_cast(ev.key); @@ -281,7 +303,42 @@ bool DistrhoUIProM::onKeyboard(const KeyboardEvent& ev) } else { - pmKey = dgl2pmkey(static_cast(ev.key)); + /* missing: + * PROJECTM_K_CAPSLOCK + */ + switch (ev.key) + { + case DGL_NAMESPACE::kKeyBackspace: + pmKey = PROJECTM_K_BACKSPACE; + break; + case DGL_NAMESPACE::kKeyEscape: + pmKey = PROJECTM_K_ESCAPE; + break; + case DGL_NAMESPACE::kKeyDelete: + pmKey = PROJECTM_K_DELETE; + break; + case '\r': + pmKey = PROJECTM_K_RETURN; + break; + case '/': + pmKey = PROJECTM_K_SLASH; + break; + case '\\': + pmKey = PROJECTM_K_BACKSLASH; + break; + case '+': + pmKey = PROJECTM_K_PLUS; + break; + case '-': + pmKey = PROJECTM_K_MINUS; + break; + case '=': + pmKey = PROJECTM_K_EQUALS; + break; + default: + // d_stdout("Unhandled key %u %u %c", ev.keycode, ev.key, ev.key); + break; + } } if (pmKey == PROJECTM_K_NONE)