From b746f9659b3ad8c934ec3f502b3d00469e2537c1 Mon Sep 17 00:00:00 2001 From: 3dtours Date: Sat, 25 Jul 2026 09:54:14 +0700 Subject: [PATCH] fix: add snapTime to section/MIDI item drag, followMargin 0.75 for 75% viewport ahead --- app/static/js/app.jsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/static/js/app.jsx b/app/static/js/app.jsx index 96e5fd9..61bf9d1 100644 --- a/app/static/js/app.jsx +++ b/app/static/js/app.jsx @@ -10225,7 +10225,7 @@ const App = () => { const clampedStart = Math.min(rawStart, marginBar); const newStart = snapTime(clampedStart, snapValueRef.current, bpmRef.current); const itemPx = newStart * zoom; - const followMargin = Math.round(rect.width * 0.4); + const followMargin = Math.round(rect.width * 0.75); if (itemPx > scrollLeft + rect.width - followMargin) { wrapper.scrollLeft = itemPx - rect.width + followMargin; setCanvasRedrawCount(n => n + 1); @@ -10389,9 +10389,10 @@ const App = () => { const beatSec = (60.0 / (parseInt(bpm) || 120)); const secondsPerBar = beatSec * 4; const marginBar = maxDurationRef.current - secondsPerBar; - const newStart = Math.max(beatSec, Math.min(time - drag.clickOffset, marginBar)); + const rawStart = Math.max(beatSec, Math.min(time - drag.clickOffset, marginBar)); + const newStart = snapTime(rawStart, snapValueRef.current, bpmRef.current); const itemPx = newStart * zoom; - const followMargin = Math.round(rect.width * 0.4); + const followMargin = Math.round(rect.width * 0.75); if (itemPx > scrollLeft + rect.width - followMargin) { wrapper.scrollLeft = itemPx - rect.width + followMargin; setCanvasRedrawCount(n => n + 1); @@ -10488,7 +10489,7 @@ const App = () => { : { ...t, midiItems: items }; })); const edgePx = (resize.side === 'left' ? Math.max(0, time) : time) * zoom; - const followMargin = Math.round(rect.width * 0.4); + const followMargin = Math.round(rect.width * 0.75); if (edgePx > scrollLeft + rect.width - followMargin) { wrapper.scrollLeft = edgePx - rect.width + followMargin; setCanvasRedrawCount(n => n + 1);