From 95114eccc774bbb0fbeade8904aafa4f9b6d143d Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 02:50:52 +0200 Subject: initial impl of arbitrary keybindings Issue: #118 Linux and OSX likely broken for now. --- opentrack/global-shortcuts.cpp | 205 ++++++++++++++++++++++++++++++----------- 1 file changed, 149 insertions(+), 56 deletions(-) (limited to 'opentrack/global-shortcuts.cpp') diff --git a/opentrack/global-shortcuts.cpp b/opentrack/global-shortcuts.cpp index 7569fd9a..5c921a90 100644 --- a/opentrack/global-shortcuts.cpp +++ b/opentrack/global-shortcuts.cpp @@ -1,8 +1,8 @@ #include -#include - -extern QList global_key_sequences; -extern QList global_windows_key_sequences; +#include +#include +#include "global-shortcuts.h" +#include #if defined(_WIN32) # ifndef DIRECTINPUT_VERSION @@ -11,58 +11,151 @@ extern QList global_windows_key_sequences; # include # include -QList global_windows_key_sequences = - QList() - << 0 - << DIK_F1 - << DIK_F2 - << DIK_F3 - << DIK_F4 - << DIK_F5 - << DIK_F6 - << DIK_F7 - << DIK_F8 - << DIK_F9 - << DIK_F10 - << DIK_F11 - << DIK_F12 - << DIK_LEFT - << DIK_RIGHT - << DIK_UP - << DIK_DOWN - << DIK_PGUP - << DIK_PGDN - << DIK_HOME - << DIK_END - << DIK_BACK - << DIK_DELETE - << DIK_RETURN; -#endif +QList windows_key_mods = + QList({ + win_key(DIK_LCONTROL, Qt::Key::Key_Control), + win_key(DIK_RCONTROL, Qt::Key::Key_Control), + win_key(DIK_LALT, Qt::Key::Key_Alt), + win_key(DIK_RALT, Qt::Key::Key_Alt), + win_key(DIK_LSHIFT, Qt::Key::Key_Shift), + win_key(DIK_RSHIFT, Qt::Key::Key_Shift), + win_key(DIK_LWIN, Qt::Key::Key_unknown), + win_key(DIK_RWIN, Qt::Key::Key_unknown) + }); + +QList windows_key_sequences = + QList({ + win_key(DIK_F1, Qt::Key::Key_F1 ), + win_key(DIK_F2, Qt::Key::Key_F2 ), + win_key(DIK_F3, Qt::Key::Key_F3 ), + win_key(DIK_F4, Qt::Key::Key_F4 ), + win_key(DIK_F5, Qt::Key::Key_F5 ), + win_key(DIK_F6, Qt::Key::Key_F6 ), + win_key(DIK_F7, Qt::Key::Key_F7 ), + win_key(DIK_F8, Qt::Key::Key_F8 ), + win_key(DIK_F9, Qt::Key::Key_F9 ), + win_key(DIK_F10, Qt::Key::Key_F10 ), + win_key(DIK_F11, Qt::Key::Key_F11 ), + win_key(DIK_F12, Qt::Key::Key_F12 ), + win_key(DIK_LEFT, Qt::Key::Key_Left ), + win_key(DIK_RIGHT, Qt::Key::Key_Right ), + win_key(DIK_UP, Qt::Key::Key_Up ), + win_key(DIK_DOWN, Qt::Key::Key_Down ), + win_key(DIK_PRIOR, Qt::Key::Key_PageUp ), + win_key(DIK_NEXT, Qt::Key::Key_PageDown ), + win_key(DIK_HOME, Qt::Key::Key_Home ), + win_key(DIK_END, Qt::Key::Key_End ), + win_key(DIK_BACK, Qt::Key::Key_Backspace ), + win_key(DIK_COMMA, Qt::Key::Key_Comma ), + win_key(DIK_PERIOD, Qt::Key::Key_Period ), + win_key(DIK_LBRACKET, Qt::Key::Key_BracketLeft ), + win_key(DIK_RBRACKET, Qt::Key::Key_BracketRight ), + win_key(DIK_SEMICOLON, Qt::Key::Key_Semicolon ), + win_key(DIK_SLASH, Qt::Key::Key_Slash ), + win_key(DIK_BACKSLASH, Qt::Key::Key_Backslash ), + win_key(DIK_BACKSPACE, Qt::Key::Key_Backspace ), + win_key(DIK_APOSTROPHE, Qt::Key::Key_Apostrophe ), + win_key(DIK_GRAVE, Qt::Key::Key_QuoteLeft ), + win_key(DIK_MINUS, Qt::Key::Key_Minus ), + win_key(DIK_EQUALS, Qt::Key::Key_Equal ), + win_key(DIK_PERIOD, Qt::Key::Key_Period ), + win_key(DIK_F1, Qt::Key::Key_F1 ), + win_key(DIK_F2, Qt::Key::Key_F2 ), + win_key(DIK_F3, Qt::Key::Key_F3 ), + win_key(DIK_F4, Qt::Key::Key_F4 ), + win_key(DIK_F5, Qt::Key::Key_F5 ), + win_key(DIK_F6, Qt::Key::Key_F6 ), + win_key(DIK_F7, Qt::Key::Key_F7 ), + win_key(DIK_F8, Qt::Key::Key_F8 ), + win_key(DIK_F9, Qt::Key::Key_F9 ), + win_key(DIK_F10, Qt::Key::Key_F10 ), + win_key(DIK_F11, Qt::Key::Key_F11 ), + win_key(DIK_F12, Qt::Key::Key_F12 ), + win_key(DIK_0, Qt::Key::Key_0 ), + win_key(DIK_1, Qt::Key::Key_1 ), + win_key(DIK_2, Qt::Key::Key_2 ), + win_key(DIK_3, Qt::Key::Key_3 ), + win_key(DIK_4, Qt::Key::Key_4 ), + win_key(DIK_5, Qt::Key::Key_5 ), + win_key(DIK_6, Qt::Key::Key_6 ), + win_key(DIK_7, Qt::Key::Key_7 ), + win_key(DIK_8, Qt::Key::Key_8 ), + win_key(DIK_9, Qt::Key::Key_9 ), + win_key(DIK_A, Qt::Key::Key_A ), + win_key(DIK_B, Qt::Key::Key_B ), + win_key(DIK_C, Qt::Key::Key_C ), + win_key(DIK_D, Qt::Key::Key_D ), + win_key(DIK_E, Qt::Key::Key_E ), + win_key(DIK_F, Qt::Key::Key_F ), + win_key(DIK_G, Qt::Key::Key_G ), + win_key(DIK_H, Qt::Key::Key_H ), + win_key(DIK_I, Qt::Key::Key_I ), + win_key(DIK_J, Qt::Key::Key_J ), + win_key(DIK_K, Qt::Key::Key_K ), + win_key(DIK_L, Qt::Key::Key_L ), + win_key(DIK_M, Qt::Key::Key_M ), + win_key(DIK_N, Qt::Key::Key_N ), + win_key(DIK_O, Qt::Key::Key_O ), + win_key(DIK_P, Qt::Key::Key_P ), + win_key(DIK_Q, Qt::Key::Key_Q ), + win_key(DIK_R, Qt::Key::Key_R ), + win_key(DIK_S, Qt::Key::Key_S ), + win_key(DIK_T, Qt::Key::Key_T ), + win_key(DIK_U, Qt::Key::Key_U ), + win_key(DIK_V, Qt::Key::Key_V ), + win_key(DIK_W, Qt::Key::Key_W ), + win_key(DIK_X, Qt::Key::Key_X ), + win_key(DIK_Y, Qt::Key::Key_Y ), + win_key(DIK_Z, Qt::Key::Key_Z ), + }); + +bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) +{ + auto qt = static_cast(qt_).toInt(); + const auto all_mods = Qt::KeyboardModifierMask; + auto our_mods = qt & all_mods; +#ifdef _WIN32 + const auto our_mods_ = our_mods; + our_mods |= Qt::ShiftModifier; + switch (qt) + { + case Qt::Key::Key_BraceLeft: qt = Qt::Key::Key_BracketLeft; break; + case Qt::Key::Key_BraceRight: qt = Qt::Key::Key_BracketRight; break; + case Qt::Key::Key_ParenLeft: qt = Qt::Key::Key_9; break; + case Qt::Key::Key_ParenRight: qt = Qt::Key::Key_0; break; -QList global_key_sequences = - QList() - << "" - << "F1" - << "F2" - << "F3" - << "F4" - << "F5" - << "F6" - << "F7" - << "F8" - << "F9" - << "F10" - << "F11" - << "F12" - << "Left" - << "Right" - << "Up" - << "Down" - << "PgUp" - << "PgDown" - << "Home" - << "End" - << "Del" -; + case Qt::Key::Key_Exclam: qt = Qt::Key::Key_1; break; + case Qt::Key::Key_At: qt = Qt::Key::Key_2; break; + case Qt::Key::Key_NumberSign: qt = Qt::Key::Key_3; break; + case Qt::Key::Key_Dollar: qt = Qt::Key::Key_4; break; + case Qt::Key::Key_Percent: qt = Qt::Key::Key_5; break; + case Qt::Key::Key_AsciiCircum: qt = Qt::Key::Key_6; break; + case Qt::Key::Key_Ampersand: qt = Qt::Key::Key_7; break; + case Qt::Key::Key_Asterisk: qt = Qt::Key::Key_8; break; + case Qt::Key::Key_Underscore: qt = Qt::Key::Key_Minus; break; + case Qt::Key::Key_Plus: qt = Qt::Key::Key_Equal; break; + case Qt::Key::Key_Colon: qt = Qt::Key::Key_Semicolon; break; + case Qt::Key::Key_QuoteDbl: qt = Qt::Key::Key_Apostrophe; break; + case Qt::Key::Key_Less: qt = Qt::Key::Key_Comma; break; + case Qt::Key::Key_Question: qt = Qt::Key::Key_Slash; break; + case Qt::Key::Key_Bar: qt = Qt::Key::Key_Backslash; break; + default: our_mods = our_mods_; break; + } +#endif + + const auto key = qt & ~all_mods; + for (auto& wk : windows_key_sequences) + { + if (wk.qt == key) + { + dik = wk.win; + mods = static_cast(our_mods); + return true; + } + } + return false; +} + +#endif -- cgit v1.2.3 From 6124b54ac396c36deb979f20c8b1f43e95cb5dee Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 06:25:34 +0200 Subject: shortcuts: add missing Windows binding for enter key --- opentrack/global-shortcuts.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'opentrack/global-shortcuts.cpp') diff --git a/opentrack/global-shortcuts.cpp b/opentrack/global-shortcuts.cpp index 5c921a90..e4cb7e0f 100644 --- a/opentrack/global-shortcuts.cpp +++ b/opentrack/global-shortcuts.cpp @@ -107,6 +107,7 @@ QList windows_key_sequences = win_key(DIK_X, Qt::Key::Key_X ), win_key(DIK_Y, Qt::Key::Key_Y ), win_key(DIK_Z, Qt::Key::Key_Z ), + win_key(DIK_RETURN, Qt::Key::Key_Return), }); bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) -- cgit v1.2.3 From 7224592458521a0c2312fcc29e33764c271cd4dc Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 06:34:44 +0200 Subject: shortcuts: fix shift-keys for real this time --- opentrack/global-shortcuts.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'opentrack/global-shortcuts.cpp') diff --git a/opentrack/global-shortcuts.cpp b/opentrack/global-shortcuts.cpp index e4cb7e0f..0fb5a2a5 100644 --- a/opentrack/global-shortcuts.cpp +++ b/opentrack/global-shortcuts.cpp @@ -1,8 +1,8 @@ #include #include #include +#include #include "global-shortcuts.h" -#include #if defined(_WIN32) # ifndef DIRECTINPUT_VERSION @@ -113,12 +113,11 @@ QList windows_key_sequences = bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) { auto qt = static_cast(qt_).toInt(); - const auto all_mods = Qt::KeyboardModifierMask; - auto our_mods = qt & all_mods; + auto our_mods = qt & Qt::KeyboardModifierMask; #ifdef _WIN32 const auto our_mods_ = our_mods; our_mods |= Qt::ShiftModifier; - switch (qt) + switch (qt & ~Qt::ShiftModifier) { case Qt::Key::Key_BraceLeft: qt = Qt::Key::Key_BracketLeft; break; case Qt::Key::Key_BraceRight: qt = Qt::Key::Key_BracketRight; break; @@ -146,7 +145,7 @@ bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) } #endif - const auto key = qt & ~all_mods; + const auto key = qt & ~Qt::KeyboardModifierMask; for (auto& wk : windows_key_sequences) { if (wk.qt == key) -- cgit v1.2.3 From 61b6c69b3f36ebea142a55d0eb37601d99bcd522 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 06:55:12 +0200 Subject: shortcuts: add missing keybindings --- opentrack/global-shortcuts.cpp | 13 +++++++------ opentrack/global-shortcuts.h | 4 ++++ 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'opentrack/global-shortcuts.cpp') diff --git a/opentrack/global-shortcuts.cpp b/opentrack/global-shortcuts.cpp index 0fb5a2a5..f719e766 100644 --- a/opentrack/global-shortcuts.cpp +++ b/opentrack/global-shortcuts.cpp @@ -1,9 +1,3 @@ -#include -#include -#include -#include -#include "global-shortcuts.h" - #if defined(_WIN32) # ifndef DIRECTINPUT_VERSION # define DIRECTINPUT_VERSION 0x800 @@ -11,6 +5,12 @@ # include # include +#include +#include +#include +#include +#include "global-shortcuts.h" + QList windows_key_mods = QList({ win_key(DIK_LCONTROL, Qt::Key::Key_Control), @@ -108,6 +108,7 @@ QList windows_key_sequences = win_key(DIK_Y, Qt::Key::Key_Y ), win_key(DIK_Z, Qt::Key::Key_Z ), win_key(DIK_RETURN, Qt::Key::Key_Return), + win_key(DIK_INSERT, Qt::Key::Key_Insert), }); bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) diff --git a/opentrack/global-shortcuts.h b/opentrack/global-shortcuts.h index 2b25321b..8167036d 100644 --- a/opentrack/global-shortcuts.h +++ b/opentrack/global-shortcuts.h @@ -1,5 +1,7 @@ #pragma once +#ifdef _WIN32 + struct win_key; extern QList windows_key_mods; @@ -12,3 +14,5 @@ struct win_key Qt::Key qt; static bool from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers &mods); }; + +#endif -- cgit v1.2.3 From 39d87e711d3eed36d4fecf48250becaa8cbdfb56 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 06:59:31 +0200 Subject: rename to win32-shortcuts.cpp --- opentrack/global-shortcuts.cpp | 162 ----------------------------------------- opentrack/global-shortcuts.h | 18 ----- opentrack/shortcuts.cpp | 2 +- opentrack/win32-shortcuts.cpp | 162 +++++++++++++++++++++++++++++++++++++++++ opentrack/win32-shortcuts.h | 18 +++++ 5 files changed, 181 insertions(+), 181 deletions(-) delete mode 100644 opentrack/global-shortcuts.cpp delete mode 100644 opentrack/global-shortcuts.h create mode 100644 opentrack/win32-shortcuts.cpp create mode 100644 opentrack/win32-shortcuts.h (limited to 'opentrack/global-shortcuts.cpp') diff --git a/opentrack/global-shortcuts.cpp b/opentrack/global-shortcuts.cpp deleted file mode 100644 index f719e766..00000000 --- a/opentrack/global-shortcuts.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#if defined(_WIN32) -# ifndef DIRECTINPUT_VERSION -# define DIRECTINPUT_VERSION 0x800 -# endif -# include -# include - -#include -#include -#include -#include -#include "global-shortcuts.h" - -QList windows_key_mods = - QList({ - win_key(DIK_LCONTROL, Qt::Key::Key_Control), - win_key(DIK_RCONTROL, Qt::Key::Key_Control), - win_key(DIK_LALT, Qt::Key::Key_Alt), - win_key(DIK_RALT, Qt::Key::Key_Alt), - win_key(DIK_LSHIFT, Qt::Key::Key_Shift), - win_key(DIK_RSHIFT, Qt::Key::Key_Shift), - win_key(DIK_LWIN, Qt::Key::Key_unknown), - win_key(DIK_RWIN, Qt::Key::Key_unknown) - }); - -QList windows_key_sequences = - QList({ - win_key(DIK_F1, Qt::Key::Key_F1 ), - win_key(DIK_F2, Qt::Key::Key_F2 ), - win_key(DIK_F3, Qt::Key::Key_F3 ), - win_key(DIK_F4, Qt::Key::Key_F4 ), - win_key(DIK_F5, Qt::Key::Key_F5 ), - win_key(DIK_F6, Qt::Key::Key_F6 ), - win_key(DIK_F7, Qt::Key::Key_F7 ), - win_key(DIK_F8, Qt::Key::Key_F8 ), - win_key(DIK_F9, Qt::Key::Key_F9 ), - win_key(DIK_F10, Qt::Key::Key_F10 ), - win_key(DIK_F11, Qt::Key::Key_F11 ), - win_key(DIK_F12, Qt::Key::Key_F12 ), - win_key(DIK_LEFT, Qt::Key::Key_Left ), - win_key(DIK_RIGHT, Qt::Key::Key_Right ), - win_key(DIK_UP, Qt::Key::Key_Up ), - win_key(DIK_DOWN, Qt::Key::Key_Down ), - win_key(DIK_PRIOR, Qt::Key::Key_PageUp ), - win_key(DIK_NEXT, Qt::Key::Key_PageDown ), - win_key(DIK_HOME, Qt::Key::Key_Home ), - win_key(DIK_END, Qt::Key::Key_End ), - win_key(DIK_BACK, Qt::Key::Key_Backspace ), - win_key(DIK_COMMA, Qt::Key::Key_Comma ), - win_key(DIK_PERIOD, Qt::Key::Key_Period ), - win_key(DIK_LBRACKET, Qt::Key::Key_BracketLeft ), - win_key(DIK_RBRACKET, Qt::Key::Key_BracketRight ), - win_key(DIK_SEMICOLON, Qt::Key::Key_Semicolon ), - win_key(DIK_SLASH, Qt::Key::Key_Slash ), - win_key(DIK_BACKSLASH, Qt::Key::Key_Backslash ), - win_key(DIK_BACKSPACE, Qt::Key::Key_Backspace ), - win_key(DIK_APOSTROPHE, Qt::Key::Key_Apostrophe ), - win_key(DIK_GRAVE, Qt::Key::Key_QuoteLeft ), - win_key(DIK_MINUS, Qt::Key::Key_Minus ), - win_key(DIK_EQUALS, Qt::Key::Key_Equal ), - win_key(DIK_PERIOD, Qt::Key::Key_Period ), - win_key(DIK_F1, Qt::Key::Key_F1 ), - win_key(DIK_F2, Qt::Key::Key_F2 ), - win_key(DIK_F3, Qt::Key::Key_F3 ), - win_key(DIK_F4, Qt::Key::Key_F4 ), - win_key(DIK_F5, Qt::Key::Key_F5 ), - win_key(DIK_F6, Qt::Key::Key_F6 ), - win_key(DIK_F7, Qt::Key::Key_F7 ), - win_key(DIK_F8, Qt::Key::Key_F8 ), - win_key(DIK_F9, Qt::Key::Key_F9 ), - win_key(DIK_F10, Qt::Key::Key_F10 ), - win_key(DIK_F11, Qt::Key::Key_F11 ), - win_key(DIK_F12, Qt::Key::Key_F12 ), - win_key(DIK_0, Qt::Key::Key_0 ), - win_key(DIK_1, Qt::Key::Key_1 ), - win_key(DIK_2, Qt::Key::Key_2 ), - win_key(DIK_3, Qt::Key::Key_3 ), - win_key(DIK_4, Qt::Key::Key_4 ), - win_key(DIK_5, Qt::Key::Key_5 ), - win_key(DIK_6, Qt::Key::Key_6 ), - win_key(DIK_7, Qt::Key::Key_7 ), - win_key(DIK_8, Qt::Key::Key_8 ), - win_key(DIK_9, Qt::Key::Key_9 ), - win_key(DIK_A, Qt::Key::Key_A ), - win_key(DIK_B, Qt::Key::Key_B ), - win_key(DIK_C, Qt::Key::Key_C ), - win_key(DIK_D, Qt::Key::Key_D ), - win_key(DIK_E, Qt::Key::Key_E ), - win_key(DIK_F, Qt::Key::Key_F ), - win_key(DIK_G, Qt::Key::Key_G ), - win_key(DIK_H, Qt::Key::Key_H ), - win_key(DIK_I, Qt::Key::Key_I ), - win_key(DIK_J, Qt::Key::Key_J ), - win_key(DIK_K, Qt::Key::Key_K ), - win_key(DIK_L, Qt::Key::Key_L ), - win_key(DIK_M, Qt::Key::Key_M ), - win_key(DIK_N, Qt::Key::Key_N ), - win_key(DIK_O, Qt::Key::Key_O ), - win_key(DIK_P, Qt::Key::Key_P ), - win_key(DIK_Q, Qt::Key::Key_Q ), - win_key(DIK_R, Qt::Key::Key_R ), - win_key(DIK_S, Qt::Key::Key_S ), - win_key(DIK_T, Qt::Key::Key_T ), - win_key(DIK_U, Qt::Key::Key_U ), - win_key(DIK_V, Qt::Key::Key_V ), - win_key(DIK_W, Qt::Key::Key_W ), - win_key(DIK_X, Qt::Key::Key_X ), - win_key(DIK_Y, Qt::Key::Key_Y ), - win_key(DIK_Z, Qt::Key::Key_Z ), - win_key(DIK_RETURN, Qt::Key::Key_Return), - win_key(DIK_INSERT, Qt::Key::Key_Insert), - }); - -bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) -{ - auto qt = static_cast(qt_).toInt(); - auto our_mods = qt & Qt::KeyboardModifierMask; -#ifdef _WIN32 - const auto our_mods_ = our_mods; - our_mods |= Qt::ShiftModifier; - switch (qt & ~Qt::ShiftModifier) - { - case Qt::Key::Key_BraceLeft: qt = Qt::Key::Key_BracketLeft; break; - case Qt::Key::Key_BraceRight: qt = Qt::Key::Key_BracketRight; break; - case Qt::Key::Key_ParenLeft: qt = Qt::Key::Key_9; break; - case Qt::Key::Key_ParenRight: qt = Qt::Key::Key_0; break; - - case Qt::Key::Key_Exclam: qt = Qt::Key::Key_1; break; - case Qt::Key::Key_At: qt = Qt::Key::Key_2; break; - case Qt::Key::Key_NumberSign: qt = Qt::Key::Key_3; break; - case Qt::Key::Key_Dollar: qt = Qt::Key::Key_4; break; - case Qt::Key::Key_Percent: qt = Qt::Key::Key_5; break; - case Qt::Key::Key_AsciiCircum: qt = Qt::Key::Key_6; break; - case Qt::Key::Key_Ampersand: qt = Qt::Key::Key_7; break; - case Qt::Key::Key_Asterisk: qt = Qt::Key::Key_8; break; - - case Qt::Key::Key_Underscore: qt = Qt::Key::Key_Minus; break; - case Qt::Key::Key_Plus: qt = Qt::Key::Key_Equal; break; - - case Qt::Key::Key_Colon: qt = Qt::Key::Key_Semicolon; break; - case Qt::Key::Key_QuoteDbl: qt = Qt::Key::Key_Apostrophe; break; - case Qt::Key::Key_Less: qt = Qt::Key::Key_Comma; break; - case Qt::Key::Key_Question: qt = Qt::Key::Key_Slash; break; - case Qt::Key::Key_Bar: qt = Qt::Key::Key_Backslash; break; - default: our_mods = our_mods_; break; - } -#endif - - const auto key = qt & ~Qt::KeyboardModifierMask; - for (auto& wk : windows_key_sequences) - { - if (wk.qt == key) - { - dik = wk.win; - mods = static_cast(our_mods); - return true; - } - } - return false; -} - -#endif diff --git a/opentrack/global-shortcuts.h b/opentrack/global-shortcuts.h deleted file mode 100644 index 8167036d..00000000 --- a/opentrack/global-shortcuts.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#ifdef _WIN32 - -struct win_key; - -extern QList windows_key_mods; -extern QList windows_key_sequences; - -struct win_key -{ - win_key(int win, Qt::Key qt) : win(win), qt(qt) {} - int win; - Qt::Key qt; - static bool from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers &mods); -}; - -#endif diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 78b56cce..1dd77e4c 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -7,11 +7,11 @@ */ #include "shortcuts.h" -#include "global-shortcuts.h" #include #if defined(_WIN32) #include +#include "win32-shortcuts.h" void KeybindingWorker::set_keys(Key kCenter_, Key kToggle_, Key kZero_) { diff --git a/opentrack/win32-shortcuts.cpp b/opentrack/win32-shortcuts.cpp new file mode 100644 index 00000000..dbf4f9fd --- /dev/null +++ b/opentrack/win32-shortcuts.cpp @@ -0,0 +1,162 @@ +#if defined(_WIN32) +# ifndef DIRECTINPUT_VERSION +# define DIRECTINPUT_VERSION 0x800 +# endif +# include +# include + +#include +#include +#include +#include +#include "win32-shortcuts.h" + +QList windows_key_mods = + QList({ + win_key(DIK_LCONTROL, Qt::Key::Key_Control), + win_key(DIK_RCONTROL, Qt::Key::Key_Control), + win_key(DIK_LALT, Qt::Key::Key_Alt), + win_key(DIK_RALT, Qt::Key::Key_Alt), + win_key(DIK_LSHIFT, Qt::Key::Key_Shift), + win_key(DIK_RSHIFT, Qt::Key::Key_Shift), + win_key(DIK_LWIN, Qt::Key::Key_unknown), + win_key(DIK_RWIN, Qt::Key::Key_unknown) + }); + +QList windows_key_sequences = + QList({ + win_key(DIK_F1, Qt::Key::Key_F1 ), + win_key(DIK_F2, Qt::Key::Key_F2 ), + win_key(DIK_F3, Qt::Key::Key_F3 ), + win_key(DIK_F4, Qt::Key::Key_F4 ), + win_key(DIK_F5, Qt::Key::Key_F5 ), + win_key(DIK_F6, Qt::Key::Key_F6 ), + win_key(DIK_F7, Qt::Key::Key_F7 ), + win_key(DIK_F8, Qt::Key::Key_F8 ), + win_key(DIK_F9, Qt::Key::Key_F9 ), + win_key(DIK_F10, Qt::Key::Key_F10 ), + win_key(DIK_F11, Qt::Key::Key_F11 ), + win_key(DIK_F12, Qt::Key::Key_F12 ), + win_key(DIK_LEFT, Qt::Key::Key_Left ), + win_key(DIK_RIGHT, Qt::Key::Key_Right ), + win_key(DIK_UP, Qt::Key::Key_Up ), + win_key(DIK_DOWN, Qt::Key::Key_Down ), + win_key(DIK_PRIOR, Qt::Key::Key_PageUp ), + win_key(DIK_NEXT, Qt::Key::Key_PageDown ), + win_key(DIK_HOME, Qt::Key::Key_Home ), + win_key(DIK_END, Qt::Key::Key_End ), + win_key(DIK_BACK, Qt::Key::Key_Backspace ), + win_key(DIK_COMMA, Qt::Key::Key_Comma ), + win_key(DIK_PERIOD, Qt::Key::Key_Period ), + win_key(DIK_LBRACKET, Qt::Key::Key_BracketLeft ), + win_key(DIK_RBRACKET, Qt::Key::Key_BracketRight ), + win_key(DIK_SEMICOLON, Qt::Key::Key_Semicolon ), + win_key(DIK_SLASH, Qt::Key::Key_Slash ), + win_key(DIK_BACKSLASH, Qt::Key::Key_Backslash ), + win_key(DIK_BACKSPACE, Qt::Key::Key_Backspace ), + win_key(DIK_APOSTROPHE, Qt::Key::Key_Apostrophe ), + win_key(DIK_GRAVE, Qt::Key::Key_QuoteLeft ), + win_key(DIK_MINUS, Qt::Key::Key_Minus ), + win_key(DIK_EQUALS, Qt::Key::Key_Equal ), + win_key(DIK_PERIOD, Qt::Key::Key_Period ), + win_key(DIK_F1, Qt::Key::Key_F1 ), + win_key(DIK_F2, Qt::Key::Key_F2 ), + win_key(DIK_F3, Qt::Key::Key_F3 ), + win_key(DIK_F4, Qt::Key::Key_F4 ), + win_key(DIK_F5, Qt::Key::Key_F5 ), + win_key(DIK_F6, Qt::Key::Key_F6 ), + win_key(DIK_F7, Qt::Key::Key_F7 ), + win_key(DIK_F8, Qt::Key::Key_F8 ), + win_key(DIK_F9, Qt::Key::Key_F9 ), + win_key(DIK_F10, Qt::Key::Key_F10 ), + win_key(DIK_F11, Qt::Key::Key_F11 ), + win_key(DIK_F12, Qt::Key::Key_F12 ), + win_key(DIK_0, Qt::Key::Key_0 ), + win_key(DIK_1, Qt::Key::Key_1 ), + win_key(DIK_2, Qt::Key::Key_2 ), + win_key(DIK_3, Qt::Key::Key_3 ), + win_key(DIK_4, Qt::Key::Key_4 ), + win_key(DIK_5, Qt::Key::Key_5 ), + win_key(DIK_6, Qt::Key::Key_6 ), + win_key(DIK_7, Qt::Key::Key_7 ), + win_key(DIK_8, Qt::Key::Key_8 ), + win_key(DIK_9, Qt::Key::Key_9 ), + win_key(DIK_A, Qt::Key::Key_A ), + win_key(DIK_B, Qt::Key::Key_B ), + win_key(DIK_C, Qt::Key::Key_C ), + win_key(DIK_D, Qt::Key::Key_D ), + win_key(DIK_E, Qt::Key::Key_E ), + win_key(DIK_F, Qt::Key::Key_F ), + win_key(DIK_G, Qt::Key::Key_G ), + win_key(DIK_H, Qt::Key::Key_H ), + win_key(DIK_I, Qt::Key::Key_I ), + win_key(DIK_J, Qt::Key::Key_J ), + win_key(DIK_K, Qt::Key::Key_K ), + win_key(DIK_L, Qt::Key::Key_L ), + win_key(DIK_M, Qt::Key::Key_M ), + win_key(DIK_N, Qt::Key::Key_N ), + win_key(DIK_O, Qt::Key::Key_O ), + win_key(DIK_P, Qt::Key::Key_P ), + win_key(DIK_Q, Qt::Key::Key_Q ), + win_key(DIK_R, Qt::Key::Key_R ), + win_key(DIK_S, Qt::Key::Key_S ), + win_key(DIK_T, Qt::Key::Key_T ), + win_key(DIK_U, Qt::Key::Key_U ), + win_key(DIK_V, Qt::Key::Key_V ), + win_key(DIK_W, Qt::Key::Key_W ), + win_key(DIK_X, Qt::Key::Key_X ), + win_key(DIK_Y, Qt::Key::Key_Y ), + win_key(DIK_Z, Qt::Key::Key_Z ), + win_key(DIK_RETURN, Qt::Key::Key_Return), + win_key(DIK_INSERT, Qt::Key::Key_Insert), + }); + +bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) +{ + auto qt = static_cast(qt_).toInt(); + auto our_mods = qt & Qt::KeyboardModifierMask; +#ifdef _WIN32 + const auto our_mods_ = our_mods; + our_mods |= Qt::ShiftModifier; + switch (qt & ~Qt::ShiftModifier) + { + case Qt::Key::Key_BraceLeft: qt = Qt::Key::Key_BracketLeft; break; + case Qt::Key::Key_BraceRight: qt = Qt::Key::Key_BracketRight; break; + case Qt::Key::Key_ParenLeft: qt = Qt::Key::Key_9; break; + case Qt::Key::Key_ParenRight: qt = Qt::Key::Key_0; break; + + case Qt::Key::Key_Exclam: qt = Qt::Key::Key_1; break; + case Qt::Key::Key_At: qt = Qt::Key::Key_2; break; + case Qt::Key::Key_NumberSign: qt = Qt::Key::Key_3; break; + case Qt::Key::Key_Dollar: qt = Qt::Key::Key_4; break; + case Qt::Key::Key_Percent: qt = Qt::Key::Key_5; break; + case Qt::Key::Key_AsciiCircum: qt = Qt::Key::Key_6; break; + case Qt::Key::Key_Ampersand: qt = Qt::Key::Key_7; break; + case Qt::Key::Key_Asterisk: qt = Qt::Key::Key_8; break; + + case Qt::Key::Key_Underscore: qt = Qt::Key::Key_Minus; break; + case Qt::Key::Key_Plus: qt = Qt::Key::Key_Equal; break; + + case Qt::Key::Key_Colon: qt = Qt::Key::Key_Semicolon; break; + case Qt::Key::Key_QuoteDbl: qt = Qt::Key::Key_Apostrophe; break; + case Qt::Key::Key_Less: qt = Qt::Key::Key_Comma; break; + case Qt::Key::Key_Question: qt = Qt::Key::Key_Slash; break; + case Qt::Key::Key_Bar: qt = Qt::Key::Key_Backslash; break; + default: our_mods = our_mods_; break; + } +#endif + + const auto key = qt & ~Qt::KeyboardModifierMask; + for (auto& wk : windows_key_sequences) + { + if (wk.qt == key) + { + dik = wk.win; + mods = static_cast(our_mods); + return true; + } + } + return false; +} + +#endif diff --git a/opentrack/win32-shortcuts.h b/opentrack/win32-shortcuts.h new file mode 100644 index 00000000..8167036d --- /dev/null +++ b/opentrack/win32-shortcuts.h @@ -0,0 +1,18 @@ +#pragma once + +#ifdef _WIN32 + +struct win_key; + +extern QList windows_key_mods; +extern QList windows_key_sequences; + +struct win_key +{ + win_key(int win, Qt::Key qt) : win(win), qt(qt) {} + int win; + Qt::Key qt; + static bool from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers &mods); +}; + +#endif -- cgit v1.2.3