From 510b6af720606cd0af58f826f41101aa5be3507f Mon Sep 17 00:00:00 2001 From: Arthur Tazhitdinov Date: Tue, 20 Jan 2026 19:45:49 +0500 Subject: [PATCH 1/4] feat: enable page turning on button press when long-press chapter skip is disabled --- src/activities/reader/EpubReaderActivity.cpp | 29 ++++++++++++++------ src/activities/reader/TxtReaderActivity.cpp | 29 ++++++++++++++------ src/activities/reader/XtcReaderActivity.cpp | 29 ++++++++++++++------ 3 files changed, 60 insertions(+), 27 deletions(-) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index d70a15c4..188624a2 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -161,14 +161,25 @@ void EpubReaderActivity::loop() { return; } - const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::PageBack) || - mappedInput.wasReleased(MappedInputManager::Button::Left); - const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || - mappedInput.wasReleased(MappedInputManager::Button::Right); + // When long-press chapter skip is disabled, turn pages on press instead of release. + const bool usePressForPageTurn = !SETTINGS.longPressChapterSkip; + const bool prevTriggered = usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool nextTriggered = + usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Right)); - if (!prevReleased && !nextReleased) { + if (!prevTriggered && !nextTriggered) { return; } @@ -186,7 +197,7 @@ void EpubReaderActivity::loop() { // We don't want to delete the section mid-render, so grab the semaphore xSemaphoreTake(renderingMutex, portMAX_DELAY); nextPageNumber = 0; - currentSpineIndex = nextReleased ? currentSpineIndex + 1 : currentSpineIndex - 1; + currentSpineIndex = nextTriggered ? currentSpineIndex + 1 : currentSpineIndex - 1; section.reset(); xSemaphoreGive(renderingMutex); updateRequired = true; @@ -199,7 +210,7 @@ void EpubReaderActivity::loop() { return; } - if (prevReleased) { + if (prevTriggered) { if (section->currentPage > 0) { section->currentPage--; } else { diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index db725320..ab86780e 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -107,21 +107,32 @@ void TxtReaderActivity::loop() { return; } - const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::PageBack) || - mappedInput.wasReleased(MappedInputManager::Button::Left); - const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || - mappedInput.wasReleased(MappedInputManager::Button::Right); + // When long-press chapter skip is disabled, turn pages on press instead of release. + const bool usePressForPageTurn = !SETTINGS.longPressChapterSkip; + const bool prevTriggered = usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool nextTriggered = + usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Right)); - if (!prevReleased && !nextReleased) { + if (!prevTriggered && !nextTriggered) { return; } - if (prevReleased && currentPage > 0) { + if (prevTriggered && currentPage > 0) { currentPage--; updateRequired = true; - } else if (nextReleased && currentPage < totalPages - 1) { + } else if (nextTriggered && currentPage < totalPages - 1) { currentPage++; updateRequired = true; } diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index a211e61c..9d5f7074 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -109,14 +109,25 @@ void XtcReaderActivity::loop() { return; } - const bool prevReleased = mappedInput.wasReleased(MappedInputManager::Button::PageBack) || - mappedInput.wasReleased(MappedInputManager::Button::Left); - const bool nextReleased = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || - mappedInput.wasReleased(MappedInputManager::Button::Right); + // When long-press chapter skip is disabled, turn pages on press instead of release. + const bool usePressForPageTurn = !SETTINGS.longPressChapterSkip; + const bool prevTriggered = usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool nextTriggered = + usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Right)); - if (!prevReleased && !nextReleased) { + if (!prevTriggered && !nextTriggered) { return; } @@ -130,14 +141,14 @@ void XtcReaderActivity::loop() { const bool skipPages = SETTINGS.longPressChapterSkip && mappedInput.getHeldTime() > skipPageMs; const int skipAmount = skipPages ? 10 : 1; - if (prevReleased) { + if (prevTriggered) { if (currentPage >= static_cast(skipAmount)) { currentPage -= skipAmount; } else { currentPage = 0; } updateRequired = true; - } else if (nextReleased) { + } else if (nextTriggered) { currentPage += skipAmount; if (currentPage >= xtc->getPageCount()) { currentPage = xtc->getPageCount(); // Allow showing "End of book" From 5ffb1bede95c3cbfbfb8ef47049781d73a0f2e7f Mon Sep 17 00:00:00 2001 From: Arthur Tazhitdinov Date: Tue, 20 Jan 2026 19:49:39 +0500 Subject: [PATCH 2/4] clang format fix --- src/activities/reader/EpubReaderActivity.cpp | 28 +++++++++----------- src/activities/reader/TxtReaderActivity.cpp | 28 +++++++++----------- src/activities/reader/XtcReaderActivity.cpp | 28 +++++++++----------- 3 files changed, 39 insertions(+), 45 deletions(-) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 188624a2..2e3de439 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -163,21 +163,19 @@ void EpubReaderActivity::loop() { // When long-press chapter skip is disabled, turn pages on press instead of release. const bool usePressForPageTurn = !SETTINGS.longPressChapterSkip; - const bool prevTriggered = usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || - mappedInput.wasPressed(MappedInputManager::Button::Left)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || - mappedInput.wasReleased(MappedInputManager::Button::Left)); - const bool nextTriggered = - usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasPressed(MappedInputManager::Button::Power)) || - mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || - mappedInput.wasReleased(MappedInputManager::Button::Right)); + const bool prevTriggered = usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool nextTriggered = usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Right)); if (!prevTriggered && !nextTriggered) { return; diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index ab86780e..008052fb 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -109,21 +109,19 @@ void TxtReaderActivity::loop() { // When long-press chapter skip is disabled, turn pages on press instead of release. const bool usePressForPageTurn = !SETTINGS.longPressChapterSkip; - const bool prevTriggered = usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || - mappedInput.wasPressed(MappedInputManager::Button::Left)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || - mappedInput.wasReleased(MappedInputManager::Button::Left)); - const bool nextTriggered = - usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasPressed(MappedInputManager::Button::Power)) || - mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || - mappedInput.wasReleased(MappedInputManager::Button::Right)); + const bool prevTriggered = usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool nextTriggered = usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Right)); if (!prevTriggered && !nextTriggered) { return; diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index 9d5f7074..b345740d 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -111,21 +111,19 @@ void XtcReaderActivity::loop() { // When long-press chapter skip is disabled, turn pages on press instead of release. const bool usePressForPageTurn = !SETTINGS.longPressChapterSkip; - const bool prevTriggered = usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || - mappedInput.wasPressed(MappedInputManager::Button::Left)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || - mappedInput.wasReleased(MappedInputManager::Button::Left)); - const bool nextTriggered = - usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasPressed(MappedInputManager::Button::Power)) || - mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || - mappedInput.wasReleased(MappedInputManager::Button::Right)); + const bool prevTriggered = usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || + mappedInput.wasPressed(MappedInputManager::Button::Left)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || + mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool nextTriggered = usePressForPageTurn + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasPressed(MappedInputManager::Button::Right)) + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || + (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Right)); if (!prevTriggered && !nextTriggered) { return; From 0952152879378b844d40d4bb191172e64392d5bb Mon Sep 17 00:00:00 2001 From: Arthur Tazhitdinov Date: Sun, 25 Jan 2026 23:27:55 +0500 Subject: [PATCH 3/4] fix: update page turn logic to use power button release instead of press --- src/activities/reader/EpubReaderActivity.cpp | 2 +- src/activities/reader/TxtReaderActivity.cpp | 2 +- src/activities/reader/XtcReaderActivity.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 7e9ef62c..a39a77d9 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -172,7 +172,7 @@ void EpubReaderActivity::loop() { const bool nextTriggered = usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Power)) || mappedInput.wasPressed(MappedInputManager::Button::Right)) : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 008052fb..37868dcf 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -116,7 +116,7 @@ void TxtReaderActivity::loop() { const bool nextTriggered = usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Power)) || mappedInput.wasPressed(MappedInputManager::Button::Right)) : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index 4b828b0a..ae3eb1bb 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -120,7 +120,7 @@ void XtcReaderActivity::loop() { const bool nextTriggered = usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasPressed(MappedInputManager::Button::Power)) || + mappedInput.wasReleased(MappedInputManager::Button::Power)) || mappedInput.wasPressed(MappedInputManager::Button::Right)) : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && From f5db832853ab39d97eb91f5003fa3db138ec2805 Mon Sep 17 00:00:00 2001 From: Arthur Tazhitdinov Date: Mon, 26 Jan 2026 12:54:59 +0500 Subject: [PATCH 4/4] refactor MappedInputManager --- src/MappedInputManager.cpp | 103 +++++++++---------- src/MappedInputManager.h | 3 +- src/activities/reader/EpubReaderActivity.cpp | 10 +- src/activities/reader/TxtReaderActivity.cpp | 10 +- src/activities/reader/XtcReaderActivity.cpp | 10 +- 5 files changed, 61 insertions(+), 75 deletions(-) diff --git a/src/MappedInputManager.cpp b/src/MappedInputManager.cpp index 1b038446..7539e85d 100644 --- a/src/MappedInputManager.cpp +++ b/src/MappedInputManager.cpp @@ -2,81 +2,72 @@ #include "CrossPointSettings.h" -decltype(InputManager::BTN_BACK) MappedInputManager::mapButton(const Button button) const { +namespace { +using ButtonIndex = uint8_t; + +struct FrontLayoutMap { + ButtonIndex back; + ButtonIndex confirm; + ButtonIndex left; + ButtonIndex right; +}; + +struct SideLayoutMap { + ButtonIndex pageBack; + ButtonIndex pageForward; +}; + +// Order matches CrossPointSettings::FRONT_BUTTON_LAYOUT. +constexpr FrontLayoutMap kFrontLayouts[] = { + {InputManager::BTN_BACK, InputManager::BTN_CONFIRM, InputManager::BTN_LEFT, InputManager::BTN_RIGHT}, + {InputManager::BTN_LEFT, InputManager::BTN_RIGHT, InputManager::BTN_BACK, InputManager::BTN_CONFIRM}, + {InputManager::BTN_CONFIRM, InputManager::BTN_LEFT, InputManager::BTN_BACK, InputManager::BTN_RIGHT}, +}; + +// Order matches CrossPointSettings::SIDE_BUTTON_LAYOUT. +constexpr SideLayoutMap kSideLayouts[] = { + {InputManager::BTN_UP, InputManager::BTN_DOWN}, + {InputManager::BTN_DOWN, InputManager::BTN_UP}, +}; +} // namespace + +bool MappedInputManager::mapButton(const Button button, bool (InputManager::*fn)(uint8_t) const) const { const auto frontLayout = static_cast(SETTINGS.frontButtonLayout); const auto sideLayout = static_cast(SETTINGS.sideButtonLayout); + const auto& front = kFrontLayouts[frontLayout]; + const auto& side = kSideLayouts[sideLayout]; switch (button) { case Button::Back: - switch (frontLayout) { - case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: - return InputManager::BTN_LEFT; - case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: - return InputManager::BTN_CONFIRM; - case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: - default: - return InputManager::BTN_BACK; - } + return (inputManager.*fn)(front.back); case Button::Confirm: - switch (frontLayout) { - case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: - return InputManager::BTN_RIGHT; - case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: - return InputManager::BTN_LEFT; - case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: - default: - return InputManager::BTN_CONFIRM; - } + return (inputManager.*fn)(front.confirm); case Button::Left: - switch (frontLayout) { - case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: - case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: - return InputManager::BTN_BACK; - case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: - default: - return InputManager::BTN_LEFT; - } + return (inputManager.*fn)(front.left); case Button::Right: - switch (frontLayout) { - case CrossPointSettings::LEFT_RIGHT_BACK_CONFIRM: - return InputManager::BTN_CONFIRM; - case CrossPointSettings::BACK_CONFIRM_LEFT_RIGHT: - case CrossPointSettings::LEFT_BACK_CONFIRM_RIGHT: - default: - return InputManager::BTN_RIGHT; - } + return (inputManager.*fn)(front.right); case Button::Up: - return InputManager::BTN_UP; + return (inputManager.*fn)(InputManager::BTN_UP); case Button::Down: - return InputManager::BTN_DOWN; + return (inputManager.*fn)(InputManager::BTN_DOWN); case Button::Power: - return InputManager::BTN_POWER; + return (inputManager.*fn)(InputManager::BTN_POWER); case Button::PageBack: - switch (sideLayout) { - case CrossPointSettings::NEXT_PREV: - return InputManager::BTN_DOWN; - case CrossPointSettings::PREV_NEXT: - default: - return InputManager::BTN_UP; - } + return (inputManager.*fn)(side.pageBack); case Button::PageForward: - switch (sideLayout) { - case CrossPointSettings::NEXT_PREV: - return InputManager::BTN_UP; - case CrossPointSettings::PREV_NEXT: - default: - return InputManager::BTN_DOWN; - } + return (inputManager.*fn)(side.pageForward); } - return InputManager::BTN_BACK; + return false; } -bool MappedInputManager::wasPressed(const Button button) const { return inputManager.wasPressed(mapButton(button)); } +bool MappedInputManager::wasPressed(const Button button) const { return mapButton(button, &InputManager::wasPressed); } -bool MappedInputManager::wasReleased(const Button button) const { return inputManager.wasReleased(mapButton(button)); } +bool MappedInputManager::wasReleased(const Button button) const { + return mapButton(button, &InputManager::wasReleased); +} -bool MappedInputManager::isPressed(const Button button) const { return inputManager.isPressed(mapButton(button)); } +bool MappedInputManager::isPressed(const Button button) const { return mapButton(button, &InputManager::isPressed); } bool MappedInputManager::wasAnyPressed() const { return inputManager.wasAnyPressed(); } diff --git a/src/MappedInputManager.h b/src/MappedInputManager.h index 62065fe9..bee7cd4b 100644 --- a/src/MappedInputManager.h +++ b/src/MappedInputManager.h @@ -25,5 +25,6 @@ class MappedInputManager { private: InputManager& inputManager; - decltype(InputManager::BTN_BACK) mapButton(Button button) const; + + bool mapButton(Button button, bool (InputManager::*fn)(uint8_t) const) const; }; diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index a39a77d9..427f9ac4 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -169,14 +169,12 @@ void EpubReaderActivity::loop() { mappedInput.wasPressed(MappedInputManager::Button::Left)) : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool powerPageTurn = SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power); const bool nextTriggered = usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || powerPageTurn || mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || powerPageTurn || mappedInput.wasReleased(MappedInputManager::Button::Right)); if (!prevTriggered && !nextTriggered) { diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 37868dcf..7c318de3 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -113,14 +113,12 @@ void TxtReaderActivity::loop() { mappedInput.wasPressed(MappedInputManager::Button::Left)) : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool powerPageTurn = SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power); const bool nextTriggered = usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || powerPageTurn || mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || powerPageTurn || mappedInput.wasReleased(MappedInputManager::Button::Right)); if (!prevTriggered && !nextTriggered) { diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index ae3eb1bb..9761e27d 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -117,14 +117,12 @@ void XtcReaderActivity::loop() { mappedInput.wasPressed(MappedInputManager::Button::Left)) : (mappedInput.wasReleased(MappedInputManager::Button::PageBack) || mappedInput.wasReleased(MappedInputManager::Button::Left)); + const bool powerPageTurn = SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && + mappedInput.wasReleased(MappedInputManager::Button::Power); const bool nextTriggered = usePressForPageTurn - ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || + ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || powerPageTurn || mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power)) || + : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || powerPageTurn || mappedInput.wasReleased(MappedInputManager::Button::Right)); if (!prevTriggered && !nextTriggered) {