## Summary * **What is the goal of this PR?** (e.g., Implements the new feature for file uploading.) Adresses Feature Request #896 * **What changes are included?** Changed key dimensions, initial positions and margins. ## Additional Context The keyboard now looks like this:  --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_
138 lines
5.8 KiB
C++
138 lines
5.8 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <functional>
|
|
#include <vector>
|
|
|
|
class GfxRenderer;
|
|
struct RecentBook;
|
|
|
|
struct Rect {
|
|
int x;
|
|
int y;
|
|
int width;
|
|
int height;
|
|
|
|
explicit Rect(int x = 0, int y = 0, int width = 0, int height = 0) : x(x), y(y), width(width), height(height) {}
|
|
};
|
|
|
|
struct TabInfo {
|
|
const char* label;
|
|
bool selected;
|
|
};
|
|
|
|
struct ThemeMetrics {
|
|
int batteryWidth;
|
|
int batteryHeight;
|
|
|
|
int topPadding;
|
|
int batteryBarHeight;
|
|
int headerHeight;
|
|
int verticalSpacing;
|
|
|
|
int contentSidePadding;
|
|
int listRowHeight;
|
|
int listWithSubtitleRowHeight;
|
|
int menuRowHeight;
|
|
int menuSpacing;
|
|
|
|
int tabSpacing;
|
|
int tabBarHeight;
|
|
|
|
int scrollBarWidth;
|
|
int scrollBarRightOffset;
|
|
|
|
int homeTopPadding;
|
|
int homeCoverHeight;
|
|
int homeCoverTileHeight;
|
|
int homeRecentBooksCount;
|
|
|
|
int buttonHintsHeight;
|
|
int sideButtonHintsWidth;
|
|
|
|
int progressBarHeight;
|
|
int bookProgressBarHeight;
|
|
|
|
int keyboardKeyWidth;
|
|
int keyboardKeyHeight;
|
|
int keyboardKeySpacing;
|
|
bool keyboardBottomAligned;
|
|
bool keyboardCenteredText;
|
|
};
|
|
|
|
enum UIIcon { Folder, Text, Image, Book, File, Recent, Settings, Transfer, Library, Wifi, Hotspot };
|
|
|
|
// Default theme implementation (Classic Theme)
|
|
// Additional themes can inherit from this and override methods as needed
|
|
|
|
namespace BaseMetrics {
|
|
constexpr ThemeMetrics values = {.batteryWidth = 15,
|
|
.batteryHeight = 12,
|
|
.topPadding = 5,
|
|
.batteryBarHeight = 20,
|
|
.headerHeight = 45,
|
|
.verticalSpacing = 10,
|
|
.contentSidePadding = 20,
|
|
.listRowHeight = 30,
|
|
.listWithSubtitleRowHeight = 65,
|
|
.menuRowHeight = 45,
|
|
.menuSpacing = 8,
|
|
.tabSpacing = 10,
|
|
.tabBarHeight = 50,
|
|
.scrollBarWidth = 4,
|
|
.scrollBarRightOffset = 5,
|
|
.homeTopPadding = 20,
|
|
.homeCoverHeight = 400,
|
|
.homeCoverTileHeight = 400,
|
|
.homeRecentBooksCount = 1,
|
|
.buttonHintsHeight = 40,
|
|
.sideButtonHintsWidth = 30,
|
|
.progressBarHeight = 16,
|
|
.bookProgressBarHeight = 4,
|
|
.keyboardKeyWidth = 22,
|
|
.keyboardKeyHeight = 30,
|
|
.keyboardKeySpacing = 10,
|
|
.keyboardBottomAligned = false,
|
|
.keyboardCenteredText = false};
|
|
}
|
|
|
|
class BaseTheme {
|
|
public:
|
|
virtual ~BaseTheme() = default;
|
|
|
|
// Component drawing methods
|
|
virtual void drawProgressBar(const GfxRenderer& renderer, Rect rect, size_t current, size_t total) const;
|
|
virtual void drawBatteryLeft(const GfxRenderer& renderer, Rect rect,
|
|
bool showPercentage = true) const; // Left aligned (reader mode)
|
|
virtual void drawBatteryRight(const GfxRenderer& renderer, Rect rect,
|
|
bool showPercentage = true) const; // Right aligned (UI headers)
|
|
virtual void drawButtonHints(GfxRenderer& renderer, const char* btn1, const char* btn2, const char* btn3,
|
|
const char* btn4) const;
|
|
virtual void drawSideButtonHints(const GfxRenderer& renderer, const char* topBtn, const char* bottomBtn) const;
|
|
virtual 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 = nullptr,
|
|
const std::function<UIIcon(int index)>& rowIcon = nullptr,
|
|
const std::function<std::string(int index)>& rowValue = nullptr,
|
|
bool highlightValue = false) const;
|
|
virtual void drawHeader(const GfxRenderer& renderer, Rect rect, const char* title,
|
|
const char* subtitle = nullptr) const;
|
|
virtual void drawSubHeader(const GfxRenderer& renderer, Rect rect, const char* label,
|
|
const char* rightLabel = nullptr) const;
|
|
virtual void drawTabBar(const GfxRenderer& renderer, Rect rect, const std::vector<TabInfo>& tabs,
|
|
bool selected) const;
|
|
virtual 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;
|
|
virtual 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;
|
|
virtual Rect drawPopup(const GfxRenderer& renderer, const char* message) const;
|
|
virtual void fillPopupProgress(const GfxRenderer& renderer, const Rect& layout, const int progress) const;
|
|
virtual void drawReadingProgressBar(const GfxRenderer& renderer, const size_t bookProgress) const;
|
|
virtual void drawHelpText(const GfxRenderer& renderer, Rect rect, const char* label) const;
|
|
virtual void drawTextField(const GfxRenderer& renderer, Rect rect, const int textWidth) const;
|
|
virtual void drawKeyboardKey(const GfxRenderer& renderer, Rect rect, const char* label, const bool isSelected) const;
|
|
};
|