From d03a47ed50108d8f7bb16a0e5764c0a0be9c8ff2 Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Thu, 22 Jan 2026 00:29:15 +0100 Subject: [PATCH] feat: add "Back, Confirm, Right, Left" front button layout This can feel more natural when using the Landscape CCW orientation. Also add "fall through" markers for GCC's -Wimplicit-fallthrough and to improve readability. Discussion: #449 --- src/CrossPointSettings.h | 7 ++++++- src/MappedInputManager.cpp | 16 ++++++++++++++++ src/activities/settings/SettingsActivity.cpp | 5 +++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 8ce32a2c..2c33beb3 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -32,7 +32,12 @@ class CrossPointSettings { // Front button layout options // Default: Back, Confirm, Left, Right // Swapped: Left, Right, Back, Confirm - enum FRONT_BUTTON_LAYOUT { BACK_CONFIRM_LEFT_RIGHT = 0, LEFT_RIGHT_BACK_CONFIRM = 1, LEFT_BACK_CONFIRM_RIGHT = 2 }; + enum FRONT_BUTTON_LAYOUT { + BACK_CONFIRM_LEFT_RIGHT = 0, + LEFT_RIGHT_BACK_CONFIRM = 1, + LEFT_BACK_CONFIRM_RIGHT = 2, + BACK_CONFIRM_RIGHT_LEFT = 3 + }; // Side button layout options // Default: Previous, Next diff --git a/src/MappedInputManager.cpp b/src/MappedInputManager.cpp index 1b038446..994dda5f 100644 --- a/src/MappedInputManager.cpp +++ b/src/MappedInputManager.cpp @@ -14,6 +14,9 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: return InputManager::BTN_CONFIRM; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + /* fall through */ + case CrossPointSettings::BACK_CONFIRM_RIGHT_LEFT: + /* fall through */ default: return InputManager::BTN_BACK; } @@ -24,15 +27,22 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: return InputManager::BTN_LEFT; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + /* fall through */ + case CrossPointSettings::BACK_CONFIRM_RIGHT_LEFT: + /* fall through */ default: return InputManager::BTN_CONFIRM; } case Button::Left: switch (frontLayout) { case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: + /* fall through */ case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: return InputManager::BTN_BACK; + case CrossPointSettings::BACK_CONFIRM_RIGHT_LEFT: + return InputManager::BTN_RIGHT; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + /* fall through */ default: return InputManager::BTN_LEFT; } @@ -40,8 +50,12 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt switch (frontLayout) { case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: return InputManager::BTN_CONFIRM; + case CrossPointSettings::BACK_CONFIRM_RIGHT_LEFT: + return InputManager::BTN_LEFT; case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: + /* fall through */ case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: + /* fall through */ default: return InputManager::BTN_RIGHT; } @@ -56,6 +70,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt case CrossPointSettings::NEXT_PREV: return InputManager::BTN_DOWN; case CrossPointSettings::PREV_NEXT: + /* fall through */ default: return InputManager::BTN_UP; } @@ -64,6 +79,7 @@ decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button butt case CrossPointSettings::NEXT_PREV: return InputManager::BTN_UP; case CrossPointSettings::PREV_NEXT: + /* fall through */ default: return InputManager::BTN_DOWN; } diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 943fdb4c..45b7a12d 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -37,8 +37,9 @@ const SettingInfo readerSettings[readerSettingsCount] = { constexpr int controlsSettingsCount = 4; const SettingInfo controlsSettings[controlsSettingsCount] = { - SettingInfo::Enum("Front Button Layout", &CrossPointSettings::frontButtonLayout, - {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}), + SettingInfo::Enum( + "Front Button Layout", &CrossPointSettings::frontButtonLayout, + {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght", "Bck, Cnfrm, Rght, Lft"}), SettingInfo::Enum("Side Button Layout (reader)", &CrossPointSettings::sideButtonLayout, {"Prev, Next", "Next, Prev"}), SettingInfo::Toggle("Long-press Chapter Skip", &CrossPointSettings::longPressChapterSkip),