From 16fd0bbba159a1ea4778c918a77f6107fca3443e Mon Sep 17 00:00:00 2001 From: jpirnay Date: Tue, 7 Apr 2026 22:10:17 +0200 Subject: [PATCH] Refresh screen on reader exit to heal ghosting --- src/activities/reader/EpubReaderActivity.cpp | 2 ++ src/activities/reader/ReaderUtils.h | 6 ++++++ src/activities/reader/TxtReaderActivity.cpp | 2 ++ src/activities/reader/XtcReaderActivity.cpp | 2 ++ 4 files changed, 12 insertions(+) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 833600d1..5f59fb32 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -185,6 +185,7 @@ void EpubReaderActivity::loop() { // Long press BACK (1s+) goes to home screen if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= ReaderUtils::GO_HOME_MS) { + ReaderUtils::enforceExitFullRefresh(renderer); onGoHome(); return; } @@ -196,6 +197,7 @@ void EpubReaderActivity::loop() { restoreSavedPosition(); return; } + ReaderUtils::enforceExitFullRefresh(renderer); finish(); return; } diff --git a/src/activities/reader/ReaderUtils.h b/src/activities/reader/ReaderUtils.h index 8694be08..aa55bf7e 100644 --- a/src/activities/reader/ReaderUtils.h +++ b/src/activities/reader/ReaderUtils.h @@ -59,6 +59,12 @@ inline void displayWithRefreshCycle(const GfxRenderer& renderer, int& pagesUntil } } +inline void enforceExitFullRefresh(const GfxRenderer& renderer) { + // Reader exits can leave visible ghosting when the next screen is rendered with a fast LUT. + // Force one full waveform pass before leaving the reader stack. + renderer.displayBuffer(HalDisplay::FULL_REFRESH); +} + // Grayscale anti-aliasing pass. Renders content twice (LSB + MSB) to build // the grayscale buffer. Only the content callback is re-rendered — status bars // and other overlays should be drawn before calling this. diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 261dfb2c..a62576ce 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -119,6 +119,7 @@ void TxtReaderActivity::onExit() { void TxtReaderActivity::loop() { // Long press BACK (1s+) goes to home screen if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= ReaderUtils::GO_HOME_MS) { + ReaderUtils::enforceExitFullRefresh(renderer); onGoHome(); return; } @@ -126,6 +127,7 @@ void TxtReaderActivity::loop() { // Short press BACK returns to the calling activity if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < ReaderUtils::GO_HOME_MS) { + ReaderUtils::enforceExitFullRefresh(renderer); finish(); return; } diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index e443f12f..8c01ecae 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -73,12 +73,14 @@ void XtcReaderActivity::loop() { // Long press BACK (1s+) goes to home screen if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= goHomeMs) { + ReaderUtils::enforceExitFullRefresh(renderer); onGoHome(); return; } // Short press BACK returns to the calling activity if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < goHomeMs) { + ReaderUtils::enforceExitFullRefresh(renderer); finish(); return; }