diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index e21f6a8..2567af3 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -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: - 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 diff --git a/P4_Display_Firmware/ui.cpp b/P4_Display_Firmware/ui.cpp index 98d4d43..b2d0601 100644 --- a/P4_Display_Firmware/ui.cpp +++ b/P4_Display_Firmware/ui.cpp @@ -3553,8 +3553,16 @@ void ui_init(ProtocolClient* client) { g_drawer = lv_obj_create(scr); lv_obj_set_size(g_drawer, LV_PCT(100), DISP_VER_RES - 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_opa(g_drawer, LV_OPA_50, 0); +#endif lv_obj_set_style_border_width(g_drawer, 0, 0); lv_obj_set_style_pad_all(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()); 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); +#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); +#endif lv_obj_set_style_border_width(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_add_flag(g_wakeConfirm, LV_OBJ_FLAG_CLICKABLE); // Scrim faengt Tipps ab 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_center(wakeCard); lv_obj_set_flex_flow(wakeCard, LV_FLEX_FLOW_COLUMN);