summaryrefslogtreecommitdiff
path: root/src/location/maps/qgeomap.cpp
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@theqtcompany.com>2015-04-10 18:59:31 +0200
committerMichal Klocek <michal.klocek@theqtcompany.com>2015-05-04 08:41:37 +0000
commit986110e3a41b0e90ab55fa7d17ef12599c824b56 (patch)
tree32f2c8061621aeb00c5a00fca2f376039411276a /src/location/maps/qgeomap.cpp
parentca1e96183643f59f95b6b9391d9d4c15bdac4a64 (diff)
downloadqtlocation-986110e3a41b0e90ab55fa7d17ef12599c824b56.tar.gz
Remove QGeoMapData class.
Since QGeoMap class does not have any subclasses, there is no need for keeping the bridge in form of QGeoMapData. This commit basically renames QGeoMapData to be QGeoMap. Change-Id: I6eb2f56f7ea83663034f4a8297e8e8f7f185d6a9 Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/location/maps/qgeomap.cpp')
-rw-r--r--src/location/maps/qgeomap.cpp202
1 files changed, 161 insertions, 41 deletions
diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp
index 48f20487..0fe8268c 100644
--- a/src/location/maps/qgeomap.cpp
+++ b/src/location/maps/qgeomap.cpp
@@ -35,102 +35,222 @@
****************************************************************************/
#include "qgeomap_p.h"
-#include "qgeomapdata_p.h"
+#include "qgeomap_p_p.h"
#include "qgeocameracapabilities_p.h"
+#include "qgeomapcontroller_p.h"
+#include "qgeomappingmanagerengine_p.h"
QT_BEGIN_NAMESPACE
-QGeoMap::QGeoMap(QGeoMapData *mapData, QObject *parent)
+QGeoMap::QGeoMap(QGeoMappingManagerEngine *engine, QObject *parent)
: QObject(parent),
- m_mapData(mapData)
-{
- connect(m_mapData, SIGNAL(cameraDataChanged(QGeoCameraData)), this, SIGNAL(cameraDataChanged(QGeoCameraData)));
- connect(m_mapData, SIGNAL(updateRequired()), this, SIGNAL(updateRequired()));
- connect(m_mapData, SIGNAL(activeMapTypeChanged()), this, SIGNAL(activeMapTypeChanged()));
- connect(m_mapData, SIGNAL(copyrightsChanged(QImage)), this, SIGNAL(copyrightsChanged(QImage)));
- connect(m_mapData, SIGNAL(copyrightsChanged(QString)), this, SIGNAL(copyrightsChanged(QString)));
-}
+ d_ptr(new QGeoMapPrivate(engine, this)) {}
QGeoMap::~QGeoMap()
{
- delete m_mapData;
+ delete d_ptr;
}
QGeoMapController *QGeoMap::mapController()
{
- return m_mapData->mapController();
-}
-
-QSGNode *QGeoMap::updateSceneGraph(QSGNode *oldNode, QQuickWindow *window)
-{
- return m_mapData->updateSceneGraph(oldNode, window);
+ Q_D(QGeoMap);
+ return d->mapController();
}
void QGeoMap::resize(int width, int height)
{
- m_mapData->resize(width, height);
+ Q_D(QGeoMap);
+ d->resize(width, height);
+
+ // always emit this signal to trigger items to redraw
+ emit cameraDataChanged(d->cameraData());
}
int QGeoMap::width() const
{
- return m_mapData->width();
+ Q_D(const QGeoMap);
+ return d->width();
}
int QGeoMap::height() const
{
- return m_mapData->height();
+ Q_D(const QGeoMap);
+ return d->height();
}
-QGeoCameraCapabilities QGeoMap::cameraCapabilities() const
+void QGeoMap::setCameraData(const QGeoCameraData &cameraData)
{
- return m_mapData->cameraCapabilities();
+ Q_D(QGeoMap);
+ if (cameraData == d->cameraData())
+ return;
+
+ d->setCameraData(cameraData);
+ update();
+
+ emit cameraDataChanged(d->cameraData());
}
-void QGeoMap::setCameraData(const QGeoCameraData &cameraData)
+QGeoCameraData QGeoMap::cameraData() const
{
- m_mapData->setCameraData(cameraData);
+ Q_D(const QGeoMap);
+ return d->cameraData();
}
-void QGeoMap::cameraStopped()
+void QGeoMap::update()
{
- m_mapData->prefetchData();
+ emit updateRequired();
}
-QGeoCameraData QGeoMap::cameraData() const
+void QGeoMap::setActiveMapType(const QGeoMapType type)
{
- return m_mapData->cameraData();
+ Q_D(QGeoMap);
+ d->setActiveMapType(type);
}
-QGeoCoordinate QGeoMap::itemPositionToCoordinate(const QDoubleVector2D &pos, bool clipToViewport) const
+const QGeoMapType QGeoMap::activeMapType() const
{
- return m_mapData->itemPositionToCoordinate(pos, clipToViewport);
+ Q_D(const QGeoMap);
+ return d->activeMapType();
}
-QDoubleVector2D QGeoMap::coordinateToItemPosition(const QGeoCoordinate &coordinate, bool clipToViewport) const
+QString QGeoMap::pluginString()
{
- return m_mapData->coordinateToItemPosition(coordinate, clipToViewport);
+ Q_D(QGeoMap);
+ return d->pluginString();
}
-void QGeoMap::update()
+QGeoCameraCapabilities QGeoMap::cameraCapabilities()
{
- emit m_mapData->update();
+ Q_D(QGeoMap);
+ if (d->engine())
+ return d->engine()->cameraCapabilities();
+ else
+ return QGeoCameraCapabilities();
}
-void QGeoMap::setActiveMapType(const QGeoMapType type)
+QGeoMappingManagerEngine *QGeoMap::engine()
{
- m_mapData->setActiveMapType(type);
+ Q_D(QGeoMap);
+ return d->engine();
}
-const QGeoMapType QGeoMap::activeMapType() const
+QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine, QGeoMap *parent)
+ : m_width(0),
+ m_height(0),
+ m_aspectRatio(0.0),
+ m_map(parent),
+ m_engine(engine),
+ m_controller(0),
+ m_activeMapType(QGeoMapType())
{
- return m_mapData->activeMapType();
+ m_pluginString = m_engine->managerName() + QLatin1Char('_') + QString::number(m_engine->managerVersion());
}
-QString QGeoMap::pluginString()
+QGeoMapPrivate::~QGeoMapPrivate()
+{
+ // controller_ is a child of map_, don't need to delete it here
+
+ // TODO map items are not deallocated!
+ // However: how to ensure this is done in rendering thread?
+}
+
+QGeoMappingManagerEngine *QGeoMapPrivate::engine() const
+{
+ return m_engine;
+}
+
+QString QGeoMapPrivate::pluginString()
+{
+ return m_pluginString;
+}
+
+QGeoMapController *QGeoMapPrivate::mapController()
+{
+ if (!m_controller)
+ m_controller = new QGeoMapController(m_map);
+ return m_controller;
+}
+
+void QGeoMapPrivate::setCameraData(const QGeoCameraData &cameraData)
+{
+ QGeoCameraData oldCameraData = m_cameraData;
+ m_cameraData = cameraData;
+
+ if (m_engine) {
+ QGeoCameraCapabilities capabilities = m_engine->cameraCapabilities();
+ if (m_cameraData.zoomLevel() < capabilities.minimumZoomLevel())
+ m_cameraData.setZoomLevel(capabilities.minimumZoomLevel());
+
+ if (m_cameraData.zoomLevel() > capabilities.maximumZoomLevel())
+ m_cameraData.setZoomLevel(capabilities.maximumZoomLevel());
+
+ if (!capabilities.supportsBearing())
+ m_cameraData.setBearing(0.0);
+
+ if (capabilities.supportsTilting()) {
+ if (m_cameraData.tilt() < capabilities.minimumTilt())
+ m_cameraData.setTilt(capabilities.minimumTilt());
+
+ if (m_cameraData.tilt() > capabilities.maximumTilt())
+ m_cameraData.setTilt(capabilities.maximumTilt());
+ } else {
+ m_cameraData.setTilt(0.0);
+ }
+
+ if (!capabilities.supportsRolling())
+ m_cameraData.setRoll(0.0);
+ }
+
+ // Do not call this expensive function if the width is 0, since it will get called
+ // anyway when it is resized to a width > 0.
+ // this is mainly an optimization to the initialization of the geomap, which would otherwise
+ // call changeCameraData four or more times
+ if (width() > 0)
+ m_map->changeCameraData(oldCameraData);
+}
+
+QGeoCameraData QGeoMapPrivate::cameraData() const
{
- return m_mapData->pluginString();
+ return m_cameraData;
}
-#include "moc_qgeomap_p.cpp"
+void QGeoMapPrivate::resize(int width, int height)
+{
+ m_width = width;
+ m_height = height;
+ m_aspectRatio = 1.0 * m_width / m_height;
+ m_map->mapResized(width, height);
+ setCameraData(m_cameraData);
+}
+
+int QGeoMapPrivate::width() const
+{
+ return m_width;
+}
+
+int QGeoMapPrivate::height() const
+{
+ return m_height;
+}
+
+double QGeoMapPrivate::aspectRatio() const
+{
+ return m_aspectRatio;
+}
+
+void QGeoMapPrivate::setActiveMapType(const QGeoMapType &type)
+{
+ m_activeMapType = type;
+
+ m_map->changeActiveMapType(type);
+ setCameraData(m_cameraData);
+
+ m_map->update();
+}
+
+const QGeoMapType QGeoMapPrivate::activeMapType() const
+{
+ return m_activeMapType;
+}
QT_END_NAMESPACE