Commit Graph

501 Commits

Author SHA1 Message Date
3dtours bf22679506 fix: set default piano roll tool to 'pen' so brush works
ActiveRollTool default changed from 'select' to 'pen' so clicking
empty space draws notes immediately. Users who switch tool must
switch back to 'pen' to draw.
2026-07-25 12:23:23 +07:00
3dtours 66cb05f26c fix: scale sub-menu as separate floating panel, not shifted main menu
Sub-menu items now render as a standalone fixed-position panel
at origin.x+150, not mixed into the main menu. Main menu stays
at its initial position. Hover to open, click to select scale.
2026-07-25 12:22:18 +07:00
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 ac78d0aa7a fix: sửa lỗi vẽ section item trên main session 2026-07-25 11:41:57 +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 a956ae407c fix: sửa lỗi drag nhóm midi note trong piano roll tab 2026-07-25 11:31:01 +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 0039f85913 fix: sửa lỗi hiển thị hiển thị bar và timeline hoàn thành cho main session 2026-07-25 11:23:46 +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 cb3e8117b2 fix: sửa lỗi hiển thị hiển thị bar và timeline 2026-07-25 10:58:28 +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 e14006ffcc fix: sửa lỗi hiển thị hiển thị bar và timeline grid 3 2026-07-25 10:51:08 +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 db759fc4fc fix: sửa lỗi hiển thị hiển thị bar và timeline grid 2026-07-25 10:33:01 +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 fbbe2c933c docs: update wiki.md with latest changes 2026-07-25 09:58:23 +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 373c018025 fix: sửa lỗi hiển thị bar 2026-07-25 09:52:02 +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 c5c3ec19cc chore: update wiki.md for velocity/redraw fix 2026-07-25 08:08:51 +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 a90a3cfad1 chore: update AGENTs.md with clearer commit instructions 2026-07-25 07:45:25 +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