diff options
author | Tim E. Real <termtech@rogers.com> | 2013-01-26 01:15:35 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2013-01-26 01:15:35 +0000 |
commit | 5fb1cdfe5bdd48406e58441b354fc87d3d3c582e (patch) | |
tree | 8a2defe11002fe54b9d8da10d86a8689787676ae /muse2/muse/waveedit | |
parent | 488e311fb446d129aff962106aead79fa96a849c (diff) |
Feature/fix: Zoom at cursor! Zoom now zooms about cursor.
Diffstat (limited to 'muse2/muse/waveedit')
-rw-r--r-- | muse2/muse/waveedit/wavecanvas.cpp | 9 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveedit.cpp | 63 | ||||
-rw-r--r-- | muse2/muse/waveedit/waveedit.h | 3 |
3 files changed, 29 insertions, 46 deletions
diff --git a/muse2/muse/waveedit/wavecanvas.cpp b/muse2/muse/waveedit/wavecanvas.cpp index 1fa070ec..b9a006eb 100644 --- a/muse2/muse/waveedit/wavecanvas.cpp +++ b/muse2/muse/waveedit/wavecanvas.cpp @@ -845,7 +845,7 @@ void WaveCanvas::wheelEvent(QWheelEvent* ev) bool shift = keyState & Qt::ShiftModifier; bool ctrl = keyState & Qt::ControlModifier; - if (shift) { // scroll vertically + if (shift) { // scroll horizontally int delta = -ev->delta() / WHEEL_DELTA; int xpixelscale = 5*MusECore::fast_log10(rmapxDev(1)); @@ -866,13 +866,8 @@ void WaveCanvas::wheelEvent(QWheelEvent* ev) //setYPos(newYpos); emit horizontalScroll((unsigned)newXpos); - } else if (ctrl) { // zoom horizontally - if (ev->delta()>0) - emit horizontalZoomIn(); - else - emit horizontalZoomOut(); - + emit horizontalZoom(ev->delta()>0, ev->x()); } else { // scroll horizontally emit mouseWheelMoved(ev->delta() / 10); } diff --git a/muse2/muse/waveedit/waveedit.cpp b/muse2/muse/waveedit/waveedit.cpp index ca98e380..17f3de00 100644 --- a/muse2/muse/waveedit/waveedit.cpp +++ b/muse2/muse/waveedit/waveedit.cpp @@ -38,6 +38,9 @@ #include <QResizeEvent> #include <QKeyEvent> #include <QSettings> +#include <QCursor> +#include <QPoint> +#include <QRect> #include "app.h" #include "xml.h" @@ -295,8 +298,7 @@ WaveEdit::WaveEdit(MusECore::PartList* pl) ymag->setFixedWidth(16); connect(canvas, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int))); connect(ymag, SIGNAL(valueChanged(int)), canvas, SLOT(setYScale(int))); - connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn())); - connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut())); + connect(canvas, SIGNAL(horizontalZoom(bool,int)), SLOT(horizontalZoom(bool,int))); time->setOrigin(0, 0); @@ -696,25 +698,21 @@ void WaveEdit::keyPressEvent(QKeyEvent* event) // TODO: New WaveCanvas: Convert some of these to use frames. else if (key == shortcuts[SHRT_ZOOM_IN].key) { - int mag = hscroll->mag(); - int zoomlvl = MusEGui::ScrollScale::getQuickZoomLevel(mag); - if (zoomlvl < MusEGui::ScrollScale::zoomLevels-1) - zoomlvl++; - - int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl); - hscroll->setMag(newmag); - //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag); + int offset = 0; + QPoint cp = canvas->mapFromGlobal(QCursor::pos()); + QPoint sp = mainw->mapFromGlobal(QCursor::pos()); + if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < mainw->height()) + offset = cp.x(); + horizontalZoom(true, offset); return; } else if (key == shortcuts[SHRT_ZOOM_OUT].key) { - int mag = hscroll->mag(); - int zoomlvl = MusEGui::ScrollScale::getQuickZoomLevel(mag); - if (zoomlvl > 1) - zoomlvl--; - - int newmag = MusEGui::ScrollScale::convertQuickZoomLevelToMag(zoomlvl); - hscroll->setMag(newmag); - //printf("mag = %d zoomlvl = %d newmag = %d\n", mag, zoomlvl, newmag); + int offset = 0; + QPoint cp = canvas->mapFromGlobal(QCursor::pos()); + QPoint sp = mainw->mapFromGlobal(QCursor::pos()); + if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < mainw->height()) + offset = cp.x(); + horizontalZoom(false, offset); return; } else if (key == shortcuts[SHRT_GOTO_CPOS].key) { @@ -785,31 +783,22 @@ void WaveEdit::moveVerticalSlider(int val) ymag->setValue(ymag->value() + val); } - -void WaveEdit::horizontalZoomIn() +void WaveEdit::horizontalZoom(bool zoom_in, int pos_offset) { int mag = hscroll->mag(); int zoomlvl = ScrollScale::getQuickZoomLevel(mag); - if (zoomlvl < MusEGui::ScrollScale::zoomLevels-1) + if(zoom_in) + { + if (zoomlvl < MusEGui::ScrollScale::zoomLevels-1) zoomlvl++; - - int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); - - hscroll->setMag(newmag); - -} - -void WaveEdit::horizontalZoomOut() -{ - int mag = hscroll->mag(); - int zoomlvl = ScrollScale::getQuickZoomLevel(mag); - if (zoomlvl > 1) + } + else + { + if (zoomlvl > 1) zoomlvl--; - + } int newmag = ScrollScale::convertQuickZoomLevelToMag(zoomlvl); - - hscroll->setMag(newmag); - + hscroll->setMag(newmag, pos_offset); } //--------------------------------------------------------- diff --git a/muse2/muse/waveedit/waveedit.h b/muse2/muse/waveedit/waveedit.h index f0bcf199..756b4085 100644 --- a/muse2/muse/waveedit/waveedit.h +++ b/muse2/muse/waveedit/waveedit.h @@ -101,8 +101,7 @@ class WaveEdit : public MidiEditor { public slots: void configChanged(); virtual void updateHScrollRange(); - void horizontalZoomIn(); - void horizontalZoomOut(); + void horizontalZoom(bool zoom_in, int pos_offset); void focusCanvas(); signals: |