feat: legible ReaSampler 9000 editor — bigger knobs, ms time constants, per-ring double-click reset, and an antialiased draw pass

This commit is contained in:
2026-08-01 09:16:30 -04:00
parent 213ecfafe6
commit 7f74b11dce
27 changed files with 859 additions and 285 deletions
+13 -10
View File
@@ -195,6 +195,13 @@ private:
bool mouseDownDeck(const FaceLayout& fl, int x, int y);
void mouseDownBrowse(int w, int h, int x, int y);
// Double-click = reset the radial knob under the pointer to its default. Returns false when
// no knob claims the point, and the caller then replays it as an ordinary mouse-down (the
// platform note at the window class explains why that fall-through is load-bearing).
bool onMouseDoubleClick(int x, int y);
bool doubleClickChrome(const FaceLayout& fl, int x, int y);
bool doubleClickDeck(const FaceLayout& fl, int x, int y);
// Whether deck knob `id` belongs to a group whose enable toggle is off. The ONE predicate
// behind both the Disabled paint and the inert grab, so they cannot disagree.
bool deckKnobDisabled(int id) const;
@@ -335,16 +342,12 @@ private:
void beginMarkerDrag(WaveMarker which, const SetupMarkers& m, std::int64_t frames, int x);
// Deck knobs edit the parameter set's PlaySeconds (play mode + AHDSR; pitch engine + AD
// pitch envelope) — wall-clock seconds, rate-free; the build resolves to frames.
// The normalized [0,1] display value for control `id` given `play` (seconds -> 0..1 over
// a fixed ceiling, levels and fractions as-is, semitone depth centered at 0.5, curve
// exponents over their logarithmic travel).
// pitch envelope) — wall-clock seconds, rate-free; the build resolves to frames. The three
// adapters below are thin int-id wrappers over the pure `deck_values` module, which owns
// what each control's value means; see its header rather than restating the domains here.
double controlValue(int id, const PlaySeconds& play) const;
// Applies a committed control interaction to `play`: a knob's normalized `value` or a
// toggle's `segment` (0/1). Mutates `play` in place.
void applyControl(int id, PlaySeconds& play, double value, int segment) const;
void resetParamControl(int id);
// Applies a knob/toggle interaction to the ONE parameter set for control `id`: ordinary
// controls route through applyControl; kKeyTrack writes the keyTrack scalar (0..200%
@@ -385,8 +388,8 @@ private:
// params edit, no reload).
void applyDeckKnob(int id, double norm);
// The knob's live value label shown during hover/drag: seconds, percents, source
// frames, signed semitones, a voice count, or the master-gain dB.
// The knob's live value label shown during hover/drag: milliseconds, percents, Hz, signed
// semitones, a curve exponent, a voice count, or the master-gain dB.
std::string deckValueLabel(int id) const;
ReaSamplerProcessor* processor_ = nullptr;