Add destructor to unregister fonts from GfxRenderer

This commit is contained in:
jpirnay
2026-04-28 19:03:38 +02:00
parent ebb80bf4d9
commit 0466465d8c
2 changed files with 14 additions and 2 deletions
+11
View File
@@ -9,9 +9,14 @@
#include <cstdlib> #include <cstdlib>
SdCardFontManager::~SdCardFontManager() { SdCardFontManager::~SdCardFontManager() {
if (renderer_) {
unloadAll(*renderer_);
} else {
for (auto& lf : loaded_) { for (auto& lf : loaded_) {
delete lf.font; delete lf.font;
} }
loaded_.clear();
}
} }
// FNV-1a continuation: seeds with contentHash, then hashes family name + point size. // FNV-1a continuation: seeds with contentHash, then hashes family name + point size.
@@ -31,6 +36,9 @@ int SdCardFontManager::computeFontId(uint32_t contentHash, const char* familyNam
} }
bool SdCardFontManager::loadFamily(const SdCardFontFamilyInfo& family, GfxRenderer& renderer, uint8_t targetPtSize) { bool SdCardFontManager::loadFamily(const SdCardFontFamilyInfo& family, GfxRenderer& renderer, uint8_t targetPtSize) {
if (!renderer_) {
renderer_ = &renderer;
}
// Unload any previously loaded family first // Unload any previously loaded family first
if (!loadedFamilyName_.empty()) { if (!loadedFamilyName_.empty()) {
unloadAll(renderer); unloadAll(renderer);
@@ -80,6 +88,9 @@ bool SdCardFontManager::loadFamily(const SdCardFontFamilyInfo& family, GfxRender
} }
void SdCardFontManager::unloadAll(GfxRenderer& renderer) { void SdCardFontManager::unloadAll(GfxRenderer& renderer) {
if (!renderer_) {
renderer_ = &renderer;
}
renderer.clearSdCardFonts(); renderer.clearSdCardFonts();
for (auto& lf : loaded_) { for (auto& lf : loaded_) {
renderer.removeFont(lf.fontId); renderer.removeFont(lf.fontId);
+1
View File
@@ -44,6 +44,7 @@ class SdCardFontManager {
}; };
static int computeFontId(uint32_t contentHash, const char* familyName, uint8_t pointSize); static int computeFontId(uint32_t contentHash, const char* familyName, uint8_t pointSize);
GfxRenderer* renderer_ = nullptr;
std::string loadedFamilyName_; std::string loadedFamilyName_;
uint8_t loadedPointSize_ = 0; uint8_t loadedPointSize_ = 0;
std::vector<LoadedFont> loaded_; std::vector<LoadedFont> loaded_;