summaryrefslogtreecommitdiff
path: root/src/imports/location/qdeclarativegeomapitembase.cpp
diff options
context:
space:
mode:
authorAlex Wilson <alex.wilson@nokia.com>2012-02-27 14:05:18 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-28 05:32:34 +0100
commit54678e128f4515eadac8c598696425c8c2f02bfd (patch)
treeca2037c2390170806755ea6d50175fee039b339d /src/imports/location/qdeclarativegeomapitembase.cpp
parent50b5acb9c654406e995b1c4faa648ba1726eb66f (diff)
downloadqtlocation-54678e128f4515eadac8c598696425c8c2f02bfd.tar.gz
Camera data change detection in MapItemBase, handle tilt/rotate better
Moves change detection for the map's QGeoCameraData into MapItemBase (previously each map item did it individually). Adds proper detection of tilt/rotate/roll capabilities and regenerates geometry at each frame for these cases. Change-Id: Iaadd594613931c2b352e245efefe3e07e4c43229 Reviewed-by: David Laing <david.laing@nokia.com>
Diffstat (limited to 'src/imports/location/qdeclarativegeomapitembase.cpp')
-rw-r--r--src/imports/location/qdeclarativegeomapitembase.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/imports/location/qdeclarativegeomapitembase.cpp b/src/imports/location/qdeclarativegeomapitembase.cpp
index 6d036c3a..8b1cc615 100644
--- a/src/imports/location/qdeclarativegeomapitembase.cpp
+++ b/src/imports/location/qdeclarativegeomapitembase.cpp
@@ -41,10 +41,33 @@
#include "qdeclarativegeomapitembase_p.h"
#include "qdeclarativegeomapmousearea_p.h"
+#include "qgeocameradata_p.h"
#include <QDeclarativeInfo>
QT_BEGIN_NAMESPACE
+QGeoMapViewportChangeEvent::QGeoMapViewportChangeEvent()
+ : zoomLevelChanged(false),
+ centerChanged(false),
+ mapSizeChanged(false),
+ tiltChanged(false),
+ bearingChanged(false),
+ rollChanged(false)
+{
+}
+
+QGeoMapViewportChangeEvent::QGeoMapViewportChangeEvent(const QGeoMapViewportChangeEvent &other)
+ : cameraData(other.cameraData),
+ mapSize(other.mapSize),
+ zoomLevelChanged(other.zoomLevelChanged),
+ centerChanged(other.centerChanged),
+ mapSizeChanged(other.mapSizeChanged),
+ tiltChanged(other.tiltChanged),
+ bearingChanged(other.bearingChanged),
+ rollChanged(other.rollChanged)
+{
+}
+
QDeclarativeGeoMapItemBase::QDeclarativeGeoMapItemBase(QQuickItem *parent)
: QQuickItem(parent),
map_(0),
@@ -104,8 +127,42 @@ void QDeclarativeGeoMapItemBase::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *m
quickMap_->disconnect(this);
if (map_)
map_->disconnect(this);
+
quickMap_ = quickMap;
map_ = map;
+
+ if (map_ && quickMap_) {
+ connect(map_, SIGNAL(cameraDataChanged(QGeoCameraData)),
+ this, SLOT(baseCameraDataChanged(QGeoCameraData)));
+ lastSize_ = QSizeF(quickMap_->width(), quickMap_->height());
+ lastCameraData_ = map_->cameraData();
+ }
+}
+
+void QDeclarativeGeoMapItemBase::baseCameraDataChanged(const QGeoCameraData &cameraData)
+{
+ QGeoMapViewportChangeEvent evt;
+ evt.cameraData = cameraData;
+ evt.mapSize = QSizeF(quickMap_->width(), quickMap_->height());
+
+ if (evt.mapSize != lastSize_)
+ evt.mapSizeChanged = true;
+
+ if (cameraData.bearing() != lastCameraData_.bearing())
+ evt.bearingChanged = true;
+ if (cameraData.center() != lastCameraData_.center())
+ evt.centerChanged = true;
+ if (cameraData.roll() != lastCameraData_.roll())
+ evt.rollChanged = true;
+ if (cameraData.tilt() != lastCameraData_.tilt())
+ evt.tiltChanged = true;
+ if (cameraData.zoomLevel() != lastCameraData_.zoomLevel())
+ evt.zoomLevelChanged = true;
+
+ lastSize_ = evt.mapSize;
+ lastCameraData_ = cameraData;
+
+ afterViewportChanged(evt);
}
void QDeclarativeGeoMapItemBase::setPositionOnMap(const QGeoCoordinate& coordinate, const QPointF& offset)