#include "UITheme.h" #include #include #include "RecentBooksStore.h" #include "components/themes/BaseTheme.h" #include "components/themes/lyra/LyraTheme.h" UITheme UITheme::instance; UITheme::UITheme() { auto themeType = static_cast(SETTINGS.uiTheme); setTheme(themeType); } void UITheme::reload() { auto themeType = static_cast(SETTINGS.uiTheme); setTheme(themeType); } void UITheme::setTheme(CrossPointSettings::UI_THEME type) { switch (type) { case CrossPointSettings::UI_THEME::CLASSIC: Serial.printf("[%lu] [UI] Using Classic theme\n", millis()); currentTheme = new BaseTheme(); currentMetrics = &BaseMetrics::values; break; case CrossPointSettings::UI_THEME::LYRA: Serial.printf("[%lu] [UI] Using Lyra theme\n", millis()); currentTheme = new LyraTheme(); currentMetrics = &LyraMetrics::values; break; } } int UITheme::getNumberOfItemsPerPage(const GfxRenderer& renderer, bool hasHeader, bool hasTabBar, bool hasButtonHints, bool hasSubtitle) { const ThemeMetrics& metrics = UITheme::getInstance().getMetrics(); int reservedHeight = metrics.topPadding; if (hasHeader) { reservedHeight += metrics.headerHeight; } if (hasTabBar) { reservedHeight += metrics.tabBarHeight + metrics.verticalSpacing; } if (hasButtonHints) { reservedHeight += metrics.verticalSpacing + metrics.buttonHintsHeight; } const int availableHeight = renderer.getScreenHeight() - reservedHeight; int rowHeight = hasSubtitle ? metrics.listWithSubtitleRowHeight : metrics.listRowHeight; return availableHeight / rowHeight; } std::string UITheme::getCoverThumbPath(std::string coverBmpPath, int coverHeight) { size_t pos = coverBmpPath.find("[HEIGHT]", 0); if (pos != std::string::npos) { coverBmpPath.replace(pos, 8, std::to_string(coverHeight)); } return coverBmpPath; }