83 lines
5.0 KiB
C++
83 lines
5.0 KiB
C++
#pragma once
|
|
|
|
#include "components/themes/BaseTheme.h"
|
|
|
|
class GfxRenderer;
|
|
|
|
// Lyra theme metrics (zero runtime cost)
|
|
namespace LyraMetrics {
|
|
constexpr ThemeMetrics values = {.batteryWidth = 16,
|
|
.batteryHeight = 12,
|
|
.topPadding = 5,
|
|
.batteryBarHeight = 40,
|
|
.headerHeight = 84,
|
|
.verticalSpacing = 16,
|
|
.contentSidePadding = 20,
|
|
.listRowHeight = 40,
|
|
.listWithSubtitleRowHeight = 68,
|
|
.menuRowHeight = 64,
|
|
.menuSpacing = 8,
|
|
.tabSpacing = 8,
|
|
.tabBarHeight = 40,
|
|
.scrollBarWidth = 4,
|
|
.scrollBarRightOffset = 5,
|
|
.homeTopPadding = 56,
|
|
.homeCoverHeight = 226,
|
|
.homeCoverTileHeight = 242,
|
|
.homeRecentBooksCount = 1,
|
|
.buttonHintsHeight = 40,
|
|
.sideButtonHintsWidth = 30,
|
|
.progressBarHeight = 16,
|
|
.progressBarMarginTop = 1,
|
|
.statusBarHorizontalMargin = 5,
|
|
.statusBarVerticalMargin = 19,
|
|
.keyboardKeyWidth = 31,
|
|
.keyboardKeyHeight = 40,
|
|
.keyboardKeySpacing = 0,
|
|
.keyboardBottomKeyHeight = 35,
|
|
.keyboardBottomKeySpacing = 5,
|
|
.keyboardBottomAligned = true,
|
|
.keyboardCenteredText = false,
|
|
.keyboardVerticalOffset = -7};
|
|
}
|
|
|
|
class LyraTheme : public BaseTheme {
|
|
public:
|
|
// Component drawing methods
|
|
// void drawProgressBar(const GfxRenderer& renderer, Rect rect, size_t current, size_t total) override;
|
|
void drawBatteryLeft(const GfxRenderer& renderer, Rect rect, bool showPercentage = true) const override;
|
|
void drawBatteryRight(const GfxRenderer& renderer, Rect rect, bool showPercentage = true) const override;
|
|
void drawHeader(const GfxRenderer& renderer, Rect rect, const char* title, const char* subtitle) const override;
|
|
void drawSubHeader(const GfxRenderer& renderer, Rect rect, const char* label,
|
|
const char* rightLabel = nullptr) const override;
|
|
void drawTabBar(const GfxRenderer& renderer, Rect rect, const std::vector<TabInfo>& tabs,
|
|
bool selected) const override;
|
|
void drawList(const GfxRenderer& renderer, Rect rect, int itemCount, int selectedIndex,
|
|
const std::function<std::string(int index)>& rowTitle,
|
|
const std::function<std::string(int index)>& rowSubtitle,
|
|
const std::function<UIIcon(int index)>& rowIcon, const std::function<std::string(int index)>& rowValue,
|
|
bool highlightValue) const override;
|
|
void drawButtonHints(GfxRenderer& renderer, const char* btn1, const char* btn2, const char* btn3,
|
|
const char* btn4) const override;
|
|
void drawSideButtonHints(const GfxRenderer& renderer, const char* topBtn, const char* bottomBtn) const override;
|
|
void drawButtonMenu(GfxRenderer& renderer, Rect rect, int buttonCount, int selectedIndex,
|
|
const std::function<std::string(int index)>& buttonLabel,
|
|
const std::function<UIIcon(int index)>& rowIcon) const override;
|
|
void drawRecentBookCover(GfxRenderer& renderer, Rect rect, const std::vector<RecentBook>& recentBooks,
|
|
const int selectorIndex, bool& coverRendered, bool& coverBufferStored, bool& bufferRestored,
|
|
std::function<bool()> storeCoverBuffer) const override;
|
|
void drawEmptyRecents(const GfxRenderer& renderer, const Rect rect) const;
|
|
Rect drawPopup(const GfxRenderer& renderer, const char* message) const override;
|
|
void fillPopupProgress(const GfxRenderer& renderer, const Rect& layout, const int progress) const override;
|
|
void drawTextField(const GfxRenderer& renderer, Rect rect, const int textWidth, bool cursorMode = false,
|
|
int contentStartX = 0, int contentWidth = 0) const override;
|
|
void drawKeyboardKey(const GfxRenderer& renderer, Rect rect, const char* label, const bool isSelected,
|
|
const char* secondaryLabel = nullptr, KeyboardKeyType keyType = KeyboardKeyType::Normal,
|
|
bool inactiveSelection = false) const override;
|
|
bool showsFileIcons() const override { return true; }
|
|
|
|
protected:
|
|
static int getRecentBookProgressPercent(const RecentBook& book);
|
|
static void drawProgressBadge(const GfxRenderer& renderer, Rect anchorRect, int progressPercent);
|
|
};
|