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/arranger | |
parent | 488e311fb446d129aff962106aead79fa96a849c (diff) |
Feature/fix: Zoom at cursor! Zoom now zooms about cursor.
Diffstat (limited to 'muse2/muse/arranger')
-rw-r--r-- | muse2/muse/arranger/arranger.cpp | 50 | ||||
-rw-r--r-- | muse2/muse/arranger/arranger.h | 4 |
2 files changed, 29 insertions, 25 deletions
diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp index 18886bd1..90a7e8f3 100644 --- a/muse2/muse/arranger/arranger.cpp +++ b/muse2/muse/arranger/arranger.cpp @@ -37,6 +37,9 @@ #include <QVBoxLayout> #include <QWheelEvent> #include <QPainter> +#include <QCursor> +#include <QPoint> +#include <QRect> #include "arrangerview.h" #include "arranger.h" @@ -337,7 +340,7 @@ Arranger::Arranger(ArrangerView* parent, const char* name) tpolicy.setVerticalStretch(100); tracklist->setSizePolicy(tpolicy); - QWidget* editor = new QWidget(split); + editor = new QWidget(split); split->setStretchFactor(split->indexOf(editor), 1); QSizePolicy epolicy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); epolicy.setHorizontalStretch(255); @@ -474,8 +477,7 @@ Arranger::Arranger(ArrangerView* parent, const char* name) connect(list, SIGNAL(keyPressExt(QKeyEvent*)), canvas, SLOT(redirKeypress(QKeyEvent*))); connect(canvas, SIGNAL(selectTrackAbove()), list, SLOT(selectTrackAbove())); connect(canvas, SIGNAL(selectTrackBelow()), list, SLOT(selectTrackBelow())); - connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn())); - connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut())); + connect(canvas, SIGNAL(horizontalZoom(bool,int)), SLOT(horizontalZoom(bool,int))); connect(lenEntry, SIGNAL(returnPressed()), SLOT(focusCanvas())); connect(lenEntry, SIGNAL(escapePressed()), SLOT(focusCanvas())); connect(globalPitchSpinBox, SIGNAL(returnPressed()), SLOT(focusCanvas())); @@ -1205,41 +1207,43 @@ void Arranger::keyPressEvent(QKeyEvent* event) key+= Qt::CTRL; if (key == shortcuts[SHRT_ZOOM_IN].key) { - horizontalZoomIn(); + int offset = 0; + QPoint cp = canvas->mapFromGlobal(QCursor::pos()); + QPoint sp = editor->mapFromGlobal(QCursor::pos()); + if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < editor->height()) + offset = cp.x(); + horizontalZoom(true, offset); return; } else if (key == shortcuts[SHRT_ZOOM_OUT].key) { - horizontalZoomOut(); + int offset = 0; + QPoint cp = canvas->mapFromGlobal(QCursor::pos()); + QPoint sp = editor->mapFromGlobal(QCursor::pos()); + if(cp.x() >= 0 && cp.x() < canvas->width() && sp.y() >= 0 && sp.y() < editor->height()) + offset = cp.x(); + horizontalZoom(false, offset); return; } QWidget::keyPressEvent(event); } -void Arranger::horizontalZoomIn() +void Arranger::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 Arranger::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); } } // namespace MusEGui diff --git a/muse2/muse/arranger/arranger.h b/muse2/muse/arranger/arranger.h index 80f1b24c..e56a187d 100644 --- a/muse2/muse/arranger/arranger.h +++ b/muse2/muse/arranger/arranger.h @@ -116,6 +116,7 @@ class Arranger : public QWidget { static QByteArray header_state; ArrangerView* _parentWin; + QWidget* editor; int _quant, _raster; PartCanvas* canvas; ScrollScale* hscroll; @@ -165,8 +166,7 @@ class Arranger : public QWidget { void setTempo100(); void setTempo200(); void verticalScrollSetYpos(unsigned); - void horizontalZoomIn(); - void horizontalZoomOut(); + void horizontalZoom(bool zoom_in, int pos_offset); signals: void editPart(MusECore::Track*); |