From 4bc987297acf86ac3302e970011f93941ce9af87 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Wed, 8 Apr 2026 11:29:34 +0200 Subject: [PATCH] Review comments --- lib/GfxRenderer/GfxRenderer.cpp | 53 ++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/GfxRenderer/GfxRenderer.cpp b/lib/GfxRenderer/GfxRenderer.cpp index 4bcf1873..5f5263a3 100644 --- a/lib/GfxRenderer/GfxRenderer.cpp +++ b/lib/GfxRenderer/GfxRenderer.cpp @@ -799,11 +799,21 @@ void GfxRenderer::drawText(const int fontId, const int x, const int y, const cha } const EpdGlyph* glyph = font.getGlyph(cp, style); + if (!glyph) { + lastBaseX += fp4::toPixel(prevAdvanceFP); + prevCp = 0; + prevAdvanceFP = 0; + lastBaseLeft = 0; + lastBaseWidth = 0; + lastBaseTop = 0; + lastBaseAdvanceFP = 0; + continue; + } - lastBaseLeft = glyph ? glyph->left : 0; - lastBaseWidth = glyph ? glyph->width : 0; - lastBaseTop = glyph ? glyph->top : 0; - lastBaseAdvanceFP = glyph ? glyph->advanceX : 0; + lastBaseLeft = glyph->left; + lastBaseWidth = glyph->width; + lastBaseTop = glyph->top; + lastBaseAdvanceFP = glyph->advanceX; prevAdvanceFP = lastBaseAdvanceFP; renderCharImpl(*this, renderMode, font, cp, lastBaseX, yPos, black, style); @@ -1588,10 +1598,17 @@ void GfxRenderer::invertScreen() const { } } +void GfxRenderer::setNextDisplayRefreshMode(const HalDisplay::RefreshMode refreshMode) const { + useNextRefreshOverride = true; + nextRefreshOverride = refreshMode; +} + void GfxRenderer::displayBuffer(const HalDisplay::RefreshMode refreshMode) const { + const auto effectiveMode = useNextRefreshOverride ? nextRefreshOverride : refreshMode; + useNextRefreshOverride = false; auto elapsed = millis() - start_ms; LOG_DBG("GFX", "Time = %lu ms from clearScreen to displayBuffer", elapsed); - display.displayBuffer(refreshMode, fadingFix); + display.displayBuffer(effectiveMode, fadingFix); } std::string GfxRenderer::truncatedText(const int fontId, const char* text, const int maxWidth, @@ -1766,7 +1783,13 @@ int GfxRenderer::getTextAdvanceX(const int fontId, const char* text, EpdFontFami } const EpdGlyph* glyph = font.getGlyph(cp, style); - prevAdvanceFP = glyph ? glyph->advanceX : 0; + if (!glyph) { + widthPx += fp4::toPixel(prevAdvanceFP); + prevCp = 0; + prevAdvanceFP = 0; + continue; + } + prevAdvanceFP = glyph->advanceX; prevCp = cp; } widthPx += fp4::toPixel(prevAdvanceFP); // final glyph's advance @@ -1848,11 +1871,21 @@ void GfxRenderer::drawTextRotated90CW(const int fontId, const int x, const int y } const EpdGlyph* glyph = font.getGlyph(cp, style); + if (!glyph) { + lastBaseY -= fp4::toPixel(prevAdvanceFP); + prevCp = 0; + prevAdvanceFP = 0; + lastBaseLeft = 0; + lastBaseWidth = 0; + lastBaseTop = 0; + lastBaseAdvanceFP = 0; + continue; + } - lastBaseLeft = glyph ? glyph->left : 0; - lastBaseWidth = glyph ? glyph->width : 0; - lastBaseTop = glyph ? glyph->top : 0; - lastBaseAdvanceFP = glyph ? glyph->advanceX : 0; + lastBaseLeft = glyph->left; + lastBaseWidth = glyph->width; + lastBaseTop = glyph->top; + lastBaseAdvanceFP = glyph->advanceX; prevAdvanceFP = lastBaseAdvanceFP; renderCharImpl(*this, renderMode, font, cp, x, lastBaseY, black, style);