Commit Graph

93 Commits

Author SHA1 Message Date
3dtours 5497bd1256 fix: scale menu on grid canvas, not keybed; erase sweep removed
- Context menu (Scales) appears at right-click position on grid canvas
- Removed erase sweep on right-click (blocked brush after menu close)
- Removed keybed onContextMenu (was wrong position)
- Store menu origin ref so sub-menus don't drift on hover
2026-07-25 12:19:32 +07:00
3dtours 225c44d98a feat: brush-pen scale snap + scale sub-menu hover + keybed swipe
- Brush (pen tool only) draws notes snapped to selected scale
- Scale sub-menus open on hover instead of click
- Keybed: swipe/drag across keys plays notes (mouseenter+mousedown)
- Global mouseup resets keybed drag state
2026-07-25 12:01:42 +07:00
3dtours 51787e055e feat: piano roll velocity scroll, alt+scroll play, scale menu
- Shift+scroll on note: change velocity; on empty space: horizontal scroll
- Alt+scroll: playhead scrub + play notes (was shift+scroll)
- Fix CC lane height drag direction (up=increase, down=decrease)
- Restructure SCALES hierarchy: Diatonic, Pentatonic, Church, Jazz, Asian, Middle Eastern
- Right-click on keybed pitch row opens scale context menu
2026-07-25 11:56:50 +07:00
3dtours e90c929885 fix: clip section sub-track content to section bounds
When section duration is resized shorter, sub-track clips and MIDI
notes were still drawn outside the section's visual rectangle.
Added ctx.save/clip/restore around sub-track rendering.
2026-07-25 11:39:43 +07:00
3dtours e0531be65b fix: redraw canvas when section/MIDI item duration changes on resize
Add setCanvasRedrawCount after updateActiveTracks in resize handler
so WaveformLane re-renders with updated notes/waveform.
2026-07-25 11:33:35 +07:00
3dtours 569ae9ef3e fix: allow drag-move of already-selected notes in piano roll
Previously clicking an already-selected note played preview and returned
early, preventing drag. Now reuses existing selectedNoteIds for drag.
2026-07-25 11:29:09 +07:00
3dtours 7530738444 fix: remove overflow-hidden wrapper causing canvas width mismatch
Div wrapper with overflow-hidden clipped the sticky canvas right edge.
TempoTrackLane now renders like TimelineRuler — Fragment + spacer + canvas.
2026-07-25 11:16:56 +07:00
3dtours a6a12b36a7 fix: use DOM scrollLeftVal for clip/section/MIDI rendering in WaveformLane
6 render positions (clip, marker, section, MIDI, note, selection) were
using React prop scrollLeft instead of DOM scrollLeftVal, causing
grid-vs-item desync during fast auto-scroll.
2026-07-25 11:12:39 +07:00
3dtours c397545383 fix: read scrollLeft from DOM wrapper for canvas sync
Canvas effects now find nearest scrollable ancestor and read
scrollLeft directly, bypassing React prop latency during auto-scroll.
Applies to TempoTrackLane, WaveformLane, TimelineRuler.
2026-07-25 11:09:20 +07:00
3dtours 5bd61516aa fix: PADDING_LEFT=0, tEnd uses CLIP_BUFFER for right buffer
- PADDING_LEFT=0 in all 3 components (grid aligns with clip origin)
- TempoTrackLane/WaveformLane tEnd uses CLIP_BUFFER/zoom so bars render past right edge
- TimelineRuler tEnd uses CLIP_BUFFER/zoom instead of PADDING_LEFT
2026-07-25 11:06:12 +07:00
3dtours 01cd3d1867 fix: allow item drag/resize to snap at column 0
- Removed Math.max(beatSec, ...) clamp from clip drag, section drag, section resize handlers
- Replaced with Math.max(0, ...) so items can snap to time 0
2026-07-25 10:59:17 +07:00
3dtours 8be4ce99e1 fix: tempo track height 40px fixed + clamp selection >= 0
- TempoTrackLane canvas height fixed to 40px, wrapper h-10 shrink-0 overflow-hidden
- selLeft/selRight clamped to Math.max(0, ...)
- rulerAnchorRef/setSelectionStart/setSelectionEnd clamped >= 0
2026-07-25 10:55:46 +07:00
3dtours b410de8855 refactor: zero lead-in, split time ruler + tempo track
- leadInMargin=0, time 0 at left edge, only 8px PADDING_LEFT
- TimelineRuler simplified: time-only labels, 40px height
- TempoTrackLane re-added to layout below time ruler (40px)
- WaveformLane PADDING_LEFT=8/zoom, leadIn=0
2026-07-25 10:48:45 +07:00
3dtours f299b93372 fix: sync TempoTrackLane leadIn with ruler, time labels to top
- Added leadInMargin prop to TempoTrackLane so time-0 aligns with ruler
- Added CLIP_BUFFER to TempoTrackLane grid rendering
- Moved TimelineRuler time labels from bottom (y=40) to top (y=11)
2026-07-25 10:41:13 +07:00
3dtours 70d1abaa7a fix: restore time duration labels on TimelineRuler + TempoTrackLane
Time labels (e.g. '0.00s', '1.00s') were lost in ff44fd4 merge.
Re-added as amber/orange text at ruler bottom, dynamic interval.
2026-07-25 10:37:12 +07:00
3dtours 8372ee1b98 feat: lead-in margin, 0-indexed bars, fix bar number clipping
- Add 1-bar lead-in margin at timeline start (bar 0, time 0s at margin edge)
- Playhead position includes lead-in offset
- Bar numbers now 0-indexed (0, 1, 2...) in ruler and track grid
- Fix bar number clipping: CLIP_BUFFER increased from 200px to
  max(400px, barWidth+200px) so bars past viewport edge render
