aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2014-03-10 17:59:02 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-03-10 09:02:31 -0700
commit41cec17cfffb2dfc6d8b10ec9619f81a3bc9416d (patch)
tree5b6b7f086837fd1613b081f799d7c848037cdde5
parent324b8cbff1a5ee9ab0fe2ec04183bb9c0c821dc1 (diff)
downloadsubsurface-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.cpp15
-rw-r--r--qt-ui/profile/profilewidget2.h1
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;