From 8f623c2c72dfcae6b9fa49339e40b946c8877ae6 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Thu, 17 Oct 2013 14:53:12 -0700 Subject: Fix marble losting track of zoom level Marble had a bug on the way it treats zoom level, there's no way for it to find out if it's user-input or algorithm input and when a user clicks on a dive, it spins and centers on it, but if the user clicks on another dive when it's still spinning, it will get the zoom in the actual state ( spinning, usually zoom is far away from the first position ) and continue the spin to the other position. This patch works by saving the first location and triggering a helper function with a timer that will only update the zoom level if the timer is not active ( and thus, will not get the bugged zoom state set by the animation. ). Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/globe.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'qt-ui/globe.h') diff --git a/qt-ui/globe.h b/qt-ui/globe.h index eef01244b..cab42cefc 100644 --- a/qt-ui/globe.h +++ b/qt-ui/globe.h @@ -13,25 +13,28 @@ struct dive; class GlobeGPS : public MarbleWidget{ Q_OBJECT - void prepareForGetDiveCoordinates(struct dive* dive); public: using MarbleWidget::centerOn; GlobeGPS(QWidget *parent); void reload(); void centerOn(struct dive* dive); - void resizeEvent(QResizeEvent *event); protected: - virtual void mousePressEvent(QMouseEvent* event); + /* reimp */ void resizeEvent(QResizeEvent *event); + /* reimp */ void mousePressEvent(QMouseEvent* event); private: + void prepareForGetDiveCoordinates(struct dive* dive); GeoDataDocument *loadedDives; struct dive* editingDiveCoords; KMessageWidget* messageWidget; + QTimer *fixZoomTimer; + int currentZoomLevel; public slots: void changeDiveGeoPosition(qreal lon,qreal lat,GeoDataCoordinates::Unit); void mouseClicked(qreal lon, qreal lat, GeoDataCoordinates::Unit); + void fixZoom(); }; #endif -- cgit v1.2.3-70-g09d2