fix(P4): Aufweckdialog sofort statt nach fünf Sekunden (1.8.7) #67

Merged
thomas merged 1 commits from fix/vorhaenge-deckend-und-dialogbreite into main 2026-09-03 00:47:35 +02:00
2 changed files with 34 additions and 1 deletions
+13
View File
@@ -1,3 +1,16 @@
Version 1.8.7:
- Vom Fingertipp auf die Standby-Uhr bis zum Aufweckdialog vergingen rund fünf Sekunden mit
schwarzem Bildschirm. Ursache war der halbdurchsichtige Vorhang, den der Dialog über den
ganzen Bildschirm legt: Dafür muss LVGL einen Vollbild-Zwischenpuffer anlegen und die
gesamte Fläche mischen - bei 1280x720 in 24 Bit die teuerste Operation überhaupt.
- Der Vorhang ist auf dem Waveshare-Panel jetzt deckend. Verloren geht dabei nichts: Im
Standby liegt dahinter ohnehin nur Schwarz.
- Aus demselben Grund ist auch der Vorhang des Menüs deckend, in einem dunklen Ton. Auf
dunklem Grund sieht das praktisch genauso aus wie halbdurchsichtig, spart aber dieselbe
Mischarbeit. Die JC-Panels behalten in beiden Fällen die Transparenz.
- Der Aufweckdialog wird mit größerer Schrift auch breiter (420 / 640 / 900 Pixel), damit
der Text nicht an unglücklichen Stellen umbricht.
Version 1.8.6: Version 1.8.6:
- Die Uhrzeit verschwindet nicht mehr, wenn die Hauptplatine ihre Zeit gerade neu abgleicht. - Die Uhrzeit verschwindet nicht mehr, wenn die Hauptplatine ihre Zeit gerade neu abgleicht.
Der P4 merkt sich die zuletzt empfangene Uhrzeit und zählt zwischen den Meldungen selbst Der P4 merkt sich die zuletzt empfangene Uhrzeit und zählt zwischen den Meldungen selbst
+21 -1
View File
@@ -3553,8 +3553,16 @@ void ui_init(ProtocolClient* client) {
g_drawer = lv_obj_create(scr); g_drawer = lv_obj_create(scr);
lv_obj_set_size(g_drawer, LV_PCT(100), DISP_VER_RES - 44); lv_obj_set_size(g_drawer, LV_PCT(100), DISP_VER_RES - 44);
lv_obj_set_pos(g_drawer, 0, 44); lv_obj_set_pos(g_drawer, 0, 44);
#if JC_PANEL_TYPE == WS_PANEL_7H
// Deckend statt halbdurchsichtig - aus demselben Grund wie beim Aufweckdialog: Ein
// durchscheinender Vorhang laesst LVGL die ganze Flaeche darunter mitzeichnen und
// mischen. Auf dunklem Grund sieht ein dunkles Deckend praktisch genauso aus.
lv_obj_set_style_bg_color(g_drawer, lv_color_hex(0x0d0d0d), 0);
lv_obj_set_style_bg_opa(g_drawer, LV_OPA_COVER, 0);
#else
lv_obj_set_style_bg_color(g_drawer, lv_color_hex(0x000000), 0); lv_obj_set_style_bg_color(g_drawer, lv_color_hex(0x000000), 0);
lv_obj_set_style_bg_opa(g_drawer, LV_OPA_50, 0); lv_obj_set_style_bg_opa(g_drawer, LV_OPA_50, 0);
#endif
lv_obj_set_style_border_width(g_drawer, 0, 0); lv_obj_set_style_border_width(g_drawer, 0, 0);
lv_obj_set_style_pad_all(g_drawer, 0, 0); lv_obj_set_style_pad_all(g_drawer, 0, 0);
lv_obj_set_style_radius(g_drawer, 0, 0); lv_obj_set_style_radius(g_drawer, 0, 0);
@@ -3634,13 +3642,25 @@ void ui_init(ProtocolClient* client) {
g_wakeConfirm = lv_obj_create(lv_layer_top()); g_wakeConfirm = lv_obj_create(lv_layer_top());
lv_obj_set_size(g_wakeConfirm, LV_PCT(100), LV_PCT(100)); lv_obj_set_size(g_wakeConfirm, LV_PCT(100), LV_PCT(100));
lv_obj_set_style_bg_color(g_wakeConfirm, lv_color_hex(0x000000), 0); lv_obj_set_style_bg_color(g_wakeConfirm, lv_color_hex(0x000000), 0);
#if JC_PANEL_TYPE == WS_PANEL_7H
// Deckend statt halbtransparent. Ein durchscheinender Vorhang ueber den ganzen
// Bildschirm zwingt LVGL, einen Vollbild-Zwischenpuffer anzulegen und die gesamte
// Flaeche zu mischen - bei 1280x720 in 24 Bit dauerte das rund fuenf Sekunden, in
// denen nach dem Fingertipp nur der schwarze Standby-Bildschirm zu sehen war.
// Verloren geht dabei nichts: Dahinter liegt im Standby ohnehin nur Schwarz.
lv_obj_set_style_bg_opa(g_wakeConfirm, LV_OPA_COVER, 0);
#else
lv_obj_set_style_bg_opa(g_wakeConfirm, LV_OPA_70, 0); lv_obj_set_style_bg_opa(g_wakeConfirm, LV_OPA_70, 0);
#endif
lv_obj_set_style_border_width(g_wakeConfirm, 0, 0); lv_obj_set_style_border_width(g_wakeConfirm, 0, 0);
lv_obj_set_style_radius(g_wakeConfirm, 0, 0); lv_obj_set_style_radius(g_wakeConfirm, 0, 0);
lv_obj_clear_flag(g_wakeConfirm, LV_OBJ_FLAG_SCROLLABLE); lv_obj_clear_flag(g_wakeConfirm, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_add_flag(g_wakeConfirm, LV_OBJ_FLAG_CLICKABLE); // Scrim faengt Tipps ab lv_obj_add_flag(g_wakeConfirm, LV_OBJ_FLAG_CLICKABLE); // Scrim faengt Tipps ab
lv_obj_t* wakeCard = th_card(g_wakeConfirm); lv_obj_t* wakeCard = th_card(g_wakeConfirm);
lv_obj_set_width(wakeCard, 420); // Breite waechst mit der gewaehlten Schriftgroesse mit. Bei fester Breite brach der
// Text in der Stufe Gross an unguenstigen Stellen um.
lv_obj_set_width(wakeCard, (g_fontStep == FONT_GROSS) ? 900
: (g_fontStep == FONT_MITTEL) ? 640 : 420);
lv_obj_set_height(wakeCard, LV_SIZE_CONTENT); lv_obj_set_height(wakeCard, LV_SIZE_CONTENT);
lv_obj_center(wakeCard); lv_obj_center(wakeCard);
lv_obj_set_flex_flow(wakeCard, LV_FLEX_FLOW_COLUMN); lv_obj_set_flex_flow(wakeCard, LV_FLEX_FLOW_COLUMN);