diag(P4): Bildaufbau messen, Dialogknöpfe skalieren (1.8.8)
Der Aufweckdialog braucht weiterhin ~5 s. Zwei Erklärungsversuche lagen daneben (Fade-Animationen, transparenter Scrim), also wird ab jetzt gemessen statt geraten. - refr_monitor_install() hängt sich über LV_EVENT_REFR_START/READY an die Anzeige und meldet jeden Zeichenzyklus, der 200 ms überschreitet. Im Normalbetrieb bleibt die Konsole still. - Der Aufweckdialog berücksichtigt die Schriftgröße jetzt vollständig: Knöpfe mit font_text() statt geerbter Grundschrift, Breite 150/210/280 je Stufe. Bisher wirkten sie neben dem größeren Text verloren. - Die große Standby-Uhr bleibt bewusst fest: Sie ist auf die Bildschirmhöhe abgestimmt. Beide Panel-Varianten mit arduino-cli gegengebaut. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01STPpZoK3ToDhrcniVqE6MJ
This commit is contained in:
co-authored by
Claude Opus 5
parent
d4d4f2b9d2
commit
33ce2b3ab9
@@ -23,6 +23,7 @@
|
||||
#include <Preferences.h>
|
||||
#include "esp_system.h"
|
||||
#include "display_hal.h"
|
||||
#include "esp_rom_sys.h"
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// Schriftgroesse
|
||||
@@ -3412,6 +3413,33 @@ static void dash_timers_cb(lv_timer_t*) {
|
||||
// sonst greifen sie auf nicht angelegte LVGL-Objekte zu.
|
||||
static bool g_uiReady = false;
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// Zeitmessung fuer langsame Bildaufbauten
|
||||
//
|
||||
// Beim 7-Zoll-Panel dauern manche Vorgaenge spuerbar lange, und aus dem Quelltext allein
|
||||
// ist nicht zu sehen, welcher Teil die Zeit frisst. LVGL meldet Anfang und Ende jedes
|
||||
// Zeichenzyklus - hier wird die Dauer gemessen und nur dann ausgegeben, wenn sie eine
|
||||
// Schwelle ueberschreitet. Im Normalbetrieb bleibt die Konsole still.
|
||||
// ------------------------------------------------------------------------------------
|
||||
#define REFR_WARN_MS 200
|
||||
|
||||
static uint32_t g_refrStart = 0;
|
||||
|
||||
static void refr_start_cb(lv_event_t*) { g_refrStart = lv_tick_get(); }
|
||||
|
||||
static void refr_ready_cb(lv_event_t*) {
|
||||
uint32_t d = lv_tick_get() - g_refrStart;
|
||||
if (d >= REFR_WARN_MS) esp_rom_printf("[UI] Bildaufbau %u ms\n", (unsigned)d);
|
||||
}
|
||||
|
||||
static void refr_monitor_install() {
|
||||
lv_display_t* d = lv_display_get_default();
|
||||
if (!d) return;
|
||||
lv_display_add_event_cb(d, refr_start_cb, LV_EVENT_REFR_START, nullptr);
|
||||
lv_display_add_event_cb(d, refr_ready_cb, LV_EVENT_REFR_READY, nullptr);
|
||||
}
|
||||
|
||||
void ui_init(ProtocolClient* client) {
|
||||
g_client = client;
|
||||
|
||||
@@ -3683,12 +3711,17 @@ void ui_init(ProtocolClient* client) {
|
||||
lv_obj_set_flex_flow(wakeBtns, LV_FLEX_FLOW_ROW);
|
||||
lv_obj_set_flex_align(wakeBtns, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
|
||||
lv_obj_clear_flag(wakeBtns, LV_OBJ_FLAG_SCROLLABLE);
|
||||
// Knopfbreite und -schrift wachsen mit der Schriftgroesse mit; mit fester Breite und
|
||||
// geerbter Grundschrift wirkten die Knoepfe neben dem groesseren Text verloren.
|
||||
const int32_t wakeBtnW = (g_fontStep == FONT_GROSS) ? 280 : (g_fontStep == FONT_MITTEL) ? 210 : 150;
|
||||
lv_obj_t* wakeNo = th_button(wakeBtns, "Abbrechen", COL_CARD2, COL_TEXT);
|
||||
lv_obj_set_width(wakeNo, 150);
|
||||
lv_obj_set_width(wakeNo, wakeBtnW);
|
||||
lv_obj_set_style_text_font(wakeNo, font_text(), 0);
|
||||
lv_obj_add_event_cb(wakeNo, wake_no_cb, LV_EVENT_CLICKED, nullptr);
|
||||
g_wakeNoBtn = wakeNo;
|
||||
lv_obj_t* wakeYes = th_accent_button(wakeBtns, "Aufwecken");
|
||||
lv_obj_set_width(wakeYes, 150);
|
||||
lv_obj_set_width(wakeYes, wakeBtnW);
|
||||
lv_obj_set_style_text_font(wakeYes, font_text(), 0);
|
||||
lv_obj_add_event_cb(wakeYes, wake_yes_cb, LV_EVENT_CLICKED, nullptr);
|
||||
g_wakeYesLbl = lv_obj_get_child(wakeYes, 0); // Label des Knopfs (fuer "Espresso" im Abfrage-Modus)
|
||||
// Zweite Zeile: direkt in die kalte Extraktion aufwecken. Ohne diesen Weg muesste man
|
||||
@@ -3696,6 +3729,7 @@ void ui_init(ProtocolClient* client) {
|
||||
// Nur sichtbar, wenn die S3 die Funktion freigeschaltet meldet (siehe ui_update).
|
||||
g_wakeColdBtn = th_button(wakeCard, "Cold Extraction (Wasser bleibt kalt)", COL_CARD2, COL_ACCENT);
|
||||
lv_obj_set_width(g_wakeColdBtn, LV_PCT(100));
|
||||
lv_obj_set_style_text_font(g_wakeColdBtn, font_text(), 0);
|
||||
lv_obj_add_event_cb(g_wakeColdBtn, wake_cold_cb, LV_EVENT_CLICKED, nullptr);
|
||||
lv_obj_add_flag(g_wakeColdBtn, LV_OBJ_FLAG_HIDDEN);
|
||||
lv_obj_add_flag(g_wakeConfirm, LV_OBJ_FLAG_HIDDEN);
|
||||
@@ -3806,6 +3840,7 @@ void ui_init(ProtocolClient* client) {
|
||||
show_page(PG_DASH);
|
||||
if (g_client) g_client->sendListProfiles();
|
||||
|
||||
refr_monitor_install();
|
||||
g_uiReady = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user