diff options
Diffstat (limited to 'tools/mq_editor')
| -rw-r--r-- | tools/mq_editor/viewer.js | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tools/mq_editor/viewer.js b/tools/mq_editor/viewer.js index 2575cac..c99d344 100644 --- a/tools/mq_editor/viewer.js +++ b/tools/mq_editor/viewer.js @@ -563,7 +563,13 @@ class SpectrogramViewer { if (this.selectedPartial >= 0 && this.selectedPartial < this.partials.length) { const ptIdx = this.hitTestControlPoint(x, y, this.partials[this.selectedPartial]); if (ptIdx >= 0) { - this.dragState = { pointIndex: ptIdx }; + const curve = this.partials[this.selectedPartial].freqCurve; + let companionOff = null; + if (ptIdx === 0) + 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 }; + this.dragState = { pointIndex: ptIdx, companionOff }; canvas.style.cursor = 'grabbing'; e.preventDefault(); return; @@ -585,6 +591,11 @@ class SpectrogramViewer { const i = this.dragState.pointIndex; partial.freqCurve['t' + i] = t; partial.freqCurve['v' + i] = v; + if (this.dragState.companionOff) { + const off = this.dragState.companionOff; + if (i === 0) { partial.freqCurve.t1 = t + off.dt; partial.freqCurve.v1 = v + off.dv; } + else { partial.freqCurve.t2 = t + off.dt; partial.freqCurve.v2 = v + off.dv; } + } this.render(); e.preventDefault(); return; |
