perf(P4): Auch feste Höhen - LVGL markiert sonst das Layout als dirty (1.9.5) #74
@@ -1,3 +1,18 @@
|
|||||||
|
Version 1.9.5:
|
||||||
|
- Die festen Breiten aus 1.9.4 haben nicht gereicht: Auch die HÖHE muss festliegen. LVGL
|
||||||
|
prüft beim Setzen eines Textes, ob sich die Eigengröße der Beschriftung geändert haben
|
||||||
|
könnte - ist eines der beiden Maße frei, gilt das Layout des Elternteils als neu zu
|
||||||
|
berechnen, und das macht die ganze Seite ungültig. Temperaturwerte, Sollwerte, die Werte
|
||||||
|
der unteren Zeile und die Uhrzeit in der Kopfleiste haben jetzt feste Maße in beide
|
||||||
|
Richtungen.
|
||||||
|
- Die Uhrzeit hatte denselben Effekt in der Kopfleiste: Beim Wechsel der Minute wurde die
|
||||||
|
Leiste samt Menü-Knopf neu berechnet. Das erklärt den Bereich „x 6..57, y 2..41", der in
|
||||||
|
fast jedem Durchgang auftauchte.
|
||||||
|
- Zusätzlich meldet die Firmware jetzt, wenn der Inhaltsbereich oder die Dashboard-Seite als
|
||||||
|
Ganzes ungültig gemacht wird. Damit ist zu unterscheiden, ob eine einzelne Beschriftung
|
||||||
|
den Bildaufbau auslöst oder gleich der komplette Bereich - zwei verschiedene Ursachen mit
|
||||||
|
verschiedenen Gegenmitteln.
|
||||||
|
|
||||||
Version 1.9.4:
|
Version 1.9.4:
|
||||||
- Die Messung mit Koordinaten hat den Verursacher benannt: Der ungültige Bereich war
|
- 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
|
„x 0..1279, y 44..719" - also der gesamte Inhalt unterhalb der Kopfleiste, bei jeder
|
||||||
|
|||||||
@@ -1063,6 +1063,11 @@ static lv_obj_t* tempField(lv_obj_t* parent, const char* title, lv_color_t accen
|
|||||||
// jeder Zustandsmeldung. Mit fester Breite bleibt nur die Beschriftung selbst ungueltig.
|
// jeder Zustandsmeldung. Mit fester Breite bleibt nur die Beschriftung selbst ungueltig.
|
||||||
lv_obj_set_width(*big, LV_PCT(100));
|
lv_obj_set_width(*big, LV_PCT(100));
|
||||||
lv_obj_set_style_text_align(*big, LV_TEXT_ALIGN_CENTER, 0);
|
lv_obj_set_style_text_align(*big, LV_TEXT_ALIGN_CENTER, 0);
|
||||||
|
// Auch die HOEHE muss fest sein. LVGL prueft beim Setzen eines Textes, ob sich die
|
||||||
|
// Eigengroesse der Beschriftung geaendert haben koennte - ist eines der beiden Masse
|
||||||
|
// frei, gilt das Layout des Elternteils als neu zu berechnen, und das macht die ganze
|
||||||
|
// Seite ungueltig. Erst mit festen Massen bleibt nur die Beschriftung selbst ungueltig.
|
||||||
|
lv_obj_set_height(*big, lv_font_get_line_height(valueFont) + 6);
|
||||||
// Grosse Zahlen etwas enger setzen. Bei dieser Groesse wirken die Werksabstaende
|
// Grosse Zahlen etwas enger setzen. Bei dieser Groesse wirken die Werksabstaende
|
||||||
// auseinandergezogen; ein paar Pixel weniger binden die Ziffern zu einer Zahl zusammen.
|
// 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);
|
if (valueFont == &lv_font_maven_pro_bold_140) lv_obj_set_style_text_letter_space(*big, -3, 0);
|
||||||
@@ -1074,6 +1079,7 @@ static lv_obj_t* tempField(lv_obj_t* parent, const char* title, lv_color_t accen
|
|||||||
lv_obj_set_style_text_font(*setp, font_text(), 0);
|
lv_obj_set_style_text_font(*setp, font_text(), 0);
|
||||||
lv_obj_set_width(*setp, LV_PCT(100));
|
lv_obj_set_width(*setp, LV_PCT(100));
|
||||||
lv_obj_set_style_text_align(*setp, LV_TEXT_ALIGN_CENTER, 0);
|
lv_obj_set_style_text_align(*setp, LV_TEXT_ALIGN_CENTER, 0);
|
||||||
|
lv_obj_set_height(*setp, lv_font_get_line_height(font_text()) + 6);
|
||||||
|
|
||||||
*bar = lv_bar_create(c);
|
*bar = lv_bar_create(c);
|
||||||
lv_obj_set_size(*bar, LV_PCT(92), 8);
|
lv_obj_set_size(*bar, LV_PCT(92), 8);
|
||||||
@@ -1219,9 +1225,10 @@ 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_color(*val, COL_TEXT, 0);
|
||||||
lv_obj_set_style_text_font(*val, font_title(), 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
|
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
|
// Feste Masse in BEIDE Richtungen - siehe die ausfuehrliche Begruendung in tempField.
|
||||||
// Layout der Zeile neu und macht die ganze Seite ungueltig (siehe tempField).
|
// Zwei Zeilen Platz, weil manche Werte zweizeilig sind ("32,4 g / 36,0 g").
|
||||||
lv_obj_set_width(*val, LV_PCT(100));
|
lv_obj_set_width(*val, LV_PCT(100));
|
||||||
|
lv_obj_set_height(*val, lv_font_get_line_height(font_title()) * 2 + 6);
|
||||||
return card;
|
return card;
|
||||||
}
|
}
|
||||||
// Tipp auf die Statuszeile: Wartung -> Serviceseite, Reinigung -> Sub-Screen,
|
// Tipp auf die Statuszeile: Wartung -> Serviceseite, Reinigung -> Sub-Screen,
|
||||||
@@ -3545,6 +3552,14 @@ static void refr_ready_cb(lv_event_t*) {
|
|||||||
(int)g_refrArea[i].y1, (int)g_refrArea[i].y2);
|
(int)g_refrArea[i].y1, (int)g_refrArea[i].y2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Meldet, wenn ein ganzer Container ungueltig gemacht wird. Damit laesst sich unterscheiden,
|
||||||
|
// ob eine einzelne Beschriftung den Bildaufbau ausloest oder ob gleich der komplette
|
||||||
|
// Inhaltsbereich neu gezeichnet werden soll - zwei verschiedene Ursachen.
|
||||||
|
static void inval_watch_cb(lv_event_t* e) {
|
||||||
|
const char* name = (const char*)lv_event_get_user_data(e);
|
||||||
|
esp_rom_printf("[UI] %s wird komplett ungueltig\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
static void refr_monitor_install() {
|
static void refr_monitor_install() {
|
||||||
lv_display_t* d = lv_display_get_default();
|
lv_display_t* d = lv_display_get_default();
|
||||||
if (!d) return;
|
if (!d) return;
|
||||||
@@ -3662,6 +3677,11 @@ void ui_init(ProtocolClient* client) {
|
|||||||
lv_obj_set_style_text_color(g_clock, COL_TEXT, 0);
|
lv_obj_set_style_text_color(g_clock, COL_TEXT, 0);
|
||||||
lv_obj_set_style_pad_right(g_clock, 10, 0);
|
lv_obj_set_style_pad_right(g_clock, 10, 0);
|
||||||
lv_obj_set_style_text_font(g_clock, font_text(), 0);
|
lv_obj_set_style_text_font(g_clock, font_text(), 0);
|
||||||
|
// Feste Masse, sonst rechnet LVGL beim Wechsel der Minute das Layout der Kopfleiste neu
|
||||||
|
// und macht sie samt Menue-Knopf ungueltig (siehe tempField).
|
||||||
|
lv_obj_set_width(g_clock, 130);
|
||||||
|
lv_obj_set_height(g_clock, lv_font_get_line_height(font_text()) + 4);
|
||||||
|
lv_obj_set_style_text_align(g_clock, LV_TEXT_ALIGN_RIGHT, 0);
|
||||||
|
|
||||||
g_wifiIcon = lv_label_create(header);
|
g_wifiIcon = lv_label_create(header);
|
||||||
lv_label_set_text(g_wifiIcon, LV_SYMBOL_WIFI);
|
lv_label_set_text(g_wifiIcon, LV_SYMBOL_WIFI);
|
||||||
@@ -3950,6 +3970,8 @@ void ui_init(ProtocolClient* client) {
|
|||||||
if (g_client) g_client->sendListProfiles();
|
if (g_client) g_client->sendListProfiles();
|
||||||
|
|
||||||
refr_monitor_install();
|
refr_monitor_install();
|
||||||
|
if (g_content) lv_obj_add_event_cb(g_content, inval_watch_cb, LV_EVENT_INVALIDATE_AREA, (void*)"Inhaltsbereich");
|
||||||
|
if (g_pages[PG_DASH]) lv_obj_add_event_cb(g_pages[PG_DASH], inval_watch_cb, LV_EVENT_INVALIDATE_AREA, (void*)"Dashboard-Seite");
|
||||||
g_uiReady = true;
|
g_uiReady = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user