Raise the editor floor to 1190x680, derived from the deck's declared width budget, and make row membership a property of the group

This commit is contained in:
2026-08-01 18:44:01 -04:00
parent e589addc54
commit abb27f08f2
6 changed files with 159 additions and 23 deletions
+16 -2
View File
@@ -23,8 +23,9 @@
namespace reasampler::instrument::ui {
// Fixed deck metrics, exposed so the shell and tests agree. The cell/knob/label sizes were
// raised together for legibility at high pixel densities; the editor's floor width
// (sample_bands) is what absorbs the wider cells, so the two move as a pair.
// raised together for legibility at high pixel densities. The deck's cell metrics AND its
// group/row composition BOTH drive sample_bands' kEditorMinWidth; none of the three may move
// alone.
inline constexpr int kDeckCellW = 60; // one knob cell
inline constexpr int kDeckCellH = 74;
inline constexpr int kDeckKnobSize = 40; // knob diameter inside the cell
@@ -46,6 +47,19 @@ inline constexpr int kDeckInnerDialSize = 20;
inline constexpr int kDeckGroupH =
kDeckGroupPadY + kDeckCaptionH + kDeckCaptionGap + kDeckCellH + kDeckGroupPadY;
// --- The deck's width budget at the editor's floor ------------------------------------
// DECLARATIONS of budget, not measurements: nothing here is computed from a descriptor, and a
// group inventory that overruns one is what fails. sample_bands' kEditorMinWidth is derived
// from the first two — kDeckRowBlockW + kDeckGroupGap + kDeckSpanningW + 2*kPad — and the
// identity is asserted in test_deck_groups.cpp rather than coded, so the allocator keeps no
// include edge to this header.
inline constexpr int kDeckRowBlockW = 1020; // the block both categorical rows justify inside
inline constexpr int kDeckSpanningW = 142; // the right-anchored spanning deck, outside the block
// The hard ceiling the FLOOR may not exceed; the window itself still grows freely above it.
// The gap between it and kEditorMinWidth is the whole width budget for the life of this
// layout — see instrument-control-surface.md §1.6 before spending any of it.
inline constexpr int kEditorCeilingWidth = 1280;
// A two-segment compact toggle (always 2 segments — the Mono/Stereo grammar). id -1 = absent.
struct DeckToggleDesc {
int id = -1; // shell control id returned by the hit-test; -1 = no toggle