summaryrefslogtreecommitdiff
path: root/muse2/muse/arranger
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/arranger
parent488e311fb446d129aff962106aead79fa96a849c (diff)
Feature/fix: Zoom at cursor! Zoom now zooms about cursor.
Diffstat (limited to 'muse2/muse/arranger')
-rw-r--r--muse2/muse/arranger/arranger.cpp50
-rw-r--r--muse2/muse/arranger/arranger.h4
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*);