summaryrefslogtreecommitdiff
path: root/src/imports/location/qdeclarativecirclemapitem.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/qdeclarativecirclemapitem.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/qdeclarativecirclemapitem.cpp')
-rw-r--r--src/imports/location/qdeclarativecirclemapitem.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/imports/location/qdeclarativecirclemapitem.cpp b/src/imports/location/qdeclarativecirclemapitem.cpp
index 645b09bf..0cd79074 100644
--- a/src/imports/location/qdeclarativecirclemapitem.cpp
+++ b/src/imports/location/qdeclarativecirclemapitem.cpp
@@ -42,6 +42,7 @@
#include "qdeclarativecirclemapitem_p.h"
#include "qdeclarativegeomapquickitem_p.h"
#include "qdeclarativepolygonmapitem_p.h"
+#include "qgeocameracapabilities_p.h"
#include "qgeoprojection_p.h"
#include <cmath>
#include <QPen>
@@ -184,7 +185,6 @@ QDeclarativeCircleMapItem::QDeclarativeCircleMapItem(QQuickItem *parent):
center_(0),
color_(Qt::transparent),
radius_(0),
- zoomLevel_(0.0),
dirtyMaterial_(true)
{
setFlag(ItemHasContents, true);
@@ -224,7 +224,6 @@ void QDeclarativeCircleMapItem::setMap(QDeclarativeGeoMap* quickMap, QGeoMap *ma
{
QDeclarativeGeoMapItemBase::setMap(quickMap,map);
if (map) {
- QObject::connect(map, SIGNAL(cameraDataChanged(QGeoCameraData)), this, SLOT(handleCameraDataChanged(QGeoCameraData)));
geometry_.markSourceDirty();
borderGeometry_.markSourceDirty();
updateMapItem();
@@ -364,17 +363,26 @@ void QDeclarativeCircleMapItem::updateMapItem()
update();
}
-void QDeclarativeCircleMapItem::handleCameraDataChanged(const QGeoCameraData& cameraData)
+void QDeclarativeCircleMapItem::afterViewportChanged(const QGeoMapViewportChangeEvent &event)
{
- if (cameraData.zoomLevel() != zoomLevel_) {
- zoomLevel_ = cameraData.zoomLevel();
+ // if the scene is tilted, we must regenerate our geometry every frame
+ if (map()->cameraCapabilities().supportsTilting()
+ && (event.cameraData.tilt() > 0.1
+ || event.cameraData.tilt() < -0.1)) {
geometry_.markSourceDirty();
borderGeometry_.markSourceDirty();
}
- QSizeF sz = QSizeF(quickMap()->width(), quickMap()->height());
- if (sz != mapSize_) {
- mapSize_ = sz;
+ // if the scene is rolled, we must regen too
+ if (map()->cameraCapabilities().supportsRolling()
+ && (event.cameraData.roll() > 0.1
+ || event.cameraData.roll() < -0.1)) {
+ geometry_.markSourceDirty();
+ borderGeometry_.markSourceDirty();
+ }
+
+ // otherwise, only regen on rotate, resize and zoom
+ if (event.bearingChanged || event.mapSizeChanged || event.zoomLevelChanged) {
geometry_.markSourceDirty();
borderGeometry_.markSourceDirty();
}