Skip to content

chrome: legible 12×10 shuffle/repeat icons - #41

Open
BrandonDedolph wants to merge 1 commit into
mainfrom
polish/chrome-icons
Open

chrome: legible 12×10 shuffle/repeat icons#41
BrandonDedolph wants to merge 1 commit into
mainfrom
polish/chrome-icons

Conversation

@BrandonDedolph

Copy link
Copy Markdown
Owner

Summary

  • Replaces the preliminary icons from c2766f7 — at 12×10 they read as mushy blobs (before — see attached compare). Three changes fix it without leaving the SVG pipeline:
    1. Geometry rewritten in output pixel space. ViewBox is now 12×10 (was 14×11), endpoints sit on half-pixel offsets so horizontal tails resolve to a single output row, the shuffle arrows have a deliberate gap at the crossing so the back arrow visibly passes behind, and arrowhead tips bleed past the corner so the V lands on the edge column.
    2. Stroke 1.5 (was 1.4). Picked by sweep: 1.4 reads faint after Box downsample, 1.6+ re-blobs the crossing diagonals.
    3. Pipeline: 16× upsample (was 8×; build cost is irrelevant) and a Python+Pillow fallback in icon_gen.sh for dev machines without ImageMagick. Pillow's Image.BOX is byte-identical to ImageMagick's -filter Box on single-channel alpha.
  • Both SVGs now carry inline design notes explaining the half-pixel discipline + stroke choice, so a future tweak doesn't have to re-derive them.
  • Tests stay 4/4 green.

Test plan

  • cd core && make sim && ./build-sim/sim/core-sim — drive into Now Playing (main menu → Now Playing → SELECT to cycle pages) and confirm the status-bar shuffle/repeat icons read as their symbols (two crossing arrows with visible arrowheads; loop arrows with crisp V tips), not blobs
  • cd core/tools && ./icon_gen.sh — pipeline succeeds whether ImageMagick or Pillow is available; reproduces the arrays committed in core/apps/ui/chrome.c
  • cd core && meson test -C build-sim — 4/4 green (codec-kat, tcdb-reader, tag-mp3, sim-audio-playback)

🤖 Generated with Claude Code

The previous pre-rasterized icons (commit c2766f7) read as mushy blobs
at status-bar size. Three changes fix that without leaving the SVG
pipeline.

Geometry — redraw both icons in a viewBox that matches output pixel
space (12x10 instead of 14x11). Endpoints land on half-pixel offsets
so horizontal tails resolve to a single output row, the shuffle arrows
have a deliberate gap at the crossing so the "back" arrow visibly
passes behind, and arrowhead tips bleed past the corner so the V
registers on the edge row instead of disappearing inside the round
line-cap. Path count drops from 5 to 5 (shuffle) and 4 to 4 (repeat)
but each path is shorter / more pixel-aware.

Stroke — bumped from 1.4 to 1.5 (in the new tight viewBox). 1.4 reads
faint after the box-filter downsample; 1.6+ starts merging the
crossing diagonals back into a blob.

Pipeline — 16x upsample (was 8x) and a Pillow fallback when
ImageMagick isn't installed. Same Box filter; gaussian/lanczos
introduce ringing pixels that chrome_blit_alpha can't compensate for.

Validated against the Now Playing status bar in the sim: shuffle now
reads as two arrows crossing with distinct arrowheads, repeat as two
loop arrows with crisp V tips. meson test -C build-sim still 4/4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant