From 057b225daec3a9a3990fcdfded8f9ef256b34d6b Mon Sep 17 00:00:00 2001 From: Martin Dobias Date: Thu, 21 Feb 2019 22:13:11 +0100 Subject: [PATCH] [quick] do not refresh map on click Whenever user would click on the map (e.g. to identify a feature), the freeze and subsequent unfreeze would force map refresh even though it is not needed. A new internal flag is introduced to avoid the unnecessary map refresh in cases when map has not been moved nor zoomed. --- src/quickgui/qgsquickmapcanvasmap.cpp | 9 ++++++++- src/quickgui/qgsquickmapcanvasmap.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/quickgui/qgsquickmapcanvasmap.cpp b/src/quickgui/qgsquickmapcanvasmap.cpp index 5b324a44ffd..90166cfe2cc 100644 --- a/src/quickgui/qgsquickmapcanvasmap.cpp +++ b/src/quickgui/qgsquickmapcanvasmap.cpp @@ -67,6 +67,7 @@ void QgsQuickMapCanvasMap::zoom( QPointF center, qreal scale ) // same as zoomWithCenter (no coordinate transformations are needed) extent.scale( scale, &newCenter ); mMapSettings->setExtent( extent ); + mNeedsRefresh = true; } void QgsQuickMapCanvasMap::pan( QPointF oldPos, QPointF newPos ) @@ -86,6 +87,7 @@ void QgsQuickMapCanvasMap::pan( QPointF oldPos, QPointF newPos ) extent.setYMinimum( extent.yMinimum() + dy ); mMapSettings->setExtent( extent ); + mNeedsRefresh = true; } void QgsQuickMapCanvasMap::refreshMap() @@ -257,8 +259,13 @@ void QgsQuickMapCanvasMap::setFreeze( bool freeze ) mFreeze = freeze; - if ( !mFreeze ) + if ( !mFreeze && mNeedsRefresh ) + { refresh(); + } + + // we are freezing or unfreezing - either way we can reset "needs refresh" + mNeedsRefresh = false; emit freezeChanged(); } diff --git a/src/quickgui/qgsquickmapcanvasmap.h b/src/quickgui/qgsquickmapcanvasmap.h index 50e1ba92bec..730537f74fd 100644 --- a/src/quickgui/qgsquickmapcanvasmap.h +++ b/src/quickgui/qgsquickmapcanvasmap.h @@ -196,6 +196,7 @@ class QUICK_EXPORT QgsQuickMapCanvasMap : public QQuickItem QTimer mRefreshTimer; bool mDirty = false; bool mFreeze = false; + bool mNeedsRefresh = false; //!< Whether refresh is needed after unfreezing QList mLayerConnections; QTimer mMapUpdateTimer; bool mIncrementalRendering = false;