diff options
author | Alex Wilson <alex.wilson@nokia.com> | 2012-02-27 14:05:18 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-28 05:32:34 +0100 |
commit | 54678e128f4515eadac8c598696425c8c2f02bfd (patch) | |
tree | ca2037c2390170806755ea6d50175fee039b339d /src/imports/location/qdeclarativegeomapitembase.cpp | |
parent | 50b5acb9c654406e995b1c4faa648ba1726eb66f (diff) | |
download | qtlocation-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.cpp | 57 |
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) |