diff options
author | Robert Jonsson <spamatica@gmail.com> | 2011-05-15 18:56:00 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2011-05-15 18:56:00 +0000 |
commit | 38988a37365c8772da11f3f41d49e5c1fd083084 (patch) | |
tree | e3995bb749b9a7359466b7aea6b6077ba6b96bd8 /muse2/muse/waveedit | |
parent | 0021af8ef6f76dd4575bc74da2b20431d58a8f7e (diff) |
mouse wheel rework
Diffstat (limited to 'muse2/muse/waveedit')
-rw-r--r-- | muse2/muse/waveedit/waveedit.cpp | 31 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveedit.h | 3 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveview.cpp | 49 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveview.h | 3 |
4 files changed, 81 insertions, 5 deletions
diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp index 2350a2c5..ccfb2730 100644 --- a/muse2/muse/waveedit/waveedit.cpp +++ b/muse2/muse/waveedit/waveedit.cpp @@ -222,6 +222,9 @@ WaveEdit::WaveEdit(PartList* pl) ymag->setFixedWidth(16); connect(view, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int))); connect(ymag, SIGNAL(valueChanged(int)), view, SLOT(setYScale(int))); + connect(view, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn())); + connect(view, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut())); + time->setOrigin(0, 0); mainGrid->setRowStretch(0, 100); @@ -246,6 +249,8 @@ WaveEdit::WaveEdit(PartList* pl) // connect(time, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); connect(view, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(view, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned))); + connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange())); connect(song, SIGNAL(songChanged(int)), SLOT(songChanged1(int))); @@ -498,3 +503,29 @@ void WaveEdit::moveVerticalSlider(int val) ymag->setValue(ymag->value() + val); } + +void WaveEdit::horizontalZoomIn() +{ + int mag = hscroll->mag(); + int zoomlvl = ScrollScale::getQuickZoomLevel(mag); + if (zoomlvl < 23) + zoomlvl++; + + int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); + + hscroll->setMag(newmag); + +} + +void WaveEdit::horizontalZoomOut() +{ + int mag = hscroll->mag(); + int zoomlvl = ScrollScale::getQuickZoomLevel(mag); + if (zoomlvl > 1) + zoomlvl--; + + int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); + + hscroll->setMag(newmag); + +} diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h index 67230897..b4000794 100644 --- a/muse2/muse/waveedit/waveedit.h +++ b/muse2/muse/waveedit/waveedit.h @@ -66,6 +66,9 @@ class WaveEdit : public MidiEditor { void configChanged(); virtual void updateHScrollRange(); + void horizontalZoomIn(); + void horizontalZoomOut(); + signals: void deleted(unsigned long); diff --git a/muse2/muse/waveedit/waveview.cpp b/muse2/muse/waveedit/waveview.cpp index f83ae1d5..0c387f72 100644 --- a/muse2/muse/waveedit/waveview.cpp +++ b/muse2/muse/waveedit/waveview.cpp @@ -25,6 +25,7 @@ #include "waveedit.h" #include "audio.h" #include "gconfig.h" +#include "fastlog.h" bool modifyWarnedYet = false; //--------------------------------------------------------- @@ -381,14 +382,52 @@ void WaveView::viewMousePressEvent(QMouseEvent* event) viewMouseMoveEvent(event); } - +#define WHEEL_STEPSIZE 40 +#define WHEEL_DELTA 120 //--------------------------------------------------------- // wheelEvent //--------------------------------------------------------- -void WaveView::wheelEvent(QWheelEvent* event) - { - emit mouseWheelMoved(event->delta() / 10); - } +void WaveView::wheelEvent(QWheelEvent* ev) +{ + int keyState = ev->modifiers(); + + bool shift = keyState & Qt::ShiftModifier; + bool alt = keyState & Qt::AltModifier; + bool ctrl = keyState & Qt::ControlModifier; + + if (shift) { // scroll vertically + emit mouseWheelMoved(ev->delta() / 10); + + } else if (ctrl) { // zoom horizontally + if (ev->delta()>0) + emit horizontalZoomIn(); + else + emit horizontalZoomOut(); + + } else { // scroll horizontally + int delta = ev->delta() / WHEEL_DELTA; + int xpixelscale = 5*fast_log10(rmapxDev(1)); + + + if (xpixelscale <= 0) + xpixelscale = 1; + + int scrollstep = WHEEL_STEPSIZE * (delta); + ///if (ev->state() == Qt::ShiftModifier) +// if (((QInputEvent*)ev)->modifiers() == Qt::ShiftModifier) + scrollstep = scrollstep / 10; + + int newXpos = xpos + xpixelscale * scrollstep; + + if (newXpos < 0) + newXpos = 0; + + //setYPos(newYpos); + emit horizontalScroll((unsigned)newXpos); + + } + +} //--------------------------------------------------------- // viewMouseReleaseEvent diff --git a/muse2/muse/waveedit/waveview.h b/muse2/muse/waveedit/waveview.h index 3ee0d5f8..c7992952 100644 --- a/muse2/muse/waveedit/waveview.h +++ b/muse2/muse/waveedit/waveview.h @@ -88,6 +88,9 @@ class WaveView : public View { void followEvent(int); void timeChanged(unsigned); void mouseWheelMoved(int); + void horizontalScroll(unsigned); + void horizontalZoomIn(); + void horizontalZoomOut(); public: WaveView(MidiEditor*, QWidget* parent, int xscale, int yscale); |