Report the instrument's automatable parameters to the host under a frozen id table, in signal-flow order, with real units
42 of 44 ids issued: pitch key-track and Trigger length stay reserved pending a live path. Master gain reclassified Live — it never reloaded.
This commit is contained in:
@@ -85,6 +85,13 @@ void ReaSamplerEditor::onMouseUp(int x, int y) {
|
||||
invalidate();
|
||||
}
|
||||
if (drag_ == DragKind::kNone) return;
|
||||
// Stack RAII rather than a call at each exit: this handler leaves through several early
|
||||
// returns, and the release commit's final performEdit must land INSIDE the bracket the grab
|
||||
// opened while the bracket itself may not outlive the handler on any path.
|
||||
struct GestureClose {
|
||||
ReaSamplerProcessor* p;
|
||||
~GestureClose() { if (p) p->endParamGesture(); }
|
||||
} gestureClose{processor_};
|
||||
const DragKind kind = drag_;
|
||||
const int paramId = dragParamId_;
|
||||
const int curveIdx = curvePointIndex_;
|
||||
@@ -107,9 +114,7 @@ void ReaSamplerEditor::onMouseUp(int x, int y) {
|
||||
// directly. Voice count: the label/needle tracks live during the drag but the engine
|
||||
// rebuild (setVoiceCount) fires ONCE here on release — not per integer step.
|
||||
const bool deckTransient =
|
||||
kind == DragKind::kDeckKnob &&
|
||||
(paramId == -2 || paramId == static_cast<int>(ParamControl::kVoiceCount) ||
|
||||
paramId == static_cast<int>(ParamControl::kMasterGain));
|
||||
kind == DragKind::kDeckKnob && deckKnobIsProcessorSide(paramId);
|
||||
if (kind == DragKind::kScrollThumb || deckTransient) {
|
||||
// Commit the voice count now that the drag is complete (one rebuild per full drag).
|
||||
if (deckTransient && processor_ &&
|
||||
|
||||
Reference in New Issue
Block a user