Files
Dual-PID/JC_Display_Firmware/theme.h
raw-designsandClaude Opus 5 1f8cce48aa fix(P4): Compiler-Warnungen des Display-Builds beseitigt (1.1.1)
Von 68 Warnungen (arduino-cli --warnings all) auf eine einzige, die im
ESP32-Core-SDK steckt und nicht im Projekt behebbar ist.

- LV_FS_DEFAULT_DRIVE_LETTER heißt ab LVGL 9.3 LV_FS_DEFAULT_DRIVER_LETTER. Der
  alte Name funktionierte weiter, löste aber in lv_api_map_v9_1.h ein #warning in
  JEDER Übersetzungseinheit aus, die lvgl.h einbindet — allein rund 60 Warnungen
  pro Build, die alles andere zugedeckt haben. In lv_conf.h umbenannt.
- LV_PART_* und LV_STATE_* sind in LVGL 9 verschiedene Enum-Typen; die direkte
  |-Verknüpfung ist in C++20 abgekündigt. Neues Makro TH_SEL(part, state) in
  theme.h castet beide auf lv_style_selector_t (ohnehin uint32_t), 5 Stellen.
- Bug-Fix: Der Puffer der Cold-Extraction-Infozeile auf der Brew-Seite war mit 192
  Bytes zu klein für den ~205 Zeichen langen Text (das "°" zählt doppelt), die
  letzte Zeile wurde abgeschnitten. Jetzt 256 Bytes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 01:20:49 +02:00

75 lines
3.1 KiB
C

// =====================================================================================
// theme.h - Farbwelt & Style-Helfer, abgestimmt auf die Web-UI
// =====================================================================================
// Palette aus Skripte/style.css:
// Accent #d89904 (Gold) BG #000000 -> #1a1a1a Text #ffffff
// Danger #dc3545 Warn #FFCC00 Border #555555
// =====================================================================================
#pragma once
#include <lvgl.h>
#define COL_BG lv_color_hex(0x0a0a0a)
#define COL_BG2 lv_color_hex(0x1a1a1a)
#define COL_CARD lv_color_hex(0x1e1e1e)
#define COL_CARD2 lv_color_hex(0x141414)
#define COL_ACCENT lv_color_hex(0xd89904)
#define COL_ACCENT_D lv_color_hex(0xb37e03)
#define COL_TEXT lv_color_hex(0xffffff)
#define COL_TEXT_DIM lv_color_hex(0xb0b0b0)
#define COL_TEXT_MUT lv_color_hex(0x808080)
#define COL_DANGER lv_color_hex(0xdc3545)
#define COL_WARN lv_color_hex(0xffcc00)
#define COL_OK lv_color_hex(0x66bb6a)
#define COL_BORDER lv_color_hex(0x555555)
#define COL_INPUT_BG lv_color_hex(0x101010)
// Style-Selektor aus Part + State. LV_PART_* und LV_STATE_* sind in LVGL 9 zwei
// verschiedene Enum-Typen; sie direkt mit | zu verknuepfen ist in C++20 deprecated
// (-Wdeprecated-enum-enum-conversion). Der Zieltyp ist ohnehin uint32_t.
#define TH_SEL(part, state) ((lv_style_selector_t)(part) | (lv_style_selector_t)(state))
// ---- Karte (dunkel, abgerundet) ----
static inline lv_obj_t* th_card(lv_obj_t* parent) {
lv_obj_t* c = lv_obj_create(parent);
lv_obj_set_style_bg_color(c, COL_CARD, 0);
lv_obj_set_style_bg_opa(c, LV_OPA_COVER, 0);
lv_obj_set_style_border_width(c, 1, 0);
lv_obj_set_style_border_color(c, lv_color_hex(0x2a2a2a), 0);
lv_obj_set_style_radius(c, 12, 0);
lv_obj_set_style_pad_all(c, 10, 0);
lv_obj_set_style_text_color(c, COL_TEXT, 0);
return c;
}
// ---- Akzent-Button (Gold, Pille) ----
static inline lv_obj_t* th_button(lv_obj_t* parent, const char* txt, lv_color_t bg, lv_color_t fg) {
lv_obj_t* b = lv_button_create(parent);
lv_obj_set_style_bg_color(b, bg, 0);
lv_obj_set_style_radius(b, 18, 0);
lv_obj_set_style_shadow_width(b, 0, 0);
lv_obj_t* l = lv_label_create(b);
lv_label_set_text(l, txt);
lv_obj_set_style_text_color(l, fg, 0);
lv_obj_center(l);
return b;
}
static inline lv_obj_t* th_accent_button(lv_obj_t* parent, const char* txt) {
return th_button(parent, txt, COL_ACCENT, lv_color_hex(0x000000));
}
// ---- Eingabefeld (Textarea) im Web-Look ----
static inline lv_obj_t* th_textarea(lv_obj_t* parent, bool oneLine) {
lv_obj_t* ta = lv_textarea_create(parent);
lv_textarea_set_one_line(ta, oneLine);
lv_obj_set_style_bg_color(ta, COL_INPUT_BG, 0);
lv_obj_set_style_border_color(ta, COL_BORDER, 0);
lv_obj_set_style_border_color(ta, COL_ACCENT, TH_SEL(LV_PART_MAIN, LV_STATE_FOCUSED));
lv_obj_set_style_border_width(ta, 1, 0);
lv_obj_set_style_radius(ta, 8, 0);
lv_obj_set_style_text_color(ta, COL_TEXT, 0);
return ta;
}