From 222749fbdede4d2e2f97a79fc21c7e6abfd6453f Mon Sep 17 00:00:00 2001 From: flamingcow Date: Tue, 18 Aug 2026 19:45:04 -0700 Subject: [PATCH] Liveness spinner: a 30-degree gap punched through the status ring band orbits on the wall clock (one turn per 2 s, all states including link-dead and MEASURING), so a static GOOD panel can never be mistaken for a hung app; one bg-colour stroke capsule at the byte-counter-free clock phase, no new primitives --- ui.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ui.go b/ui.go index 38fb4c3..edae1e2 100644 --- a/ui.go +++ b/ui.go @@ -75,6 +75,10 @@ const ( btnBorder = 2 holdDuration = time.Second + spinGap = math.Pi / 6 + spinPunch = 9 + spinPeriod = 2 * time.Second + versionSpotSide = 200 ) @@ -386,6 +390,12 @@ func (d *display) drawHeader(phy phyDisplay, hv histView, measuring bool, d.fb.roundRect(rx, ry, ringD, ringD, ringD/2, col) d.fb.roundRect(rx+ringEdge, ry+ringEdge, ringD-2*ringEdge, ringD-2*ringEdge, ringD/2-ringEdge, uiBg) + spin := float64(now.UnixNano()%int64(spinPeriod)) / float64(spinPeriod) + cx, cy := float64(rx)+ringD/2, float64(ry)+ringD/2 + cr := (ringD - ringEdge) / 2.0 + a0, a1 := 2*math.Pi*spin-spinGap/2, 2*math.Pi*spin+spinGap/2 + d.fb.stroke(cx+cr*math.Sin(a0), cy-cr*math.Cos(a0), + cx+cr*math.Sin(a1), cy-cr*math.Cos(a1), spinPunch, uiBg) switch { case measuring: case good: