diff options
Diffstat (limited to 'src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h')
-rw-r--r-- | src/location/quickmapitems/qdeclarativepolylinemapitem_p_p.h | 72 |
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; |