fix: close review findings on spline EGs — engine, codec, and popup/overlay UI grammar
Live pitch depth, Gate/Spline enable-rule agreement, inert kTrigLength, NaN wire guards, hard-flag-tail corruption no longer wipes the record, RT/cold spline tie-break, retired alt-click, marker-shadow fix, plus new test coverage.
This commit is contained in:
@@ -112,17 +112,22 @@ void ReaSamplerEditor::onMouseUp(int x, int y) {
|
||||
invalidate();
|
||||
return;
|
||||
}
|
||||
// Drag-off delete: releasing a curve-node drag well outside the box removes the dragged
|
||||
// point (deletePoint refuses the two endpoints, so an endpoint drag-off is a plain move —
|
||||
// its amp keeps the last clamped drag value).
|
||||
if (kind == DragKind::kCurveNode && curveIdx >= 0) {
|
||||
// Drag-off delete: releasing a curve-node drag well outside its box removes the dragged
|
||||
// point on EITHER spline surface — the popup's kCurveNode and the overlay's kSplineNode
|
||||
// share this grammar, not just their click grammar (deletePoint refuses the two endpoints,
|
||||
// so an endpoint drag-off is a plain move — its amp keeps the last clamped drag value).
|
||||
if ((kind == DragKind::kCurveNode || kind == DragKind::kSplineNode) && curveIdx >= 0) {
|
||||
const bool off = x < curveRect.x - kCurveDragOffMargin ||
|
||||
x > curveRect.right() + kCurveDragOffMargin ||
|
||||
y < curveRect.y - kCurveDragOffMargin ||
|
||||
y > curveRect.bottom() + kCurveDragOffMargin;
|
||||
if (off) {
|
||||
editedCurve().deletePoint(static_cast<std::size_t>(curveIdx));
|
||||
hover_ = HoverTarget{}; // stale kCurveNode index would light a shifted node
|
||||
if (kind == DragKind::kCurveNode) {
|
||||
editedCurve().deletePoint(static_cast<std::size_t>(curveIdx));
|
||||
} else {
|
||||
splineFor(overlayEnv_).deletePoint(static_cast<std::size_t>(curveIdx));
|
||||
}
|
||||
hover_ = HoverTarget{}; // stale node index would light a shifted node
|
||||
}
|
||||
}
|
||||
commitAndReload();
|
||||
|
||||
Reference in New Issue
Block a user