| 16 | } // namespace |
| 17 | |
| 18 | void SdCardFontSystem::begin(GfxRenderer& renderer) { |
| 19 | registry_.discover(); |
| 20 | |
| 21 | // Register this system as the SD font ID resolver in settings. |
| 22 | // Uses a static trampoline since CrossPointSettings stores a plain function pointer. |
| 23 | SETTINGS.sdFontIdResolver = [](void* ctx, const char* familyName, uint8_t fontSizeEnum) -> int { |
| 24 | return static_cast<SdCardFontSystem*>(ctx)->resolveFontId(familyName, fontSizeEnum); |
| 25 | }; |
| 26 | SETTINGS.sdFontResolverCtx = this; |
| 27 | |
| 28 | // If user has a saved SD font selection, load it |
| 29 | if (SETTINGS.sdFontFamilyName[0] != '\0') { |
| 30 | const auto* family = registry_.findFamily(SETTINGS.sdFontFamilyName); |
| 31 | if (family) { |
| 32 | if (manager_.loadFamily(*family, renderer, fontSizeEnumFromSettings())) { |
| 33 | LOG_DBG("SDFS", "Loaded SD card font family: %s", SETTINGS.sdFontFamilyName); |
| 34 | } else { |
| 35 | LOG_ERR("SDFS", "Failed to load SD font family: %s (clearing)", SETTINGS.sdFontFamilyName); |
| 36 | SETTINGS.sdFontFamilyName[0] = '\0'; |
| 37 | } |
| 38 | } else { |
| 39 | LOG_DBG("SDFS", "SD font family not found on card: %s (clearing)", SETTINGS.sdFontFamilyName); |
| 40 | SETTINGS.sdFontFamilyName[0] = '\0'; |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | LOG_DBG("SDFS", "SD font system ready (%d families discovered)", registry_.getFamilyCount()); |
| 45 | } |
| 46 | |
| 47 | void SdCardFontSystem::ensureLoaded(GfxRenderer& renderer) { |
| 48 | // If the web server (or another task) installed/deleted fonts, re-discover. |
no test coverage detected