feat: piano roll shows all same-track MIDI items notes as active

This commit is contained in:
2026-07-31 09:46:55 +07:00
parent 9b25766fca
commit eb370319cb
3 changed files with 17 additions and 9 deletions
+8 -5
View File
@@ -6256,13 +6256,14 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
ctx.stroke();
}
// Layer 2: Ghost Notes (background reference from other tracks)
// Layer 2: Ghost Notes (same-track = active amber, other tracks = reference)
if (showGhostNotes && sessionSyncMode && ghostLayers.length > 0) {
ghostLayers.forEach(function(layer) {
ctx.save();
ctx.globalAlpha = 0.25;
ctx.fillStyle = layer.track_color || '#888';
ctx.strokeStyle = layer.track_color || '#888';
var isSameTrackLayer = layer.isSameTrack;
ctx.globalAlpha = isSameTrackLayer ? 0.65 : 0.25;
ctx.fillStyle = isSameTrackLayer ? 'rgba(251, 191, 36, 0.55)' : (layer.track_color || '#888');
ctx.strokeStyle = isSameTrackLayer ? 'rgba(245, 158, 11, 0.9)' : (layer.track_color || '#888');
layer.notes.forEach(function(note) {
var snapStart = snapValue !== 'free' ? getSnapBeat(note.relative_start_beat, snapValue) : note.relative_start_beat;
var rawEnd = note.relative_start_beat + note.duration_beats;
@@ -6272,6 +6273,7 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
var w = Math.max(2, (snapEnd - snapStart) * pixelsPerBeat);
var h = NoteHeight - 1;
ctx.fillRect(x, y, w, h);
if (isSameTrackLayer) ctx.strokeRect(x + 0.5, y + 0.5, w - 1, h - 1);
});
ctx.restore();
});
@@ -6422,7 +6424,8 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
}
var layers = [];
ghostLayers.forEach(function(layer) {
if (!activePlayTrackIds || activePlayTrackIds.indexOf(layer.track_id) === -1) return;
var layerIsSameTrack = layer.isSameTrack;
if (!layerIsSameTrack && (!activePlayTrackIds || activePlayTrackIds.indexOf(layer.track_id) === -1)) return;
var trk = (activeTracks || []).find(function(t) { return t.id === layer.track_id; });
layers.push({
trackId: layer.track_id,