diff --git a/firmware/components/display-classic.yaml b/firmware/components/display-classic.yaml index 019be54..9889194 100644 --- a/firmware/components/display-classic.yaml +++ b/firmware/components/display-classic.yaml @@ -109,6 +109,12 @@ lvgl: max_value: 90 value: 70 adjustable: true + adv_hittest: true # LVGL's default touch hit-test just uses each widget's full + # bounding square (any topmost widget under the touch point + # wins), which is why the radius difference alone didn't fix + # touch disambiguation. adv_hittest switches to LVGL's precise + # ring-based hit test (see LV_EVENT_HIT_TEST in lv_arc.c), + # which actually respects each arc's own radius. arc_opa: transp # flattened, see dial_bg_arc comment above indicator: arc_color: 0xFF3B30 @@ -129,11 +135,11 @@ lvgl: id: cool_arc align: center y: -20 - width: 360px # smaller radius than heat_arc (400px) so the two rings occupy - height: 360px # different physical pixels — LVGL hit-tests arcs by distance - # from center, and two arcs at the same radius are touch-ambiguous; - # the topmost one (this one, declared last) always wins regardless - # of where along the ring you actually tap + width: 360px # smaller radius than heat_arc (400px) so the two rings are visually + height: 360px # distinct; touch disambiguation itself comes from adv_hittest below, + # not from this size difference alone (a same-radius pair would also + # work correctly with adv_hittest on both, but differing radii keeps + # the two rings visually separable too) start_angle: 315 end_angle: 225 mode: REVERSE @@ -141,6 +147,7 @@ lvgl: max_value: 90 value: 75 adjustable: true + adv_hittest: true # see heat_arc comment above — precise ring-based hit test arc_opa: transp # flattened, see dial_bg_arc comment above indicator: arc_color: 0x0A84FF