From 24b5e270c447a1b62cc2736c948445ea84dcba5d Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Tue, 3 Feb 2026 21:41:46 -0800 Subject: [PATCH] fix: status bar elements respect inverse display setting Battery icon, percentage text, progress bar, and chapter title were always drawn black because renderStatusBar() didn't use the inverse flag. Thread it through ScreenComponents and all status bar draw calls. --- src/ScreenComponents.cpp | 24 ++++++++++---------- src/ScreenComponents.h | 5 ++-- src/activities/reader/EpubReaderActivity.cpp | 10 ++++---- src/activities/reader/TxtReaderActivity.cpp | 11 +++++---- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/ScreenComponents.cpp b/src/ScreenComponents.cpp index 72f7faf0..8dd6a5ba 100644 --- a/src/ScreenComponents.cpp +++ b/src/ScreenComponents.cpp @@ -9,11 +9,11 @@ #include "fontIds.h" void ScreenComponents::drawBattery(const GfxRenderer& renderer, const int left, const int top, - const bool showPercentage) { + const bool showPercentage, const bool black) { // Left aligned battery icon and percentage const uint16_t percentage = battery.readPercentage(); const auto percentageText = showPercentage ? std::to_string(percentage) + "%" : ""; - renderer.drawText(SMALL_FONT_ID, left + 20, top, percentageText.c_str()); + renderer.drawText(SMALL_FONT_ID, left + 20, top, percentageText.c_str(), black); // 1 column on left, 2 columns on right, 5 columns of battery body constexpr int batteryWidth = 15; @@ -22,16 +22,16 @@ void ScreenComponents::drawBattery(const GfxRenderer& renderer, const int left, const int y = top + 6; // Top line - renderer.drawLine(x + 1, y, x + batteryWidth - 3, y); + renderer.drawLine(x + 1, y, x + batteryWidth - 3, y, black); // Bottom line - renderer.drawLine(x + 1, y + batteryHeight - 1, x + batteryWidth - 3, y + batteryHeight - 1); + renderer.drawLine(x + 1, y + batteryHeight - 1, x + batteryWidth - 3, y + batteryHeight - 1, black); // Left line - renderer.drawLine(x, y + 1, x, y + batteryHeight - 2); + renderer.drawLine(x, y + 1, x, y + batteryHeight - 2, black); // Battery end - renderer.drawLine(x + batteryWidth - 2, y + 1, x + batteryWidth - 2, y + batteryHeight - 2); - renderer.drawPixel(x + batteryWidth - 1, y + 3); - renderer.drawPixel(x + batteryWidth - 1, y + batteryHeight - 4); - renderer.drawLine(x + batteryWidth - 0, y + 4, x + batteryWidth - 0, y + batteryHeight - 5); + renderer.drawLine(x + batteryWidth - 2, y + 1, x + batteryWidth - 2, y + batteryHeight - 2, black); + renderer.drawPixel(x + batteryWidth - 1, y + 3, black); + renderer.drawPixel(x + batteryWidth - 1, y + batteryHeight - 4, black); + renderer.drawLine(x + batteryWidth - 0, y + 4, x + batteryWidth - 0, y + batteryHeight - 5, black); // The +1 is to round up, so that we always fill at least one pixel int filledWidth = percentage * (batteryWidth - 5) / 100 + 1; @@ -39,7 +39,7 @@ void ScreenComponents::drawBattery(const GfxRenderer& renderer, const int left, filledWidth = batteryWidth - 5; // Ensure we don't overflow } - renderer.fillRect(x + 2, y + 2, filledWidth, batteryHeight - 4); + renderer.fillRect(x + 2, y + 2, filledWidth, batteryHeight - 4, black); } ScreenComponents::PopupLayout ScreenComponents::drawPopup(const GfxRenderer& renderer, const char* message) { @@ -74,7 +74,7 @@ void ScreenComponents::fillPopupProgress(const GfxRenderer& renderer, const Popu renderer.displayBuffer(HalDisplay::FAST_REFRESH); } -void ScreenComponents::drawBookProgressBar(const GfxRenderer& renderer, const size_t bookProgress) { +void ScreenComponents::drawBookProgressBar(const GfxRenderer& renderer, const size_t bookProgress, const bool black) { int vieweableMarginTop, vieweableMarginRight, vieweableMarginBottom, vieweableMarginLeft; renderer.getOrientedViewableTRBL(&vieweableMarginTop, &vieweableMarginRight, &vieweableMarginBottom, &vieweableMarginLeft); @@ -82,7 +82,7 @@ void ScreenComponents::drawBookProgressBar(const GfxRenderer& renderer, const si const int progressBarMaxWidth = renderer.getScreenWidth() - vieweableMarginLeft - vieweableMarginRight; const int progressBarY = renderer.getScreenHeight() - vieweableMarginBottom - BOOK_PROGRESS_BAR_HEIGHT; const int barWidth = progressBarMaxWidth * bookProgress / 100; - renderer.fillRect(vieweableMarginLeft, progressBarY, barWidth, BOOK_PROGRESS_BAR_HEIGHT, true); + renderer.fillRect(vieweableMarginLeft, progressBarY, barWidth, BOOK_PROGRESS_BAR_HEIGHT, black); } int ScreenComponents::drawTabBar(const GfxRenderer& renderer, const int y, const std::vector& tabs) { diff --git a/src/ScreenComponents.h b/src/ScreenComponents.h index 78ed5920..9ecd2494 100644 --- a/src/ScreenComponents.h +++ b/src/ScreenComponents.h @@ -22,8 +22,9 @@ class ScreenComponents { int height; }; - static void drawBattery(const GfxRenderer& renderer, int left, int top, bool showPercentage = true); - static void drawBookProgressBar(const GfxRenderer& renderer, size_t bookProgress); + static void drawBattery(const GfxRenderer& renderer, int left, int top, bool showPercentage = true, + bool black = true); + static void drawBookProgressBar(const GfxRenderer& renderer, size_t bookProgress, bool black = true); static PopupLayout drawPopup(const GfxRenderer& renderer, const char* message); diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 10ca42be..336f9388 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -493,6 +493,8 @@ void EpubReaderActivity::renderContents(std::unique_ptr page, const int or void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const int orientedMarginBottom, const int orientedMarginLeft) const { + const bool inverse = SETTINGS.inverseDisplay; + // determine visible status bar elements const bool showProgressPercentage = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; const bool showProgressBar = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL_WITH_PROGRESS_BAR || @@ -531,16 +533,16 @@ void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const in progressTextWidth = renderer.getTextWidth(SMALL_FONT_ID, progressStr); renderer.drawText(SMALL_FONT_ID, renderer.getScreenWidth() - orientedMarginRight - progressTextWidth, textY, - progressStr); + progressStr, !inverse); } if (showProgressBar) { // Draw progress bar at the very bottom of the screen, from edge to edge of viewable area - ScreenComponents::drawBookProgressBar(renderer, static_cast(bookProgress)); + ScreenComponents::drawBookProgressBar(renderer, static_cast(bookProgress), !inverse); } if (showBattery) { - ScreenComponents::drawBattery(renderer, orientedMarginLeft + 1, textY, showBatteryPercentage); + ScreenComponents::drawBattery(renderer, orientedMarginLeft + 1, textY, showBatteryPercentage, !inverse); } if (showChapterTitle) { @@ -580,6 +582,6 @@ void EpubReaderActivity::renderStatusBar(const int orientedMarginRight, const in renderer.drawText(SMALL_FONT_ID, titleMarginLeftAdjusted + orientedMarginLeft + (availableTitleSpace - titleWidth) / 2, textY, - title.c_str()); + title.c_str(), !inverse); } } diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 24bcebf9..d463b51a 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -486,6 +486,8 @@ void TxtReaderActivity::renderPage() { void TxtReaderActivity::renderStatusBar(const int orientedMarginRight, const int orientedMarginBottom, const int orientedMarginLeft) const { + const bool inverse = SETTINGS.inverseDisplay; + const bool showProgressPercentage = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL; const bool showProgressBar = SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::FULL_WITH_PROGRESS_BAR || SETTINGS.statusBar == CrossPointSettings::STATUS_BAR_MODE::ONLY_PROGRESS_BAR; @@ -516,16 +518,16 @@ void TxtReaderActivity::renderStatusBar(const int orientedMarginRight, const int progressTextWidth = renderer.getTextWidth(SMALL_FONT_ID, progressStr); renderer.drawText(SMALL_FONT_ID, renderer.getScreenWidth() - orientedMarginRight - progressTextWidth, textY, - progressStr); + progressStr, !inverse); } if (showProgressBar) { // Draw progress bar at the very bottom of the screen, from edge to edge of viewable area - ScreenComponents::drawBookProgressBar(renderer, static_cast(progress)); + ScreenComponents::drawBookProgressBar(renderer, static_cast(progress), !inverse); } if (showBattery) { - ScreenComponents::drawBattery(renderer, orientedMarginLeft, textY, showBatteryPercentage); + ScreenComponents::drawBattery(renderer, orientedMarginLeft, textY, showBatteryPercentage, !inverse); } if (showTitle) { @@ -540,7 +542,8 @@ void TxtReaderActivity::renderStatusBar(const int orientedMarginRight, const int titleWidth = renderer.getTextWidth(SMALL_FONT_ID, title.c_str()); } - renderer.drawText(SMALL_FONT_ID, titleMarginLeft + (availableTextWidth - titleWidth) / 2, textY, title.c_str()); + renderer.drawText(SMALL_FONT_ID, titleMarginLeft + (availableTextWidth - titleWidth) / 2, textY, title.c_str(), + !inverse); } }