fix: drag-move delta relative to clicked note, not first selected

This commit is contained in:
2026-07-31 08:20:15 +07:00
parent e1550c8ffe
commit 3cac617aff
2 changed files with 7 additions and 8 deletions
+5 -6
View File
@@ -6613,7 +6613,8 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
idx: clickedNoteIdx,
startOffsetBeat: beat - clickedNote.start_beat,
startOffsetPitch: pitch,
selectedNotesOffset: selectedNotesOffset
selectedNotesOffset: selectedNotesOffset,
clickedOriginalStartBeat: clickedNote.start_beat
});
} else {
// Click on empty space with pen tool: DRAW a new note (brush mode with visitedPitches)
@@ -6881,11 +6882,9 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
};
}));
} else if (draggedNote.mode === 'move') {
const firstOffset = draggedNote.selectedNotesOffset && draggedNote.selectedNotesOffset[0];
if (!firstOffset) return;
const firstNote = notes.find(n => n.id === firstOffset.id);
if (!firstNote) return;
const deltaBeat = getSnapBeat(beat - draggedNote.startOffsetBeat, snapValue) - firstOffset.originalStartBeat;
const refOrigStart = draggedNote.clickedOriginalStartBeat;
if (refOrigStart === undefined) return;
const deltaBeat = getSnapBeat(beat - draggedNote.startOffsetBeat, snapValue) - refOrigStart;
// Clamp so no note goes past beat 0
const minOrigStart = Math.min(...draggedNote.selectedNotesOffset.map(o => o.originalStartBeat));
const clampedDeltaBeat = minOrigStart + deltaBeat < 0 ? -minOrigStart : deltaBeat;