From 361e29c776e325b7c26379fcc5527466c9fa3696 Mon Sep 17 00:00:00 2001 From: Werner Schweer Date: Fri, 9 Jun 2006 09:07:53 +0000 Subject: fix controller editing --- muse/muse/ctrl.cpp | 4 ++-- muse/muse/ctrl/ctrleditor.cpp | 11 +++++++---- muse/muse/ctrl/ctrleditor.h | 3 +++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/muse/muse/ctrl.cpp b/muse/muse/ctrl.cpp index 4fc2514d..12f8a2e6 100644 --- a/muse/muse/ctrl.cpp +++ b/muse/muse/ctrl.cpp @@ -331,7 +331,7 @@ void Ctrl::write(Xml& xml) int Ctrl::val2pixelR(CVal val, int maxpixel) { if (_type & INT) - return maxpixel - (maxpixel * (val.i - min.i) / (max.i-min.i)); + return maxpixel - ((maxpixel * (val.i - min.i) + (max.i-min.i)/2) / (max.i-min.i)); else return maxpixel - lrint(float(maxpixel) * (val.f - min.f) / (max.f-min.f)); } @@ -356,7 +356,7 @@ CVal Ctrl::pixel2val(int pixel, int maxpixel) // pixel, maxpixel, _type & INT, min.i, max.i); CVal rv; if (_type & INT) { - rv.i = pixel * (max.i - min.i) / maxpixel + min.i; + rv.i = (pixel * (max.i - min.i) + (maxpixel+min.i)/2) / maxpixel + min.i; if (rv.i < min.i) rv.i = min.i; else if (rv.i > max.i) diff --git a/muse/muse/ctrl/ctrleditor.cpp b/muse/muse/ctrl/ctrleditor.cpp index ec12f872..e0e1db3b 100644 --- a/muse/muse/ctrl/ctrleditor.cpp +++ b/muse/muse/ctrl/ctrleditor.cpp @@ -212,6 +212,7 @@ void CtrlEditor::mousePress(const QPoint& pos, int button) ciCtrlVal e = ctrl()->upper_bound(pos2.time(tt)); for (ciCtrlVal i = s; i != e; ++i) { int yy = ctrl()->val2pixelR(i->second, wh); + startY = yy; if ((yy >= (y-HANDLE2)) && (yy < (y + HANDLE2))) { if (tt == AL::TICKS) selected.setTick(i->first); @@ -222,8 +223,10 @@ void CtrlEditor::mousePress(const QPoint& pos, int button) song->removeControllerVal(ctrlTrack(), ctrl()->id(), i->first); dragy = -1; } - else + else { dragy = yy; + dragYoffset = dragy - y; + } tc()->widget()->update(); break; } @@ -302,8 +305,8 @@ void CtrlEditor::mouseRelease() if (ctrl()->id() == CTRL_VELOCITY || ctrl()->id() == CTRL_SVELOCITY) song->endUndo(SC_EVENT_MODIFIED); else { - if (dragy != -1) { - int wh = cheight(); + if (dragy != -1 && dragy != startY) { + int wh = cheight(); CVal val = ctrl()->pixel2val(dragy, wh); // modify controller: song->addControllerVal(ctrlTrack(), ctrl(), selected, val); @@ -371,7 +374,7 @@ void CtrlEditor::mouseMove(const QPoint& pos) } else { if (dragy != -1) - dragy = pos.y(); + dragy = pos.y() + dragYoffset; } tc()->widget()->update(); } diff --git a/muse/muse/ctrl/ctrleditor.h b/muse/muse/ctrl/ctrleditor.h index e066431f..d0f2152e 100644 --- a/muse/muse/ctrl/ctrleditor.h +++ b/muse/muse/ctrl/ctrleditor.h @@ -34,6 +34,9 @@ class Track; class CtrlEditor { bool _drawCtrlName; int dragx, dragy; + int dragYoffset; + int startY; + int lselected; // cached pixel position of current value AL::Pos selected; // current selected controller value -- cgit v1.2.3