diff --git a/renderer.py b/renderer.py index 80b13d7..bf96853 100644 --- a/renderer.py +++ b/renderer.py @@ -1,12 +1,23 @@ """Render-Pipeline für das Dashboard. -Unterstützt 3 Display-Designs: - magazine — großes TYPO, schmale Balken, monochrome Akzente - cards — Panel-Hintergründe, Emoji-Icons, vertikale Ränder - kiosk — Daten-first, viele kleine Info-Zellen, kompakt +Unterstützte Display-Designs: + classic — Original flach, weiß, kein UI-Chrome (DEFAULT) + minimal — Schwarz/Weiß, bold, clean, viel Weißraum + minimal_color — Minimal + dezenter Akzent-Strich pro Kategorie + bold — Riesen-Typography, 1px-Rahmen, vollflächig + analog — 2×2-Uhr als Ziffernblatt, Rest clean Panels + magazine — Bold Typography, farbige Akzentstreifen links + cards — iOS-Widget-Style, Emoji-Icons, warme Paneele + kiosk — Dunkel, Daten-first, kompakte Info-Zellen + wireframe — Blueprint-Style, gestrichelte Rahmen, keine Füllungen + bauhaus — Geometrische Primärfarben, blockweise + poster — Farbige Flächen, bold, fast nur Content + retro_lcd — Alte LCD-Uhren-Ästhetik, grüner Hintergrund + glossy — Moderner iOS-Style, Emoji-Icons, Panels + data_board — Kontrollraum-Dashboard, dunkel, invertierte Karten Aufruf: - img = render_design(items, widgets, fonts, design="magazine") + img = render_design(items, widgets, fonts, design="classic") """ from PIL import Image, ImageDraw, ImageFont @@ -20,7 +31,7 @@ CELL_W = DISPLAY_W // COLS CELL_H = DISPLAY_H // ROWS -def render_design(items, widgets, fonts, design="magazine") -> Image.Image: +def render_design(items, widgets, fonts, design="classic") -> Image.Image: fn = { "magazine": _render_magazine, "cards": _render_cards, @@ -35,7 +46,8 @@ def render_design(items, widgets, fonts, design="magazine") -> Image.Image: "minimal_color": _render_minimal_color, "bold": _render_bold, "analog": _render_analog_clock, - }.get(design, _render_minimal) + "classic": _render_classic, + }.get(design, _render_classic) return fn(items, widgets, fonts) @@ -366,6 +378,22 @@ def _render_data_board(items, widgets, fonts) -> Image.Image: return img +# ============================================================================ +# CLASSIC — Original flaches Design +# Weißer Hintergrund, kein UI-Chrome, widget füllt Zelle aus +# Das was auf deinem Referenz-Bild zu sehen ist +# ============================================================================ +def _render_classic(items, widgets, fonts) -> Image.Image: + img = Image.new("RGB", (DISPLAY_W, DISPLAY_H), WHITE) + draw = ImageDraw.Draw(img) + for item, widget in zip(items, widgets): + x, y, w, h = _px(item) + if widget is None: + continue + widget.render(draw, fonts, x + 8, y + 8, w - 16, h - 16) + return img + + # ============================================================================ # MINIMAL — das Referenz-Design # Schwarz/Weiß, bold, clean, viel Weißraum. Kein UI-Chrome.