Full screen refresh of EpubReaderScreen every 10 renders

This is done in an effort to minimise ghosting
This commit is contained in:
Dave Allie 2025-12-05 22:19:44 +11:00
parent 2631613b8d
commit fa0f27df6a
No known key found for this signature in database
GPG Key ID: F2FDDB3AD8D0276F
2 changed files with 13 additions and 5 deletions

View File

@ -5,6 +5,7 @@
#include "Battery.h" #include "Battery.h"
constexpr int PAGES_PER_REFRESH = 10;
constexpr unsigned long SKIP_CHAPTER_MS = 700; constexpr unsigned long SKIP_CHAPTER_MS = 700;
void EpubReaderScreen::taskTrampoline(void* param) { void EpubReaderScreen::taskTrampoline(void* param) {
@ -159,7 +160,13 @@ void EpubReaderScreen::renderPage() {
renderer->clearScreen(); renderer->clearScreen();
section->renderPage(); section->renderPage();
renderStatusBar(); renderStatusBar();
renderer->flushDisplay(); if (pagesUntilFullRefresh <= 1) {
renderer->flushDisplay(false);
pagesUntilFullRefresh = PAGES_PER_REFRESH;
} else {
renderer->flushDisplay();
pagesUntilFullRefresh--;
}
File f = SD.open((epub->getCachePath() + "/progress.bin").c_str(), FILE_WRITE); File f = SD.open((epub->getCachePath() + "/progress.bin").c_str(), FILE_WRITE);
uint8_t data[4]; uint8_t data[4];
@ -176,20 +183,20 @@ void EpubReaderScreen::renderPage() {
void EpubReaderScreen::renderStatusBar() const { void EpubReaderScreen::renderStatusBar() const {
const auto pageWidth = renderer->getPageWidth(); const auto pageWidth = renderer->getPageWidth();
std::string progress = std::to_string(section->currentPage + 1) + " / " + std::to_string(section->pageCount); const std::string progress = std::to_string(section->currentPage + 1) + " / " + std::to_string(section->pageCount);
const auto progressTextWidth = renderer->getSmallTextWidth(progress.c_str()); const auto progressTextWidth = renderer->getSmallTextWidth(progress.c_str());
renderer->drawSmallText(pageWidth - progressTextWidth, 765, progress.c_str()); renderer->drawSmallText(pageWidth - progressTextWidth, 765, progress.c_str());
const uint16_t percentage = battery.readPercentage(); const uint16_t percentage = battery.readPercentage();
auto percentageText = std::to_string(percentage) + "%"; const auto percentageText = std::to_string(percentage) + "%";
const auto percentageTextWidth = renderer->getSmallTextWidth(percentageText.c_str()); const auto percentageTextWidth = renderer->getSmallTextWidth(percentageText.c_str());
renderer->drawSmallText(20, 765, percentageText.c_str()); renderer->drawSmallText(20, 765, percentageText.c_str());
// 1 column on left, 2 columns on right, 5 columns of battery body // 1 column on left, 2 columns on right, 5 columns of battery body
constexpr int batteryWidth = 15; constexpr int batteryWidth = 15;
constexpr int batteryHeight = 10; constexpr int batteryHeight = 10;
const int x = 0; constexpr int x = 0;
const int y = 772; constexpr int y = 772;
// Top line // Top line
renderer->drawLine(x, y, x + batteryWidth - 4, y, 1); renderer->drawLine(x, y, x + batteryWidth - 4, y, 1);

View File

@ -14,6 +14,7 @@ class EpubReaderScreen final : public Screen {
SemaphoreHandle_t sectionMutex = nullptr; SemaphoreHandle_t sectionMutex = nullptr;
int currentSpineIndex = 0; int currentSpineIndex = 0;
int nextPageNumber = 0; int nextPageNumber = 0;
int pagesUntilFullRefresh = 0;
bool updateRequired = false; bool updateRequired = false;
const std::function<void()> onGoHome; const std::function<void()> onGoHome;