Retire the zone system: one capture = one parameter set, and re-seam the engine and Sample face into bands
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
// sample_bands.h — THE band-stack allocator for the Sample face: the one module that owns
|
||||
// the editor's vertical inventory. Three bands, top to bottom — CHROME (toolbar + control
|
||||
// row), WAVEFORM (elastic, sized to hold two stacked channel lanes), DECKS (the knob-deck
|
||||
// row). Everything else in the editor fills a band it is handed; nothing else allocates
|
||||
// vertical space, so a band's owner can re-lay its interior without moving its neighbours.
|
||||
|
||||
#include "core/instrument/ui/editor_geometry.h" // Rect
|
||||
|
||||
namespace reasampler::instrument::ui {
|
||||
|
||||
// Shared outer inset every band honours horizontally.
|
||||
inline constexpr int kPad = 8;
|
||||
|
||||
// Chrome band: the toolbar row (title + nav) stacked over the control row (piano strip,
|
||||
// preview, velocity knob, curve button, channel toggle). sample_chrome partitions it.
|
||||
inline constexpr int kTitleHeight = 26;
|
||||
inline constexpr int kChromeRowHeight = 52;
|
||||
|
||||
// Waveform band floor: two stacked lanes plus the seam between them. The band never shrinks
|
||||
// below this — a window too short for it clips the bands beneath instead, so the waveform
|
||||
// stays a usable two-lane surface at every size.
|
||||
inline constexpr int kLaneMinHeight = 74;
|
||||
inline constexpr int kLaneGap = 2;
|
||||
inline constexpr int kWaveformMinHeight = 2 * kLaneMinHeight + kLaneGap;
|
||||
|
||||
// Vertical seam between adjacent bands.
|
||||
inline constexpr int kBandGap = 4;
|
||||
|
||||
// The vertical inventory. Bands never overlap and are returned top-to-bottom; a band may be
|
||||
// empty() on a degenerate window, in which case its owner draws and hit-tests nothing.
|
||||
struct SampleBands {
|
||||
Rect chrome; // full width: toolbar row + control row
|
||||
Rect waveform; // kPad-inset, elastic, >= kWaveformMinHeight
|
||||
Rect decks; // kPad-inset, bottom-anchored, height `deckHeight`
|
||||
};
|
||||
|
||||
// Divide a (w x h) client area into the three bands. `deckHeight` is the knob deck's own
|
||||
// wrapped height (from knob_deck) — the only interior measurement the allocator needs, so
|
||||
// the deck band is exactly as tall as its content. Pure.
|
||||
SampleBands computeSampleBands(int w, int h, int deckHeight);
|
||||
|
||||
// The waveform band's two channel lanes: L above R, separated by kLaneGap. In mono only
|
||||
// `upper` is populated (it takes the whole band) and `lower` is empty — a mono capture has
|
||||
// no second lane to draw, and overlays that ride the waveform draw ONCE across the whole
|
||||
// band in either mode, never per lane.
|
||||
struct WaveformLanes {
|
||||
Rect upper;
|
||||
Rect lower; // empty() in mono
|
||||
};
|
||||
WaveformLanes waveformLanes(const Rect& waveform, bool stereo);
|
||||
|
||||
} // namespace reasampler::instrument::ui
|
||||
Reference in New Issue
Block a user