summaryrefslogtreecommitdiff
path: root/muse2/muse/waveedit
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2013-01-26 01:15:35 +0000
committerTim E. Real <termtech@rogers.com>2013-01-26 01:15:35 +0000
commit5fb1cdfe5bdd48406e58441b354fc87d3d3c582e (patch)
tree8a2defe11002fe54b9d8da10d86a8689787676ae /muse2/muse/waveedit
parent488e311fb446d129aff962106aead79fa96a849c (diff)
Feature/fix: Zoom at cursor! Zoom now zooms about cursor.
Diffstat (limited to 'muse2/muse/waveedit')
-rw-r--r--muse2/muse/waveedit/wavecanvas.cpp9
-rw-r--r--muse2/muse/waveedit/waveedit.cpp63
-rw-r--r--muse2/muse/waveedit/waveedit.h3
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: