From 8933c6f1159f6cdad07547c8e5bb2319344a402d Mon Sep 17 00:00:00 2001 From: raw-designs Date: Fri, 4 Sep 2026 12:50:56 +0200 Subject: [PATCH] fix(P4): Punkt sitzt wieder auf dem letzten Messwert (1.11.3) Um den Beschnitt an der rechten Kante zu vermeiden, war der Punkt um eine halbe Punktbreite nach innen gerueckt - die Linie schaute dadurch rechts unter ihm hervor. Statt den Punkt zu verschieben, laesst die Kurvenflaeche jetzt rechts einen schmalen Rand frei. Der Platz gehoert noch zum Diagramm, wird aber nicht mehr bezeichnet: Die Linie endet frueher, der Punkt sitzt genau auf ihrem letzten Wert und wird nicht abgeschnitten. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Wx7wu7uXXgRzp1zHUhtUa6 --- P4_Display_Firmware/Changelog.txt | 6 ++++++ P4_Display_Firmware/config.h | 2 +- P4_Display_Firmware/ui.cpp | 15 ++++++++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/P4_Display_Firmware/Changelog.txt b/P4_Display_Firmware/Changelog.txt index b11daba..f814ef6 100644 --- a/P4_Display_Firmware/Changelog.txt +++ b/P4_Display_Firmware/Changelog.txt @@ -1,3 +1,9 @@ +Version 1.11.3: +- Der Punkt sitzt wieder genau auf dem letzten Messwert, statt eine halbe Punktbreite davor. + Die Linie schaut damit rechts nicht mehr unter ihm hervor. Damit trotzdem nichts + abgeschnitten wird, lässt die Kurvenfläche rechts einen schmalen Rand frei: Der Platz + gehört noch zum Diagramm, wird aber nicht mehr bezeichnet. + Version 1.11.2: - Der Punkt am Kurvenende sitzt jetzt vollständig innerhalb der Kurvenfläche, statt mittig auf dem letzten Messwert und damit halb außerhalb. Rechts wird nichts mehr abgeschnitten. diff --git a/P4_Display_Firmware/config.h b/P4_Display_Firmware/config.h index 24c87cd..9cd6a16 100644 --- a/P4_Display_Firmware/config.h +++ b/P4_Display_Firmware/config.h @@ -126,7 +126,7 @@ // ------------------------------------------------------------------------------------- // Firmware // ------------------------------------------------------------------------------------- -#define DISPLAY_FW_VERSION "1.11.2" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) +#define DISPLAY_FW_VERSION "1.11.3" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) // ------------------------------------------------------------------------------------- // Protokoll diff --git a/P4_Display_Firmware/ui.cpp b/P4_Display_Firmware/ui.cpp index 661a17e..c537e5e 100644 --- a/P4_Display_Firmware/ui.cpp +++ b/P4_Display_Firmware/ui.cpp @@ -1220,15 +1220,16 @@ static void spark_dot_place(lv_obj_t* ch, lv_chart_series_t* ser, lv_obj_t* dot, int32_t w = lv_obj_get_content_width(ch); int32_t h = lv_obj_get_content_height(ch); if (w <= 0 || h <= 0) return; - // Der Punkt bleibt vollstaendig innerhalb der Kurvenflaeche. Saesse seine Mitte genau - // auf dem letzten Messwert - also auf der rechten Kante -, laege seine rechte Haelfte - // ausserhalb und wuerde abgeschnitten. Der Schein darf weiterhin hinausreichen. + // Die Mitte des Punktes sitzt genau auf dem letzten Messwert, also am rechten Rand der + // Kurvenflaeche. Damit seine rechte Haelfte trotzdem nicht abgeschnitten wird, laesst + // das Diagramm rechts einen Rand frei (siehe tempSpark) - dort steht der Punkt, ohne + // dass die Linie unter ihm hervorschaut. int32_t r = SPARK_DOT_SIZE / 2; int32_t y = h - (int32_t)(((int64_t)(v - mn) * h) / (mx - mn)); if (y < r) y = r; if (y > h - r) y = h - r; - if (dot == g_sparkDotW) { g_dotCxW = w - r; g_dotCyW = y; } - else { g_dotCxD = w - r; g_dotCyD = y; } + if (dot == g_sparkDotW) { g_dotCxW = w; g_dotCyW = y; } + else { g_dotCxD = w; g_dotCyD = y; } spark_dot_apply(dot, lv_obj_get_width(dot)); lv_obj_remove_flag(dot, LV_OBJ_FLAG_HIDDEN); } @@ -1319,6 +1320,10 @@ static lv_obj_t* tempSpark(lv_obj_t* parent, lv_color_t col, lv_chart_series_t** lv_obj_set_style_bg_opa(ch, LV_OPA_TRANSP, 0); lv_obj_set_style_border_width(ch, 0, 0); lv_obj_set_style_pad_all(ch, 4, 0); + // Rechts etwas mehr Rand: Dort steht der Punkt auf dem letzten Messwert. Der Platz + // gehoert noch zum Diagramm, wird aber nicht mehr bezeichnet - deshalb ragt weder die + // Linie unter dem Punkt hervor noch wird der Punkt an der Kante beschnitten. + lv_obj_set_style_pad_right(ch, SPARK_DOT_SIZE / 2 + 3, 0); lv_obj_set_style_size(ch, 0, 0, LV_PART_INDICATOR); // keine Punktmarkierungen lv_obj_set_style_line_width(ch, 3, LV_PART_ITEMS); // Runde Enden und Ecken: An den Stuetzpunkten sitzt damit kein spitzer Winkel. -- 2.54.0