summaryrefslogtreecommitdiff
path: root/src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h')
-rw-r--r--src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h72
1 files changed, 6 insertions, 66 deletions
diff --git a/src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h b/src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h
index 963f7279..3a446a10 100644
--- a/src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h
+++ b/src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2020 Paolo Angelelli <paolo.angelelli@gmail.com>
-** Copyright (C) 2020 The Qt Company Ltd.
+** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtLocation module of the Qt Toolkit.
@@ -529,23 +529,8 @@ public:
m_geometry.markSourceDirty();
m_poly.polishAndUpdate();
}
- void regenerateCache()
- {
- if (!m_poly.map() || m_poly.map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
- return;
- const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(m_poly.map()->geoProjection());
- m_geopathProjected.clear();
- m_geopathProjected.reserve(m_poly.m_geopath.size());
- for (const QGeoCoordinate &c : m_poly.m_geopath.path())
- m_geopathProjected << p.geoToMapProjection(c);
- }
- void updateCache()
- {
- if (!m_poly.map() || m_poly.map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
- return;
- const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(m_poly.map()->geoProjection());
- m_geopathProjected << p.geoToMapProjection(m_poly.m_geopath.path().last());
- }
+ void regenerateCache();
+ void updateCache();
void preserveGeometry()
{
m_geometry.setPreserveGeometry(true, m_poly.m_geopath.boundingGeoRectangle().topLeft());
@@ -577,54 +562,9 @@ public:
{
onGeoGeometryChanged();
}
- void updatePolish() override
- {
- if (m_poly.m_geopath.path().length() < 2) { // Possibly cleared
- m_geometry.clear();
- m_poly.setWidth(0);
- m_poly.setHeight(0);
- return;
- }
- QScopedValueRollback<bool> rollback(m_poly.m_updatingGeometry);
- m_poly.m_updatingGeometry = true;
-
- const QGeoMap *map = m_poly.map();
- const qreal borderWidth = m_poly.m_line.width();
-
- m_geometry.updateSourcePoints(*map, m_geopathProjected, m_poly.m_geopath.boundingGeoRectangle().topLeft());
- m_geometry.updateScreenPoints(*map, borderWidth);
-
- m_poly.setWidth(m_geometry.sourceBoundingBox().width() + borderWidth);
- m_poly.setHeight(m_geometry.sourceBoundingBox().height() + borderWidth);
-
- m_poly.setPositionOnMap(m_geometry.origin(), -1 * m_geometry.sourceBoundingBox().topLeft()
- + QPointF(borderWidth, borderWidth) * 0.5 ); // it has to be shifted so that the center of the line is on the correct geocoord
- }
- QSGNode *updateMapItemPaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData * /*data*/) override
- {
- if (!m_node || !oldNode) {
- m_node = new MapPolylineNode();
- if (oldNode) {
- delete oldNode;
- oldNode = nullptr;
- }
- } else {
- m_node = static_cast<MapPolylineNode *>(oldNode);
- }
-
- //TODO: update only material
- if (m_geometry.isScreenDirty() || m_poly.m_dirtyMaterial || !oldNode) {
- m_node->update(m_poly.m_line.color(), &m_geometry);
- m_geometry.setPreserveGeometry(false);
- m_geometry.markClean();
- m_poly.m_dirtyMaterial = false;
- }
- return m_node;
- }
- bool contains(const QPointF &point) const override
- {
- return m_geometry.contains(point);
- }
+ void updatePolish() override;
+ QSGNode *updateMapItemPaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData * /*data*/) override;
+ bool contains(const QPointF &point) const override;
QList<QDoubleVector2D> m_geopathProjected;
QGeoMapPolylineGeometry m_geometry;