From 0466465d8c77504d872237c36a8b1117ccd92b59 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Tue, 28 Apr 2026 19:03:38 +0200 Subject: [PATCH] Add destructor to unregister fonts from GfxRenderer --- lib/EpdFont/SdCardFontManager.cpp | 15 +++++++++++++-- lib/EpdFont/SdCardFontManager.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/EpdFont/SdCardFontManager.cpp b/lib/EpdFont/SdCardFontManager.cpp index 5b8a2da3..619e749a 100644 --- a/lib/EpdFont/SdCardFontManager.cpp +++ b/lib/EpdFont/SdCardFontManager.cpp @@ -9,8 +9,13 @@ #include SdCardFontManager::~SdCardFontManager() { - for (auto& lf : loaded_) { - delete lf.font; + if (renderer_) { + unloadAll(*renderer_); + } else { + for (auto& lf : loaded_) { + delete lf.font; + } + loaded_.clear(); } } @@ -31,6 +36,9 @@ int SdCardFontManager::computeFontId(uint32_t contentHash, const char* familyNam } bool SdCardFontManager::loadFamily(const SdCardFontFamilyInfo& family, GfxRenderer& renderer, uint8_t targetPtSize) { + if (!renderer_) { + renderer_ = &renderer; + } // Unload any previously loaded family first if (!loadedFamilyName_.empty()) { unloadAll(renderer); @@ -80,6 +88,9 @@ bool SdCardFontManager::loadFamily(const SdCardFontFamilyInfo& family, GfxRender } void SdCardFontManager::unloadAll(GfxRenderer& renderer) { + if (!renderer_) { + renderer_ = &renderer; + } renderer.clearSdCardFonts(); for (auto& lf : loaded_) { renderer.removeFont(lf.fontId); diff --git a/lib/EpdFont/SdCardFontManager.h b/lib/EpdFont/SdCardFontManager.h index c60dd63f..659653f8 100644 --- a/lib/EpdFont/SdCardFontManager.h +++ b/lib/EpdFont/SdCardFontManager.h @@ -44,6 +44,7 @@ class SdCardFontManager { }; static int computeFontId(uint32_t contentHash, const char* familyName, uint8_t pointSize); + GfxRenderer* renderer_ = nullptr; std::string loadedFamilyName_; uint8_t loadedPointSize_ = 0; std::vector loaded_;