The Record control draws the Stash mark #63
No reviewers
Labels
No labels
area/agent
area/capture
area/editor
area/geo
area/security
area/sync
area/transcription
area/ui
area/vault
area/voice-memos
blocked
milestone/M1
milestone/M2
milestone/M3
milestone/M4
needs-decision
needs-hardware
p0
p1
p2
type/bug
type/enhancement
type/feature
type/idea
type/infrastructure
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Stash/stash-ios!63
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "m3-60-stash-mark-control"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The Record control in Control Center, on the lock screen and on the Action Button drew
record.circle.fill— the same glyph as every other app's record button. It now draws the Stash moustache. The label is still "Record" and nothing else about the control moves.What changed
The mark is a custom SF Symbol, traced out of the app icon. A control renders its icon as a single-colour template, so the artwork itself cannot be used, and the repository had no glyph. The moustache is thresholded out of
icon-1024.pngand traced to one closed path — a trace rather than a redrawing, so the approved curve stays the approved curve. The waveform is dropped, per the decision on the issue: its bars would break up at the size Control Center draws.A symbol rather than an image set, so the control sizes and tints the mark the way it sized the glyph it replaces. All nine
<weight>-<scale>variants carry the same path; a filled mark has no stroke to thin or thicken, and Xcode refuses a symbol with noRegular-Mglyph, which is all a three-source variable template would have shipped.The catalog is compiled into both targets. The control renders inside
StashWidgets, which cannot reach the app's bundle. The app's own catalog is not what is shared — it holds the 1024 px app icon, which an extension has no use for.Tools/make-stash-mark.pyis the trace, so the derivation is checkable and the mark can be regenerated at another size from one constant. Nothing in the build runs it; it needspotrace. The template geometry it writes against — the baselines, the cap height, the weight columns — is Apple's, read off a template shipped inside SF Symbols.app rather than guessed at.One setting removed.
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColoronStashWidgetsnamed a colour that lives in the app's catalog and has never been compiled into the extension. It was inert while the extension had no catalog at all, and a build warning the momentStashSymbolsgave it one.Worth a decision
That setting being dead means the Live Activity draws in the system tint rather than amethyst, and always has. Making it amethyst means moving
AccentColorinto the shared catalog — a lock screen design change, and not this issue's to make. Happy to do it in its own change.Tests
StashTests/StashMarkTests.swiftloadsStashMarkout of the embeddedStashWidgets.appexand checks it is a symbol image rather than a picture of one. That is this change's one silent failure mode: drop the shared catalog line fromproject.ymland the app still builds, every test still passes, and the control draws its label with no icon. Confirmed by removing that line and watching the tests fail.867 tests pass.
make lintclean. No build warnings.Codex
PLAN.mdcorrected.ControlWidget's rendered label, so a constant asserted against itself would read as coverage and be none. Rejected a test that re-runs the trace: it would needpotraceon every machine and on CI to check an asset the build never regenerates.Validated, and not
Validated in the simulator: the symbol compiles into both targets, loads from the extension bundle, and renders as the moustache at 12, 17, 24, 30 and 40 pt beside
record.circle.fill,waveformand text — which is how its size was chosen. The build is installed on wes-iphone.Not validated: Control Center, the lock screen and the Action Button on the device, and the tinted and accented states the system applies. The issue's legibility criterion lives there — the moustache's tapering tips are its thinnest feature and the smallest Control Center size is where they would go.
Closes #60