- All mouse/time handlers account for lead-in margin (ruler, clip
  drag, section drag/resize, context menu, double-click)
- formatBeat returns 0-indexed bar
- Sub-tab ruler has leadInMargin=0 (no lead-in in clip editor)
2026-07-25 10:25:30 +07:00
3dtours ff44fd4b8d feat: merge tempo bar + timebar into beat-based TimelineRuler
Replace old seconds-based ruler (0.00s, 1.00s...) and TempoTrackLane
with unified 48px canvas ruler showing bar:beat grid lines, snap
sub-ticks, and BPM label. WaveformLane grid aligns with ruler
positions — items snap to same beat grid visually.
2026-07-25 10:12:59 +07:00
3dtours 6822f5ed33 fix: WaveformLane grid now matches TempoTrackLane bar:beat structure, bar:beat always shown on tempo lane 2026-07-25 10:05:40 +07:00
3dtours 52ecc38e13 fix: auto-follow 80px both sides for tempo lane bar visibility + 200px buffer 2026-07-25 10:01:56 +07:00
3dtours e56ee5cb0a fix: remove aggressive auto-follow, smooth autoScrollTimeline only, PADDING_RIGHT to show bar numbers past edge, 12-bar buffer 2026-07-25 09:57:00 +07:00
3dtours b746f9659b fix: add snapTime to section/MIDI item drag, followMargin 0.75 for 75% viewport ahead 2026-07-25 09:54:14 +07:00
3dtours 5a152e4951 fix: sync PADDING_LEFT = barDuration in both lanes, add snap '4' (1-bar) 2026-07-25 09:51:07 +07:00
3dtours 7c99fca168 fix: sync PADDING_LEFT = barDuration in both WaveformLane and TempoTrackLane 2026-07-25 09:49:15 +07:00
3dtours 8dc57d4501 fix: sửa lỗi di chuyển items 2026-07-25 09:46:06 +07:00
3dtours 0554934ebe fix: increase followMargin from 120px to 0.4*viewport for bar visibility ahead of dragged item 2026-07-25 09:40:53 +07:00
3dtours dc8b1f59fa fix: revert TempoTrackLane PADDING_LEFT to 2s, remove DOM scrollLeft hack 2026-07-25 09:37:57 +07:00
3dtours 186c5353d4 fix: tempo lane DOM scrollLeft traversal finds overflow-x:auto parent 2026-07-25 09:33:11 +07:00
3dtours e5a563d343 fix: TempoTrackLane reads scrollLeft from DOM instead of React prop 2026-07-25 09:30:42 +07:00
3dtours 6aed5e2ec8 fix: sync bar ruler redraw during drag via canvasRedrawCount 2026-07-25 09:24:31 +07:00
3dtours f1057ab7f2 feat: auto-follow dragged item in viewport for clip/section/MIDI drag and resize 2026-07-25 09:21:19 +07:00
3dtours aa63a310fc fix: brush velocity isolation from CC lane + AGENTs.md compliance 2026-07-25 09:18:41 +07:00
3dtours 893f42c36c fix: velocity start position + shift-scroll play on note start + canvas redraw deps 2026-07-25 08:07:49 +07:00
3dtours 8dee5c8cdb fix: sync ruler/grid/CC lane scroll via ccWrapperRef 2026-07-25 08:01:55 +07:00
3dtours eb805c04a4 fix: piano roll bars extend to fill viewport on zoom out 2026-07-25 07:50:53 +07:00
3dtours 46530c8896 refactor: simplify piano roll zoom - use CSS clip instead of manual grid extension 2026-07-25 07:45:06 +07:00
3dtours b04a76ebfb fix: piano roll zoom/scroll + AI copilot + SF cache + auto-scroll drag 2026-07-25 07:37:27 +07:00
3dtours 1c0d35f69b fix: chỉnh sửa section item dù được lưu lại vẫn là item 2026-07-24 22:15:28 +07:00
3dtours d262f2e778 fix: Chỉnh sửa các hành động của vẽ các note midi trong piano roll tab 2026-07-24 21:25:04 +07:00
3dtours 9a61a1f616 feat: vẽ section item canvas 2026-07-24 20:58:15 +07:00
3dtours b9eb840b11 feat: vẽ nhanh MIDI note 2026-07-24 20:33:01 +07:00
3dtours 17a284ad17 feat: bổ sung phần section-item và section tab 2026-07-24 17:00:22 +07:00
3dtours 6a17e7036c fix: nhãn của soundfont hiển thị sai và không load được instrument 2026-07-23 22:32:19 +07:00
3dtours 1a28ebabee fix: piano roll và main session play 2026-07-23 21:05:26 +07:00
3dtours f0210dd019 fix: main session có thể play midi item 2026-07-23 20:52:50 +07:00
3dtours dac661e6c6 fix: piano roll tab có thể play với soundfont 2026-07-23 20:34:52 +07:00
3dtours a21266736c fix: synth để gắn soundfont cho midi 2026-07-23 19:26:26 +07:00
3dtours 055f351a17 fix: sửa lỗi cho AI thực hiện tạo MIDI 2026-07-23 18:19:12 +07:00
3dtours b46a2c45f2 feat: cài đặt tools cho AI thực hiện tạo MIDI 2026-07-23 17:58:44 +07:00
3dtours 225f23516f feat: thêm soundfont và VSTi cho MIDI 2026-07-23 17:47:46 +07:00
3dtours 0b2382573f fix: thay đổi UX của section, piano roll 2026-07-23 16:26:16 +07:00