From b13e5fdaf1ad2eaccc965769eb0b390ca97b41fc Mon Sep 17 00:00:00 2001 From: raw-designs Date: Thu, 3 Sep 2026 02:56:05 +0200 Subject: [PATCH] =?UTF-8?q?perf(P4):=20Feste=20Breiten=20f=C3=BCr=20Anzeig?= =?UTF-8?q?ewerte=20-=20kein=20Neulayout=20mehr=20(1.9.4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Koordinaten haben den Verursacher benannt: Der invalidierte Bereich war "x 0..1279, y 44..719" - der komplette Content-Container, bei jeder Zustandsmeldung. Grund: Die Wert-Labels hatten LV_SIZE_CONTENT. Ändert sich ihre Breite mit dem Inhalt (92,4 °C -> 100,1 °C), löst LVGL ein Flex-Relayout der ganzen Seite aus und invalidiert sie komplett. Change-checked Text allein reicht also nicht - der Text darf beim Ändern auch die Breite nicht ändern. tempField() und infoCell() setzen die Wert-Labels jetzt auf LV_PCT(100) mit zentriertem Text. Optisch identisch, da die Werte ohnehin mittig standen. Beide Panel-Varianten mit arduino-cli gegengebaut. Co-Authored-By: Claude Opus 5 --- P4_Display_Firmware/Changelog.txt | 12 ++++++++++++ P4_Display_Firmware/ui.cpp | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index a3f510b..1a331e5 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,15 @@ +Version 1.9.4: +- Die Messung mit Koordinaten hat den Verursacher benannt: Der ungültige Bereich war + „x 0..1279, y 44..719" - also der gesamte Inhalt unterhalb der Kopfleiste, bei jeder + Zustandsmeldung. +- Grund: Die Anzeigewerte hatten keine feste Breite. Wächst oder schrumpft eine Beschriftung + mit ihrem Inhalt - etwa von „92,4 °C" auf „100,1 °C" -, rechnet LVGL das Layout der + gesamten Seite neu und macht sie dabei komplett ungültig. Es genügt also nicht, den Text + nur bei echter Änderung zu setzen; er darf beim Ändern auch die Breite nicht verändern. +- Temperaturwerte, Sollwerte und die Werte der unteren Zeile haben jetzt eine feste Breite + mit zentriertem Text. Sichtbar ändert sich dadurch nichts - die Werte standen ohnehin + mittig. + Version 1.9.3: - Fehlerbehebung: Bei geöffnetem Menü war der Seiteninhalt dahinter verschwunden. Der Vorhang des Menüs war in 1.8.7 deckend gemacht worden, um Zeichenlast zu sparen - dabei diff --git a/P4_Display_Firmware/ui.cpp b/P4_Display_Firmware/ui.cpp index 864bcf4..d4f6df0 100644 --- a/P4_Display_Firmware/ui.cpp +++ b/P4_Display_Firmware/ui.cpp @@ -1056,6 +1056,13 @@ static lv_obj_t* tempField(lv_obj_t* parent, const char* title, lv_color_t accen lv_label_set_text(*big, "--.-"); lv_obj_set_style_text_color(*big, COL_TEXT, 0); lv_obj_set_style_text_font(*big, valueFont, 0); + // Feste Breite, Text zentriert. Waechst oder schrumpft eine Beschriftung mit ihrem + // Inhalt - etwa von "92,4 °C" auf "100,1 °C" -, rechnet LVGL das Flex-Layout der + // gesamten Seite neu und macht sie damit komplett ungueltig. Genau das war im + // Messprotokoll als "x 0..1279, y 44..719" zu sehen: der ganze Inhaltsbereich, bei + // jeder Zustandsmeldung. Mit fester Breite bleibt nur die Beschriftung selbst ungueltig. + lv_obj_set_width(*big, LV_PCT(100)); + lv_obj_set_style_text_align(*big, LV_TEXT_ALIGN_CENTER, 0); // Grosse Zahlen etwas enger setzen. Bei dieser Groesse wirken die Werksabstaende // auseinandergezogen; ein paar Pixel weniger binden die Ziffern zu einer Zahl zusammen. if (valueFont == &lv_font_maven_pro_bold_140) lv_obj_set_style_text_letter_space(*big, -3, 0); @@ -1065,6 +1072,8 @@ static lv_obj_t* tempField(lv_obj_t* parent, const char* title, lv_color_t accen lv_label_set_text(*setp, "Soll --.-"); lv_obj_set_style_text_color(*setp, COL_TEXT_DIM, 0); lv_obj_set_style_text_font(*setp, font_text(), 0); + lv_obj_set_width(*setp, LV_PCT(100)); + lv_obj_set_style_text_align(*setp, LV_TEXT_ALIGN_CENTER, 0); *bar = lv_bar_create(c); lv_obj_set_size(*bar, LV_PCT(92), 8); @@ -1210,6 +1219,9 @@ static lv_obj_t* infoCell(lv_obj_t* parent, const char* title, lv_obj_t** val, l lv_obj_set_style_text_color(*val, COL_TEXT, 0); lv_obj_set_style_text_font(*val, font_title(), 0); lv_obj_set_style_text_align(*val, LV_TEXT_ALIGN_CENTER, 0); // fuer mehrzeilige Werte + // Feste Breite: Sonst aendert der Wert mit seinem Inhalt die Breite, LVGL rechnet das + // Layout der Zeile neu und macht die ganze Seite ungueltig (siehe tempField). + lv_obj_set_width(*val, LV_PCT(100)); return card; } // Tipp auf die Statuszeile: Wartung -> Serviceseite, Reinigung -> Sub-Screen,