diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2014-03-10 17:59:02 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-03-10 09:02:31 -0700 |
commit | 41cec17cfffb2dfc6d8b10ec9619f81a3bc9416d (patch) | |
tree | 5b6b7f086837fd1613b081f799d7c848037cdde5 | |
parent | 324b8cbff1a5ee9ab0fe2ec04183bb9c0c821dc1 (diff) | |
download | subsurface-41cec17cfffb2dfc6d8b10ec9619f81a3bc9416d.tar.gz |
Profile2: reset the zoom level when a new profile is drawn
If the user has zoomed in but then changes to a new dive,
we may want to reset the scale back to the original value (1.0)
based on the current zoomLevel, so that the profile is not stuck
in zoomed mode.
This patch adds a snippet that resets the QGraphicsView scale,
zoomLevel variable and also the toolTip position.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 15 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.h | 1 |
2 files changed, 13 insertions, 3 deletions
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index d7a2228f4..822f1bc7f 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -20,6 +20,7 @@ #include <QDebug> #include <QSettings> #include <QScrollBar> +#include <QtCore/qmath.h> #ifndef QT_NO_DEBUG #include <QTableView> @@ -59,6 +60,7 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) : QGraphicsView(parent), dataModel(new DivePlotDataModel(this)), currentState(INVALID), zoomLevel(0), + zoomFactor(1.15), background(new DivePixmapItem()), toolTipItem(new ToolTipItem()), isPlotZoomed(prefs.zoomed_plot), @@ -320,6 +322,14 @@ void ProfileWidget2::plotDives(QList<dive *> dives) if (!d) return; + // restore default zoom level and tooltip position + if (zoomLevel) { + const qreal defScale = 1.0 / qPow(zoomFactor, (qreal)zoomLevel); + scale(defScale, defScale); + zoomLevel = 0; + } + toolTipItem->setPos(0, 0); + // No need to do this again if we are already showing the same dive // computer of the same dive, so we check the unique id of the dive // and the selected dive computer number against the ones we are @@ -478,13 +488,12 @@ void ProfileWidget2::wheelEvent(QWheelEvent *event) if (currentState == EMPTY) return; QPoint toolTipPos = mapFromScene(toolTipItem->pos()); - double scaleFactor = 1.15; if (event->delta() > 0 && zoomLevel < 20) { - scale(scaleFactor, scaleFactor); + scale(zoomFactor, zoomFactor); zoomLevel++; } else if (event->delta() < 0 && zoomLevel > 0) { // Zooming out - scale(1.0 / scaleFactor, 1.0 / scaleFactor); + scale(1.0 / zoomFactor, 1.0 / zoomFactor); zoomLevel--; } scrollViewTo(event->pos()); diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h index c6c9adf93..b5339edef 100644 --- a/qt-ui/profile/profilewidget2.h +++ b/qt-ui/profile/profilewidget2.h @@ -93,6 +93,7 @@ private: DivePlotDataModel *dataModel; State currentState; int zoomLevel; + qreal zoomFactor; DivePixmapItem *background; QString backgroundFile; ToolTipItem *toolTipItem; |