FIX-NETATMO: Indoor-Tag-Box zeigt Stationsname + Layout-Fix bei schmalen Sektionen

- _draw_indoor_full: Tag-Box zeigt jetzt Tag (2 Zeichen) + vollen
  Stationsnamen darunter in einer Box statt 30px Tag + separatem
  Namen nebendran (der bei schmalen Sektionen verschwand)
- Tag-Box-Breite ist jetzt dynamisch (1/3 der Sektionsbreite,
  mind. 60px) statt fixe 30px
- name_w Guard (if name_w > 20) verhindert negative Breiten
- Fix analog zu gleichem Problem in _all_indoor() das die
  Hauptstation statt 'M' die ersten 2 Buchstaben zeigt
This commit is contained in:
ki
2026-08-31 03:17:50 +04:00
parent 4cef32b919
commit aeaf8fdb8b
+21 -11
View File
@@ -567,20 +567,30 @@ class Widget(Widget):
draw.line((x + 6, ry + 2, x + w - 6, ry + 2), fill=FG, width=1)
inner_x = x + 6
inner_w = w - 12
# HEAD: Tag | Name (GROSS) | Temp (RIESIG)
# HEAD: Tag-Box (links, zeigt Tag+Name) | Name (separat, nur wenn genug Platz) | Temp (rechts)
# Tag-Box: zeigt Tag (2 Zeichen) + full station name darunter
tag_w = 30
draw.rectangle((inner_x, ry + 2, inner_x + tag_w, ry + 2 + head_h - 4),
tag_full_w = inner_w // 3 # 1/3 der verfuegbaren Breite fuer Tag+Name
tag_full_w = max(tag_full_w, 60) # mindestens 60px
draw.rectangle((inner_x, ry + 2, inner_x + tag_full_w, ry + 2 + head_h - 4),
fill=RED)
f_tag = _fit_size(draw, s["tag"], tag_w - 4, head_h - 8,
candidates=["28", "24", "22", "20"])
# Zeige Tag (2 Zeichen) + full station name darunter
f_tag = _fit_size(draw, s["tag"], tag_full_w - 4, (head_h - 4) // 2,
candidates=["24", "20", "18", "16"])
tw_, th_ = measure(draw, s["tag"], f_tag)
draw.text((inner_x + (tag_w - tw_) // 2, ry + 2 + (head_h - 4 - th_) // 2),
s["tag"], font=f_tag, fill=WHITE)
# Name gross, fett
name_x = inner_x + tag_w + 8
name_w = inner_w - tag_w - 8 - 130
f_name = _fit_size(draw, s["name"], name_w, head_h - 4, candidates=["24", "20", "18", "16"])
text_in_box(draw, s["name"], name_x, ry + 2, name_w, head_h - 4, f_name, FG, "left")
draw.text((inner_x + (tag_full_w - tw_) // 2, ry + 3), s["tag"], font=f_tag, fill=WHITE)
# Name unter dem Tag, kleiner
f_name_tag = _fit_size(draw, s["name"], tag_full_w - 4, (head_h - 4) // 2 - 2,
candidates=["14", "12", "11", "10"])
nw_, nh_ = measure(draw, s["name"], f_name_tag)
draw.text((inner_x + (tag_full_w - nw_) // 2, ry + 3 + (head_h - 4) // 2),
s["name"], font=f_name_tag, fill=WHITE)
# Name (grosse Version) NEBEN der Tag-Box, nur wenn genug Platz
name_x = inner_x + tag_full_w + 8
name_w = inner_w - tag_full_w - 8 - 130
if name_w > 20:
f_name = _fit_size(draw, s["name"], name_w, head_h - 4, candidates=["24", "20", "18", "16"])
text_in_box(draw, s["name"], name_x, ry + 2, name_w, head_h - 4, f_name, FG, "left")
# Temp RIESIG, in Temperatur-Farbe
t = s["data"].get("Temperature")
t_str = f"{t:.1f}°" if t is not None else "—"