From 510b6af720606cd0af58f826f41101aa5be3507f Mon Sep 17 00:00:00 2001 From: Arthur Tazhitdinov Date: Tue, 20 Jan 2026 19:45:49 +0500 Subject: [PATCH 1/2] 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 d70a15c..188624a 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 db72532..ab86780 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 a211e61..9d5f707 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/2] 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 188624a..2e3de43 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 ab86780..008052f 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 9d5f707..b345740 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;