diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index ea6ad2cc..1426544b 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -30,7 +30,6 @@ namespace { // pagesPerRefresh now comes from SETTINGS.getRefreshFrequency() -constexpr unsigned long skipChapterMs = 700; // pages per minute, first item is 1 to prevent division by zero if accessed constexpr int PAGE_TURN_RATES[] = {1, 1, 3, 6, 12}; @@ -185,7 +184,7 @@ void EpubReaderActivity::loop() { return; } - auto [prevTriggered, nextTriggered, fromTilt] = ReaderUtils::detectPageTurn(mappedInput); + const auto [prevTriggered, nextTriggered, fromTilt] = ReaderUtils::detectPageTurn(mappedInput); if (!prevTriggered && !nextTriggered) { return; } @@ -203,7 +202,7 @@ void EpubReaderActivity::loop() { return; } - const bool longPress = !fromTilt && mappedInput.getHeldTime() > skipChapterMs; + const bool longPress = !fromTilt && mappedInput.getHeldTime() > ReaderUtils::SKIP_HOLD_MS; // Don't skip chapter after screenshot if (gpio.wasReleased(HalGPIO::BTN_POWER) && gpio.wasReleased(HalGPIO::BTN_DOWN)) { diff --git a/src/activities/reader/ReaderUtils.h b/src/activities/reader/ReaderUtils.h index 13480696..1de6174b 100644 --- a/src/activities/reader/ReaderUtils.h +++ b/src/activities/reader/ReaderUtils.h @@ -10,6 +10,7 @@ namespace ReaderUtils { constexpr unsigned long GO_HOME_MS = 1000; +constexpr unsigned long SKIP_HOLD_MS = 700; inline void applyOrientation(GfxRenderer& renderer, const uint8_t orientation) { switch (orientation) { diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 30886e83..b00665e7 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -71,7 +71,7 @@ void TxtReaderActivity::loop() { return; } - auto [prevTriggered, nextTriggered, fromTilt] = ReaderUtils::detectPageTurn(mappedInput); + const auto [prevTriggered, nextTriggered, fromTilt] = ReaderUtils::detectPageTurn(mappedInput); if (!prevTriggered && !nextTriggered) { return; } diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index 02043265..8e904fb3 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -10,22 +10,17 @@ #include #include #include -#include #include #include "CrossPointSettings.h" #include "CrossPointState.h" #include "MappedInputManager.h" +#include "ReaderUtils.h" #include "RecentBooksStore.h" #include "XtcReaderChapterSelectionActivity.h" #include "components/UITheme.h" #include "fontIds.h" -namespace { -constexpr unsigned long skipPageMs = 700; -constexpr unsigned long goHomeMs = 1000; -} // namespace - void XtcReaderActivity::onEnter() { Activity::onEnter(); @@ -70,34 +65,19 @@ void XtcReaderActivity::loop() { } // Long press BACK (1s+) goes to file selection - if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= goHomeMs) { + if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= ReaderUtils::GO_HOME_MS) { activityManager.goToFileBrowser(xtc ? xtc->getPath() : ""); return; } // Short press BACK goes directly to home - if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < goHomeMs) { + if (mappedInput.wasReleased(MappedInputManager::Button::Back) && + mappedInput.getHeldTime() < ReaderUtils::GO_HOME_MS) { onGoHome(); return; } - // When long-press chapter skip is disabled, turn pages on press instead of release. - const bool usePressForPageTurn = SETTINGS.longPressButtonBehavior == SETTINGS.OFF; - const bool tiltNext = SETTINGS.tiltPageTurn && halTiltSensor.wasTiltedForward(); - const bool tiltPrev = SETTINGS.tiltPageTurn && halTiltSensor.wasTiltedBack(); - const bool prevTriggered = - tiltPrev || (usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageBack) || - 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 = - tiltNext || (usePressForPageTurn ? (mappedInput.wasPressed(MappedInputManager::Button::PageForward) || - powerPageTurn || mappedInput.wasPressed(MappedInputManager::Button::Right)) - : (mappedInput.wasReleased(MappedInputManager::Button::PageForward) || - powerPageTurn || mappedInput.wasReleased(MappedInputManager::Button::Right))); - + const auto [prevTriggered, nextTriggered, fromTilt] = ReaderUtils::detectPageTurn(mappedInput); if (!prevTriggered && !nextTriggered) { return; } @@ -113,9 +93,8 @@ void XtcReaderActivity::loop() { return; } - const bool fromTilt = tiltPrev || tiltNext; - const bool skipPages = - !fromTilt && SETTINGS.longPressButtonBehavior == SETTINGS.CHAPTER_SKIP && mappedInput.getHeldTime() > skipPageMs; + const bool skipPages = !fromTilt && SETTINGS.longPressButtonBehavior == SETTINGS.CHAPTER_SKIP && + mappedInput.getHeldTime() > ReaderUtils::SKIP_HOLD_MS; const int skipAmount = skipPages ? 10 : 1; if (prevTriggered) { @@ -242,14 +221,7 @@ void XtcReaderActivity::renderPage() { } } - // Display BW with conditional refresh based on pagesUntilFullRefresh - if (pagesUntilFullRefresh <= 1) { - renderer.displayBuffer(HalDisplay::HALF_REFRESH); - pagesUntilFullRefresh = SETTINGS.getRefreshFrequency(); - } else { - renderer.displayBuffer(); - pagesUntilFullRefresh--; - } + ReaderUtils::displayWithRefreshCycle(renderer, pagesUntilFullRefresh); // Pass 2: LSB buffer - mark DARK gray only (XTH value 1) // In LUT: 0 bit = apply gray effect, 1 bit = untouched @@ -321,14 +293,7 @@ void XtcReaderActivity::renderPage() { // XTC pages already have status bar pre-rendered, no need to add our own - // Display with appropriate refresh - if (pagesUntilFullRefresh <= 1) { - renderer.displayBuffer(HalDisplay::HALF_REFRESH); - pagesUntilFullRefresh = SETTINGS.getRefreshFrequency(); - } else { - renderer.displayBuffer(); - pagesUntilFullRefresh--; - } + ReaderUtils::displayWithRefreshCycle(renderer, pagesUntilFullRefresh); LOG_DBG("XTR", "Rendered page %lu/%lu (%u-bit)", currentPage + 1, xtc->getPageCount(), bitDepth); } diff --git a/src/components/UITheme.cpp b/src/components/UITheme.cpp index 7e3a5875..012ad26b 100644 --- a/src/components/UITheme.cpp +++ b/src/components/UITheme.cpp @@ -13,10 +13,6 @@ #include "components/themes/lyra/LyraTheme.h" #include "components/themes/roundedraff/RoundedRaffTheme.h" -namespace { -constexpr int SKIP_PAGE_MS = 700; -} // namespace - UITheme UITheme::instance; UITheme::UITheme() {