From 32617ae17ccbd8dfe57eb534b640c5ef4634de0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20H=C3=B6glund?= Date: Fri, 28 Aug 2015 17:05:11 +0200 Subject: [PATCH] Use KeyDef for Confirm/Cancel/TabLeft/TabRight keys --- input/input_state.cpp | 12 ++++++------ input/input_state.h | 12 ++++++------ ui/ui_screen.cpp | 2 +- ui/view.cpp | 40 ++++++++++++++++++++++++---------------- ui/view.h | 8 ++++---- ui/viewgroup.cpp | 4 ++-- 6 files changed, 43 insertions(+), 35 deletions(-) diff --git a/input/input_state.cpp b/input/input_state.cpp index 2761c6564d..0a81a3d8d3 100644 --- a/input/input_state.cpp +++ b/input/input_state.cpp @@ -51,17 +51,17 @@ int MapPadButtonFixed(int keycode) { } } -std::vector confirmKeys; -std::vector cancelKeys; -std::vector tabLeftKeys; -std::vector tabRightKeys; +std::vector confirmKeys; +std::vector cancelKeys; +std::vector tabLeftKeys; +std::vector tabRightKeys; -void SetConfirmCancelKeys(const std::vector &confirm, const std::vector &cancel) { +void SetConfirmCancelKeys(const std::vector &confirm, const std::vector &cancel) { confirmKeys = confirm; cancelKeys = cancel; } -void SetTabLeftRightKeys(const std::vector &tabLeft, const std::vector &tabRight) { +void SetTabLeftRightKeys(const std::vector &tabLeft, const std::vector &tabRight) { tabLeftKeys = tabLeft; tabRightKeys = tabRight; } diff --git a/input/input_state.h b/input/input_state.h index 3f68a4d289..2e92c6601a 100644 --- a/input/input_state.h +++ b/input/input_state.h @@ -240,9 +240,9 @@ private: extern ButtonTracker g_buttonTracker; // Is there a nicer place for this stuff? It's here to avoid dozens of linking errors in UnitTest.. -extern std::vector confirmKeys; -extern std::vector cancelKeys; -extern std::vector tabLeftKeys; -extern std::vector tabRightKeys; -void SetConfirmCancelKeys(const std::vector &confirm, const std::vector &cancel); -void SetTabLeftRightKeys(const std::vector &tabLeft, const std::vector &tabRight); +extern std::vector confirmKeys; +extern std::vector cancelKeys; +extern std::vector tabLeftKeys; +extern std::vector tabRightKeys; +void SetConfirmCancelKeys(const std::vector &confirm, const std::vector &cancel); +void SetTabLeftRightKeys(const std::vector &tabLeft, const std::vector &tabRight); diff --git a/ui/ui_screen.cpp b/ui/ui_screen.cpp index 3fef16172e..0a85893905 100644 --- a/ui/ui_screen.cpp +++ b/ui/ui_screen.cpp @@ -65,7 +65,7 @@ bool UIScreen::key(const KeyInput &key) { bool UIDialogScreen::key(const KeyInput &key) { bool retval = UIScreen::key(key); - if (!retval && (key.flags & KEY_DOWN) && UI::IsEscapeKeyCode(key.keyCode)) { + if (!retval && (key.flags & KEY_DOWN) && UI::IsEscapeKey(key)) { if (finished_) { ELOG("Screen already finished"); } else { diff --git a/ui/view.cpp b/ui/view.cpp index 7a38d9acf1..4cf70c2521 100644 --- a/ui/view.cpp +++ b/ui/view.cpp @@ -222,35 +222,43 @@ void Clickable::Touch(const TouchInput &input) { // TODO: O/X confirm preference for xperia play? -bool IsAcceptKeyCode(int keyCode) { +bool IsAcceptKey(const KeyInput &key) { if (confirmKeys.empty()) { - return keyCode == NKCODE_SPACE || keyCode == NKCODE_ENTER || keyCode == NKCODE_Z || keyCode == NKCODE_BUTTON_A || keyCode == NKCODE_BUTTON_CROSS || keyCode == NKCODE_BUTTON_1; + if (key.deviceId == DEVICE_ID_KEYBOARD) { + return key.keyCode == NKCODE_SPACE || key.keyCode == NKCODE_ENTER || key.keyCode == NKCODE_Z; + } else { + return key.keyCode == NKCODE_BUTTON_A || key.keyCode == NKCODE_BUTTON_CROSS || key.keyCode == NKCODE_BUTTON_1; + } } else { - return std::find(confirmKeys.begin(), confirmKeys.end(), (keycode_t)keyCode) != confirmKeys.end(); + return std::find(confirmKeys.begin(), confirmKeys.end(), KeyDef(key.deviceId, key.keyCode)) != confirmKeys.end(); } } -bool IsEscapeKeyCode(int keyCode) { +bool IsEscapeKey(const KeyInput &key) { if (cancelKeys.empty()) { - return keyCode == NKCODE_ESCAPE || keyCode == NKCODE_BACK || keyCode == NKCODE_BUTTON_CIRCLE || keyCode == NKCODE_BUTTON_B || keyCode == NKCODE_BUTTON_2; + if (key.deviceId == DEVICE_ID_KEYBOARD) { + return key.keyCode == NKCODE_ESCAPE || key.keyCode == NKCODE_BACK; + } else { + return key.keyCode == NKCODE_BUTTON_CIRCLE || key.keyCode == NKCODE_BUTTON_B || key.keyCode == NKCODE_BUTTON_2; + } } else { - return std::find(cancelKeys.begin(), cancelKeys.end(), (keycode_t)keyCode) != cancelKeys.end(); + return std::find(cancelKeys.begin(), cancelKeys.end(), KeyDef(key.deviceId, key.keyCode)) != cancelKeys.end(); } } -bool IsTabLeftKeyCode(int keyCode) { +bool IsTabLeftKey(const KeyInput &key) { if (tabLeftKeys.empty()) { - return keyCode == NKCODE_BUTTON_L1; + return key.keyCode == NKCODE_BUTTON_L1; } else { - return std::find(tabLeftKeys.begin(), tabLeftKeys.end(), (keycode_t)keyCode) != tabLeftKeys.end(); + return std::find(tabLeftKeys.begin(), tabLeftKeys.end(), KeyDef(key.deviceId, key.keyCode)) != tabLeftKeys.end(); } } -bool IsTabRightKeyCode(int keyCode) { +bool IsTabRightKey(const KeyInput &key) { if (tabRightKeys.empty()) { - return keyCode == NKCODE_BUTTON_R1; + return key.keyCode == NKCODE_BUTTON_R1; } else { - return std::find(tabRightKeys.begin(), tabRightKeys.end(), (keycode_t)keyCode) != tabRightKeys.end(); + return std::find(tabRightKeys.begin(), tabRightKeys.end(), KeyDef(key.deviceId, key.keyCode)) != tabRightKeys.end(); } } @@ -262,19 +270,19 @@ bool Clickable::Key(const KeyInput &key) { // TODO: Replace most of Update with this. bool ret = false; if (key.flags & KEY_DOWN) { - if (IsAcceptKeyCode(key.keyCode)) { + if (IsAcceptKey(key)) { down_ = true; ret = true; } } if (key.flags & KEY_UP) { - if (IsAcceptKeyCode(key.keyCode)) { + if (IsAcceptKey(key)) { if (down_) { Click(); down_ = false; ret = true; } - } else if (IsEscapeKeyCode(key.keyCode)) { + } else if (IsEscapeKey(key)) { down_ = false; } } @@ -305,7 +313,7 @@ bool StickyChoice::Key(const KeyInput &key) { // TODO: Replace most of Update with this. if (key.flags & KEY_DOWN) { - if (IsAcceptKeyCode(key.keyCode)) { + if (IsAcceptKey(key)) { down_ = true; Click(); return true; diff --git a/ui/view.h b/ui/view.h index a4832bb66b..b031b39bb3 100644 --- a/ui/view.h +++ b/ui/view.h @@ -801,9 +801,9 @@ void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measure void EventTriggered(Event *e, EventParams params); void DispatchEvents(); -bool IsAcceptKeyCode(int keyCode); -bool IsEscapeKeyCode(int keyCode); -bool IsTabLeftKeyCode(int keyCode); -bool IsTabRightKeyCode(int keyCode); +bool IsAcceptKey(const KeyInput &key); +bool IsEscapeKey(const KeyInput &key); +bool IsTabLeftKey(const KeyInput &key); +bool IsTabRightKey(const KeyInput &key); } // namespace diff --git a/ui/viewgroup.cpp b/ui/viewgroup.cpp index 8168384692..6f080a2c97 100644 --- a/ui/viewgroup.cpp +++ b/ui/viewgroup.cpp @@ -1064,10 +1064,10 @@ void ChoiceStrip::HighlightChoice(unsigned int choice){ bool ChoiceStrip::Key(const KeyInput &input) { bool ret = false; if (input.flags & KEY_DOWN) { - if (IsTabLeftKeyCode(input.keyCode) && selected_ > 0) { + if (IsTabLeftKey(input) && selected_ > 0) { SetSelection(selected_ - 1); ret = true; - } else if (IsTabRightKeyCode(input.keyCode) && selected_ < (int)views_.size() - 1) { + } else if (IsTabRightKey(input) && selected_ < (int)views_.size() - 1) { SetSelection(selected_ + 1); ret = true; }