## Summary - Upgrade platform from espressif32 6.12.0 (Arduino Core 2.0.17) to pioarduino 55.03.37 (Arduino Core 3.3.7, ESP-IDF 5.5.2) - Add WebDAV Class 1 server (RFC 4918) - SD card can be mounted as a network drive - I also slightly fixed the SDK and also made a [pull request ](https://github.com/open-x4-epaper/community-sdk/pull/21) First PR #1030 (was closed because the implementation was based on an old version of the libraries) Issue #439 --------- Co-authored-by: Dave Allie <dave@daveallie.com>
139 lines
5.8 KiB
C++
139 lines
5.8 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <functional>
|
|
#include <string>
|
|
#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 = 40,
|
|
.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;
|
|
};
|