From a3a3954062dbd6684e07c8f78ce40fdb6741ea6e Mon Sep 17 00:00:00 2001 From: Jonas Diemer Date: Tue, 30 Dec 2025 18:02:33 +0100 Subject: [PATCH] Factor out truncation function. --- lib/GfxRenderer/GfxRenderer.cpp | 11 +++++++++++ lib/GfxRenderer/GfxRenderer.h | 1 + .../reader/EpubReaderChapterSelectionActivity.cpp | 9 ++------- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index 0fc4abf..0052272 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -238,6 +238,17 @@ void GfxRenderer::displayBuffer(const EInkDisplay::RefreshMode refreshMode) cons einkDisplay.displayBuffer(refreshMode); } +std::string GfxRenderer::truncatedText(const int fontId, const char* text, const int maxWidth, + const EpdFontStyle style) const { + std::string item = text; + int itemWidth = getTextWidth(fontId, item.c_str(), style); + while (itemWidth > maxWidth && item.length() > 8) { + item.replace(item.length() - 5, 5, "..."); + itemWidth = getTextWidth(fontId, item.c_str(), style); + } + return item; +} + // Note: Internal driver treats screen in command orientation; this library exposes a logical orientation int GfxRenderer::getScreenWidth() const { switch (orientation) { diff --git a/lib/GfxRenderer/GfxRenderer.h b/lib/GfxRenderer/GfxRenderer.h index 0d7bb88..ed733a2 100644 --- a/lib/GfxRenderer/GfxRenderer.h +++ b/lib/GfxRenderer/GfxRenderer.h @@ -75,6 +75,7 @@ class GfxRenderer { int getSpaceWidth(int fontId) const; int getFontAscenderSize(int fontId) const; int getLineHeight(int fontId) const; + std::string truncatedText(const int fontId, const char* text, const int maxWidth, const EpdFontStyle style) const; // UI Components void drawButtonHints(int fontId, const char* btn1, const char* btn2, const char* btn3, const char* btn4) const; diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp index 98cf00d..1b62135 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.cpp +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.cpp @@ -121,13 +121,8 @@ void EpubReaderChapterSelectionActivity::renderScreen() { const auto pageWidth = renderer.getScreenWidth(); const int pageItems = getPageItems(); - std::string item = epub->getTitle(); - int itemWidth = renderer.getTextWidth(UI_12_FONT_ID, item.c_str(), BOLD); - while (itemWidth > renderer.getScreenWidth() - 40 && item.length() > 8) { - item.replace(item.length() - 5, 5, "..."); - itemWidth = renderer.getTextWidth(UI_12_FONT_ID, item.c_str(), BOLD); - } - renderer.drawCenteredText(UI_12_FONT_ID, 15, item.c_str(), true, BOLD); + std::string title = renderer.truncatedText(UI_12_FONT_ID, epub->getTitle().c_str(), pageWidth - 40, BOLD); + renderer.drawCenteredText(UI_12_FONT_ID, 15, title.c_str(), true, BOLD); const auto pageStartIndex = selectorIndex / pageItems * pageItems; renderer.fillRect(0, 60 + (selectorIndex % pageItems) * 30 - 2, pageWidth - 1, 30);