summaryrefslogtreecommitdiff
path: root/tools/mq_editor/viewer.js
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-18 17:28:38 +0100
committerskal <pascal.massimino@gmail.com>2026-02-18 17:28:38 +0100
commit37d7601ab64e0dd22ca3e579c3b8332d32c41b9a (patch)
treeacd5ac5889af6ba3a644bbfb23d381a3e4f32843 /tools/mq_editor/viewer.js
parent1eb7f1d06798b3a3455817dfcd1876febd3eca89 (diff)
feat(mq_editor): add new partial, undo/redo
- '+ Partial' button (N key): insert 440Hz/max-amp partial at front - Undo/Redo buttons (Ctrl+Z/Y): JSON snapshot stack, 50 levels - Hooks in delete, mute, curve edits, amp drag, freq drag handoff(Gemini): undo/redo + new-partial added to mq_editor Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'tools/mq_editor/viewer.js')
-rw-r--r--tools/mq_editor/viewer.js2
1 files changed, 2 insertions, 0 deletions
diff --git a/tools/mq_editor/viewer.js b/tools/mq_editor/viewer.js
index 723a585..46876c1 100644
--- a/tools/mq_editor/viewer.js
+++ b/tools/mq_editor/viewer.js
@@ -53,6 +53,7 @@ class SpectrogramViewer {
this.dragState = null; // {pointIndex: 0-3}
this.onPartialSelect = null; // callback(index)
this.onRender = null; // callback() called after each render (for synced panels)
+ this.onBeforeChange = null; // callback() called before any mutation (for undo/redo)
// Setup event handlers
this.setupMouseHandlers();
@@ -569,6 +570,7 @@ class SpectrogramViewer {
companionOff = { dt: curve.t1 - curve.t0, dv: curve.v1 - curve.v0 };
else if (ptIdx === 3)
companionOff = { dt: curve.t2 - curve.t3, dv: curve.v2 - curve.v3 };
+ if (this.onBeforeChange) this.onBeforeChange();
this.dragState = { pointIndex: ptIdx, companionOff };
canvas.style.cursor = 'grabbing';
e.preventDefault();