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_;