From 6b37fcd97e704204fff96c102954da4afd4d2d0e Mon Sep 17 00:00:00 2001 From: jpirnay Date: Thu, 14 May 2026 21:49:01 +0200 Subject: [PATCH 1/2] Fix sd card font performance for txt + md --- src/activities/reader/MdReaderActivity.cpp | 6 ++++++ src/activities/reader/TxtReaderActivity.cpp | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/activities/reader/MdReaderActivity.cpp b/src/activities/reader/MdReaderActivity.cpp index 4be66cd7..df5ddc5f 100644 --- a/src/activities/reader/MdReaderActivity.cpp +++ b/src/activities/reader/MdReaderActivity.cpp @@ -613,6 +613,12 @@ bool MdReaderActivity::loadPageAtOffset(size_t offset, bool startInCodeBlock, st } } + if (renderer.isSdCardFont(cachedFontId)) { + std::string flatText; + for (const auto& span : flatLine.spans) flatText += span.text; + renderer.ensureSdCardFontReady(cachedFontId, flatText.c_str()); + } + size_t linesBefore = outLines.size(); int remainingLines = linesPerPage - static_cast(outLines.size()); bool fullyConsumed = wordWrapParsedLine(flatLine, 0, outLines, remainingLines); diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 5a7c6718..961c4ec1 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -45,6 +45,8 @@ size_t parseAndWrapLines(const uint8_t* buffer, size_t chunkSize, size_t fileOff std::string line(reinterpret_cast(buffer + pos), displayLen); size_t lineBytePos = 0; + renderer.ensureSdCardFontReady(fontId, line.c_str()); + while (!line.empty() && static_cast(outLines.size()) < linesPerPage) { if (renderer.getTextWidth(fontId, line.c_str()) <= vw) { outLines.push_back(line); From d0315544502d5ce9d7fcde120fae88b2a64c52e4 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Thu, 14 May 2026 21:56:32 +0200 Subject: [PATCH 2/2] Nitpick comments --- src/activities/reader/MdReaderActivity.cpp | 2 +- src/activities/reader/TxtReaderActivity.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/activities/reader/MdReaderActivity.cpp b/src/activities/reader/MdReaderActivity.cpp index df5ddc5f..b2e7c8bc 100644 --- a/src/activities/reader/MdReaderActivity.cpp +++ b/src/activities/reader/MdReaderActivity.cpp @@ -616,7 +616,7 @@ bool MdReaderActivity::loadPageAtOffset(size_t offset, bool startInCodeBlock, st if (renderer.isSdCardFont(cachedFontId)) { std::string flatText; for (const auto& span : flatLine.spans) flatText += span.text; - renderer.ensureSdCardFontReady(cachedFontId, flatText.c_str()); + if (!flatText.empty()) renderer.ensureSdCardFontReady(cachedFontId, flatText.c_str()); } size_t linesBefore = outLines.size(); diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 961c4ec1..df42479a 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -45,7 +45,9 @@ size_t parseAndWrapLines(const uint8_t* buffer, size_t chunkSize, size_t fileOff std::string line(reinterpret_cast(buffer + pos), displayLen); size_t lineBytePos = 0; - renderer.ensureSdCardFontReady(fontId, line.c_str()); + if (renderer.isSdCardFont(fontId) && !line.empty()) { + renderer.ensureSdCardFontReady(fontId, line.c_str()); + } while (!line.empty() && static_cast(outLines.size()) < linesPerPage) { if (renderer.getTextWidth(fontId, line.c_str()) <= vw) {