From aeed3d0c8f48e1745c480b8133167951cdba9f87 Mon Sep 17 00:00:00 2001 From: aib Date: Tue, 4 Jan 2022 12:40:14 +0300 Subject: [PATCH] Save map position using a timer to prevent FPS decrease (#10070) Based on commit d0008a5f307086227197bff1ba72e6ff1090eeab. See #9220. --- src/QmlControls/QGroundControlQmlGlobal.cc | 27 ++++++++++++++++++++------- src/QmlControls/QGroundControlQmlGlobal.h | 1 + 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/QmlControls/QGroundControlQmlGlobal.cc b/src/QmlControls/QGroundControlQmlGlobal.cc index fb2019c..0beae69 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.cc +++ b/src/QmlControls/QGroundControlQmlGlobal.cc @@ -36,6 +36,26 @@ QGroundControlQmlGlobal::QGroundControlQmlGlobal(QGCApplication* app, QGCToolbox _coord.setLatitude(settings.value(_flightMapPositionLatitudeSettingsKey, _coord.latitude()).toDouble()); _coord.setLongitude(settings.value(_flightMapPositionLongitudeSettingsKey, _coord.longitude()).toDouble()); _zoom = settings.value(_flightMapZoomSettingsKey, _zoom).toDouble(); + _flightMapPositionSettledTimer.setSingleShot(true); + _flightMapPositionSettledTimer.setInterval(1000); + connect(&_flightMapPositionSettledTimer, &QTimer::timeout, [](){ + // When they settle, save flightMapPosition and Zoom to the config file + QSettings settings; + settings.beginGroup(_flightMapPositionSettingsGroup); + settings.setValue(_flightMapPositionLatitudeSettingsKey, _coord.latitude()); + settings.setValue(_flightMapPositionLongitudeSettingsKey, _coord.longitude()); + settings.setValue(_flightMapZoomSettingsKey, _zoom); + }); + connect(this, &QGroundControlQmlGlobal::flightMapPositionChanged, this, [this](QGeoCoordinate){ + if (!_flightMapPositionSettledTimer.isActive()) { + _flightMapPositionSettledTimer.start(); + } + }); + connect(this, &QGroundControlQmlGlobal::flightMapZoomChanged, this, [this](double){ + if (!_flightMapPositionSettledTimer.isActive()) { + _flightMapPositionSettledTimer.start(); + } + }); } QGroundControlQmlGlobal::~QGroundControlQmlGlobal() @@ -228,10 +248,6 @@ void QGroundControlQmlGlobal::setFlightMapPosition(QGeoCoordinate& coordinate) if (coordinate != flightMapPosition()) { _coord.setLatitude(coordinate.latitude()); _coord.setLongitude(coordinate.longitude()); - QSettings settings; - settings.beginGroup(_flightMapPositionSettingsGroup); - settings.setValue(_flightMapPositionLatitudeSettingsKey, _coord.latitude()); - settings.setValue(_flightMapPositionLongitudeSettingsKey, _coord.longitude()); emit flightMapPositionChanged(coordinate); } } @@ -240,9 +256,6 @@ void QGroundControlQmlGlobal::setFlightMapZoom(double zoom) { if (zoom != flightMapZoom()) { _zoom = zoom; - QSettings settings; - settings.beginGroup(_flightMapPositionSettingsGroup); - settings.setValue(_flightMapZoomSettingsKey, _zoom); emit flightMapZoomChanged(zoom); } } diff --git a/src/QmlControls/QGroundControlQmlGlobal.h b/src/QmlControls/QGroundControlQmlGlobal.h index 0961bab..96db792 100644 --- a/src/QmlControls/QGroundControlQmlGlobal.h +++ b/src/QmlControls/QGroundControlQmlGlobal.h @@ -275,4 +275,5 @@ private: static QGeoCoordinate _coord; static double _zoom; + QTimer _flightMapPositionSettledTimer; };