summaryrefslogtreecommitdiff
path: root/internal/display/display.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-14 13:26:48 +0200
committerPaul Buetow <paul@buetow.org>2026-02-14 13:26:48 +0200
commit8a895591820298b9b37d3f6c06c75cdb2d23806b (patch)
tree99f0dc1231cdcbd27294ef930d7beaa677716194 /internal/display/display.go
parent2736004ed92e0260153d95bf57b535b4d04ddc00 (diff)
Fix stale pixels at right edge when toggling bar layoutv0.8.3
drawFrame() only cleared the window on layout changes, leaving remainder pixels (from integer division winW/numBars) with stale content from the double-buffered back buffer. Now clears every frame per SDL2 best practice. Adds comprehensive SDL visual test harness using software renderer with pixel spot-checking for CPU, memory, network bars, and the remainder bug. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/display/display.go')
-rw-r--r--internal/display/display.go16
1 files changed, 6 insertions, 10 deletions
diff --git a/internal/display/display.go b/internal/display/display.go
index 10a0b04..2d1c927 100644
--- a/internal/display/display.go
+++ b/internal/display/display.go
@@ -27,9 +27,6 @@ type runState struct {
extended bool
winW int32
winH int32
- lastNumBars int
- lastWinW int32
- lastWinH int32
prevCPU map[string]collector.CPULine
smoothedCPU map[string]*[9]float64
smoothedMem map[string]*struct{ ramUsed, swapUsed float64 }
@@ -50,7 +47,6 @@ func newRunState(cfg *config.Config, winW, winH int32) *runState {
extended: cfg.Extended,
winW: winW,
winH: winH,
- lastNumBars: -1,
prevCPU: make(map[string]collector.CPULine),
smoothedCPU: make(map[string]*[9]float64),
smoothedMem: make(map[string]*struct{ ramUsed, swapUsed float64 }),
@@ -238,12 +234,12 @@ func drawFrame(renderer *sdl.Renderer, src stats.Source, cfg *config.Config, sta
if barWidth < 1 {
barWidth = 1
}
- if numBars != state.lastNumBars || state.winW != state.lastWinW || state.winH != state.lastWinH {
- renderer.SetDrawColor(0, 0, 0, 255)
- renderer.Clear()
- state.lastNumBars = numBars
- state.lastWinW, state.lastWinH = state.winW, state.winH
- }
+ // Always clear the entire window before drawing. SDL2 uses double-buffering,
+ // so skipping clear leaves stale content in the back buffer. Additionally,
+ // integer division (winW / numBars) can leave remainder pixels at the right
+ // edge that no bar covers.
+ renderer.SetDrawColor(0, 0, 0, 255)
+ renderer.Clear()
drawBars(renderer, snap, cfg, state, barWidth)
}