The pre-#7595 add, remove and delete icons were filled shapes with a black
outline and no disc. A tint cannot bring that back, and the badge disc is a
different icon language, so add a third value to the existing style axis.
IconStyle::Sticker draws the sentinel glyph twice: a near-black rim at the
band width plus one rim on each side, then the tone pass clipped to the glyph
and filled with a vertical gradient. Both treatments keep the disabled
fallback to the line glyph.
The fill rule moves into theme_icon_fill: the semantic tones are tuned for
text, so a filled shape gives its tone a saturation floor, and a dark-scheme
tone is pulled down rather than up. The badge disc uses the same rule, so a
badge and a sticker next to each other carry the same green or red instead of
a pale disc beside a saturated glyph.
resolveSvgStrokeWidth() moves the stroke-width rewrite into
libcockatrice_utility so the badge and the sticker share it; the badge's local
copy is gone.
The sticker is opted into at 16 call sites: increment, decrement and
remove_row in the deck editor, settings pages, token dialog, server dialogs
and replay/deck storage tabs. The clear-filter button keeps the old X glyph
(icons/remove_row) it had before #7595, because its trash-can replacement has
no pre-#7595 counterpart and the sticker stroke closes the handle at toolbar
sizes.
Qt's SVG renderer has no CSS cascade, so a `currentColor` fill has to be
substituted before the bytes reach QSvgRenderer.
- Match and replace on bytes: both the sentinel and the replacement are
ASCII, so the document never goes through a UTF-16 round trip, and files
that are not valid UTF-8 survive unchanged.
- Document that the match is a plain case-insensitive substring, so an
identifier that merely starts with the sentinel gets rewritten too.
Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>