fix(instrument-ui): distinguish Disabled from Off, add hover cue to mode toggles, close review minors

Adds a hairline outline for Disabled chrome buttons, resolves Hover on the four
mode-selector single-buttons, re-measures the control-surface doc's 1.2 layout
table post-reflow, and adds a structural test pinning every enable/mode toggle
to a derived segment.
This commit is contained in:
2026-08-03 13:43:38 -04:00
parent 450559f155
commit 73c69f689c
8 changed files with 108 additions and 33 deletions
+3 -2
View File
@@ -18,8 +18,9 @@ double clamp(double v, double lo, double hi) { return v < lo ? lo : (v > hi ? hi
constexpr int kEnvModeW = 46;
// The single-button enables ("Envelope" / "Filter" / "Limiter"). One width because they are one
// control grammar. MASTER is the group that BINDS it: its caption row and knob row both measure
// 130, so anything past 64 widens kDeckSpanningW and spends the editor's width budget.
// control grammar. MASTER is the group that BINDS it: its knob row measures 130 (the caption
// row, at this width, measures 118), so anything past 64 widens kDeckSpanningW and spends the
// editor's width budget.
constexpr int kEnableBtnW = 52;
DeckToggleDesc enableButton(DeckParam p) {
+4 -4
View File
@@ -18,7 +18,7 @@ constexpr int kStripBandHeight = 30;
constexpr int kRunGap = 6; // between adjacent items of the toolbar run
constexpr int kChanBtnW = 60; // fits the longer of the two mode labels ("Stereo")
constexpr int kChanSegH = 18;
constexpr int kChanBtnH = 18; // shared height of the Loop and channel-mode single buttons
// If the title slot ever fails to hold its text at the editor's floor, THESE narrow — the
// floor does not move.
constexpr int kLoopBtnW = 52;
@@ -54,14 +54,14 @@ ChromeRects chromeRects(const Rect& chrome, int knobSize) {
r.navBrowse = Rect::ltrb(leftOf(navRight, kNavButtonWidth), navTop, navRight,
navTop + navH);
const int chanTop = topFor(kChanSegH);
const int chanTop = topFor(kChanBtnH);
const int chanRight = leftOf(r.navBrowse.x, kRunGap);
r.channel = Rect::ltrb(leftOf(chanRight, kChanBtnW), chanTop, chanRight,
chanTop + kChanSegH);
chanTop + kChanBtnH);
const int loopRight = leftOf(r.channel.x, kRunGap);
r.loop = Rect::ltrb(leftOf(loopRight, kLoopBtnW), chanTop, loopRight,
chanTop + kChanSegH);
chanTop + kChanBtnH);
const int cellH = std::min(row.height, knobSize + kVelLabelH);
const int cellTop = topFor(cellH);