chrome: product-agnostic felitronics::appkit::chrome (toolbar blister + compare/preset) - #15
Merged
Conversation
… 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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 PODChromeTheme(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 aComponentListener.ChromeUnderline.h— the one continuous dipping hairline; self-subscribes to the blister (no manual wiring) + foolproof teardown.FlatButtons.h—FlatItem(public) + an internaldetail::HistoryArrowButton(deliberately not a public rival toIconButton).CompareCell.h/PresetCell.h— the compare (A/B/C/D + undo/redo) and preset cells, driven by a pushed model;CompareModelfield-aligned toCompareHistory; DnD tag namespaced; no product strings.IconButton,Brand.hpalette andBrandHeaderare 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_basicsonly, blister-only shell) proving the composition is à la carte.chrome_selfcontained/— one TU per header, each including its header first-and-alone.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) +
auvalPASS. 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); thechore(release): v0.5.0version bump + tag follow after merge.