Skip to content

chrome: product-agnostic felitronics::appkit::chrome (toolbar blister + compare/preset) - #15

Merged
tsyma merged 1 commit into
mainfrom
feat/chrome
Jul 14, 2026
Merged

chrome: product-agnostic felitronics::appkit::chrome (toolbar blister + compare/preset)#15
tsyma merged 1 commit into
mainfrom
feat/chrome

Conversation

@tsyma

@tsyma tsyma commented Jul 14, 2026

Copy link
Copy Markdown
Member

Adds felitronics::appkit::chrome — the FabFilter-style top-toolbar "chrome" (brand blister that bulges out of a flat toolbar band, the continuous dipping underline, the A/B/C/D compare cell + undo/redo, the preset cell, and the flat primitives), extracted from TabbyEQ as a product-agnostic, header-only library layer.

Path B (locked in the Ф2 design round): geometry copied byte-verbatim, but the contracts were cleaned before the tag (a tag is forever).

Headers (include/felitronics/appkit/chrome/)

  • ChromeMetrics.h — bar geometry + the flat POD ChromeTheme (7 colours, by value, makeDefaultDark() factory, default-seeded so a bare {} is a usable dark theme).
  • ChromeBar.h — the RigidCenter/RightPinned/LeftPinned zone layout (+ a gap≥0 clamp and a RightPinned-overflow guard for no-min-window consumers).
  • BrandBlister.h — the blister FRAME; BlisterMark::preferredContentWidth (frame owns skirt/pad + the ceiling rounding contract); mark edge hardened as a ComponentListener.
  • ChromeUnderline.h — the one continuous dipping hairline; self-subscribes to the blister (no manual wiring) + foolproof teardown.
  • FlatButtons.hFlatItem (public) + an internal detail::HistoryArrowButton (deliberately not a public rival to IconButton).
  • CompareCell.h / PresetCell.h — the compare (A/B/C/D + undo/redo) and preset cells, driven by a pushed model; CompareModel field-aligned to CompareHistory; DnD tag namespaced; no product strings.

IconButton, Brand.h palette and BrandHeader are untouched — existing consumers (orbit-capture / nam-capture) keep building.

Tests

  • ChromeFalsifyTests.cpp — headless render + pixel-count + direct-gesture falsification (accent frame ↔ active, edited dot, theme seam, C6 width contract, gap clamp, foolproof teardown, popup gate, DnD namespace).
  • ChromeMinimalConsumer.cpp — a separate minimal TU (one header first, juce_gui_basics only, blister-only shell) proving the composition is à la carte.
  • chrome_selfcontained/ — one TU per header, each including its header first-and-alone.
  • Rich composition added to ConsumerCompileCheck.cpp.

All under juce_recommended_warning_flags + -Werror. 17/17 ctest green, 0 warnings.

Verified end-to-end: TabbyEQ consumes this layer locally and renders pixel-identical to its pre-extraction toolbar (0 differing pixels at multiple widths) + auval PASS. Four-LLM design crew + light code crew, converged clean.

Targets the v0.5.0 release (bundled with the LevelMeter green-zone feature already on main); the chore(release): v0.5.0 version bump + tag follow after merge.

… TabbyEQ, path B)

Ф2 of the chrome→appkit arc: the FabFilter-style top-toolbar chrome (brand
blister + dipping underline + compare/preset cells + flat primitives) copied
from TabbyEQ src/chrome into a product-agnostic, header-only library layer
felitronics::appkit::chrome. Geometry byte-verbatim; contracts cleaned before
the tag (path B):

- ChromeTheme: complete 7-field POD held by value, default-seeded + makeDefaultDark()
- BlisterMark::preferredContentWidth (frame owns skirt/pad; ceiling rounding contract)
- ChromeUnderline self-subscribes (ComponentListener) + foolproof teardown
- BrandBlister mark edge hardened the same way (C7 symmetry)
- CompareModel pruned + field-aligned to appkit::CompareHistory; clipboard/leaks removed
- flat primitives take a ChromeTheme (FlatItem public; undo/redo arrow internal)
- DnD tag namespaced; product comments scrubbed
- ChromeBar even-gap clamp + RightPinned overflow guard for no-min-window consumers

Tests: ChromeFalsifyTests (headless render + pixel counts + direct gestures),
ChromeMinimalConsumer (a-la-carte minimal TU), per-header self-containment gate,
rich composition in ConsumerCompileCheck. 17/17 ctest green under -Werror +
juce_recommended_warning_flags.
@tsyma
tsyma merged commit 44132ac into main Jul 14, 2026
3 checks passed
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