refactor(Style): Add font abstraction and CSS-like styling constants

This commit is contained in:
2026-02-19 14:48:25 -08:00
parent 59b2bf01b7
commit ec8ec4cd18
20 changed files with 492 additions and 82 deletions

View File

@@ -36,6 +36,12 @@ public:
virtual int width() = 0;
virtual int height() = 0;
// ── Fonts ──
virtual void setTitleFont() = 0; // Large titles (KLUBHAUS, ALERT)
virtual void setBodyFont() = 0; // Normal text (status, body)
virtual void setLabelFont() = 0; // Small text (hints, captions)
virtual void setDefaultFont() = 0; // Reset to default font
// ── Touch transform (for rotated panels) ──
virtual void transformTouch(int* x, int* y) { /* default: no transform */ }
};

View File

@@ -7,3 +7,4 @@
#include "IDisplayDriver.h"
#include "NetManager.h"
#include "ScreenState.h"
#include "Style.h"

View File

@@ -0,0 +1,62 @@
#pragma once
#include <cstdint>
struct Layout {
uint16_t x, y, w, h;
Layout()
: x(0)
, y(0)
, w(0)
, h(0) { }
Layout(uint16_t x_, uint16_t y_, uint16_t w_, uint16_t h_)
: x(x_)
, y(y_)
, w(w_)
, h(h_) { }
static Layout fullScreen(uint16_t w, uint16_t h) { return Layout(0, 0, w, h); }
static Layout header(uint16_t screenW, uint16_t headerH, uint16_t padding = 10) {
return Layout(0, 0, screenW, headerH);
}
static Layout content(
uint16_t screenW, uint16_t screenH, uint16_t headerH, uint16_t padding = 10) {
return Layout(
padding, headerH + padding, screenW - 2 * padding, screenH - headerH - 2 * padding);
}
static Layout tile(uint8_t col, uint8_t row, uint8_t cols, uint8_t rows, uint16_t contentW,
uint16_t contentH, uint8_t gap = 8) {
uint16_t tileW = (contentW - (cols - 1) * gap) / cols;
uint16_t tileH = (contentH - (rows - 1) * gap) / rows;
uint16_t x = col * (tileW + gap);
uint16_t y = row * (tileH + gap);
return Layout(x, y, tileW, tileH);
}
};
struct TileMetrics {
uint16_t tileW;
uint16_t tileH;
uint16_t gap;
uint8_t cols;
uint8_t rows;
static TileMetrics calculate(
uint16_t contentW, uint16_t contentH, uint8_t cols, uint8_t rows, uint8_t gap = 8) {
TileMetrics m;
m.cols = cols;
m.rows = rows;
m.gap = gap;
m.tileW = (contentW - (cols - 1) * gap) / cols;
m.tileH = (contentH - (rows - 1) * gap) / rows;
return m;
}
Layout get(uint8_t col, uint8_t row) const {
return Layout(col * (tileW + gap), row * (tileH + gap), tileW, tileH);
}
};