positionMs changes every poll (~20s), so the old live progress bar/elapsed
time forced a full flash constantly, even mid-song -- this panel has no
partial refresh, so there's no way to show real progress without that.
Now it's an outline + total length only, driven by nothing that changes
while the same track keeps playing. Verified the rendered image is
byte-identical across different positionMs values for the same track.
Also dropped elapsed/elapsed_text/progress_pct from the track dict
entirely now that nothing renders them.
Two separate imbalances:
- Cover art was top-aligned when width-constrained (landscape, cover_size
capped by width*0.5), leaving dead space below it instead of centering
in the available height.
- The text column always started drawing at the very top and let the
source line's bottom-pin create a big empty gap for tracks with
short/sparse metadata -- looked top-heavy and unbalanced.
Text column is now built as (height, draw_fn) pairs first so the total
height is known before committing to a starting y, then centered in the
space above the reserved source-line area.