diff options
Diffstat (limited to 'src/location/labs/qsg/qmappolygonobjectqsg.cpp')
-rw-r--r-- | src/location/labs/qsg/qmappolygonobjectqsg.cpp | 225 |
1 files changed, 0 insertions, 225 deletions
diff --git a/src/location/labs/qsg/qmappolygonobjectqsg.cpp b/src/location/labs/qsg/qmappolygonobjectqsg.cpp deleted file mode 100644 index ea40658d..00000000 --- a/src/location/labs/qsg/qmappolygonobjectqsg.cpp +++ /dev/null @@ -1,225 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtLocation module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qmappolygonobjectqsg_p_p.h" -#include <QtQuick/qsgnode.h> -#include <QtQuick/qsgsimplerectnode.h> -#include <QtPositioning/private/qgeopolygon_p.h> - -QT_BEGIN_NAMESPACE - -QMapPolygonObjectPrivateQSG::QMapPolygonObjectPrivateQSG(QGeoMapObject *q) - : QMapPolygonObjectPrivateDefault(q) -{ - -} - -QMapPolygonObjectPrivateQSG::QMapPolygonObjectPrivateQSG(const QMapPolygonObjectPrivate &other) - : QMapPolygonObjectPrivateDefault(other) -{ - // Data already cloned by the *Default copy constructor, but necessary - // update operations triggered only by setters overrides - markSourceDirty(); - updateGeometry(); - if (m_map) - emit m_map->sgNodeChanged(); -} - -QMapPolygonObjectPrivateQSG::~QMapPolygonObjectPrivateQSG() -{ - if (m_map) - m_map->removeMapObject(q); -} - -void QMapPolygonObjectPrivateQSG::setPath(const QList<QGeoCoordinate> &p) -{ - if (p == path()) - return; - QMapPolygonObjectPrivateDefault::setPath(p); - markSourceDirty(); - updateGeometry(); - - if (m_map) - emit m_map->sgNodeChanged(); - emit static_cast<QMapPolygonObject *>(q)->pathChanged(); -} - -void QMapPolygonObjectPrivateQSG::setFillColor(const QColor &color) -{ - QMapPolygonObjectPrivateDefault::setFillColor(color); - - if (m_map) - emit m_map->sgNodeChanged(); -} - -void QMapPolygonObjectPrivateQSG::setBorderColor(const QColor &color) -{ - QMapPolygonObjectPrivateDefault::setBorderColor(color); - - if (m_map) - emit m_map->sgNodeChanged(); -} - -void QMapPolygonObjectPrivateQSG::setBorderWidth(qreal width) -{ - QMapPolygonObjectPrivateDefault::setBorderWidth(width); - - if (m_map) - emit m_map->sgNodeChanged(); -} - -QGeoMapObjectPrivate *QMapPolygonObjectPrivateQSG::clone() -{ - return new QMapPolygonObjectPrivateQSG(static_cast<QMapPolygonObjectPrivate &>(*this)); -} - -void QMapPolygonObjectPrivateQSG::setGeoShape(const QGeoShape &shape) -{ - if (shape == m_path) - return; - - m_path = QGeoPathEager(shape); - markSourceDirty(); - updateGeometry(); - if (m_map) - emit m_map->sgNodeChanged(); - emit static_cast<QMapPolygonObject *>(q)->pathChanged(); -} - -// This is called both when data changes and when viewport changes. -// so handle both cases (sourceDirty, !sourceDirty) -void QMapPolygonObjectPrivateQSG::updateGeometry() -{ - if (!m_map || m_map->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator) - return; - - if (m_path.perimeter().length() == 0) { // Possibly cleared - m_geometry.clear(); - m_borderGeometry.clear(); - return; - } - const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(m_map->geoProjection()); - if (m_geometry.isSourceDirty() || m_borderGeometry.isSourceDirty()) { - // This works a bit differently than MapPolygon: - // the "screen bounds" aren't needed, so update only sources, - // regardless of the color, as color changes won't trigger polish(), - // and remember to flag m_dataChanged, that is in principle the same as - // sourceDirty_, but in practice is cleared in two different codepaths. - // sourceDirty_ is cleared in any case, dataChanged only if the primitive - // is effectively visible (e.g., not transparent or border not null) - m_geometry.setPreserveGeometry(true, m_path.boundingGeoRectangle().topLeft()); - m_borderGeometry.setPreserveGeometry(true, m_path.boundingGeoRectangle().topLeft()); - m_geometry.m_dataChanged = m_borderGeometry.m_dataChanged = true; - m_geometry.updateSourcePoints(*m_map, m_path); - m_borderGeometry.updateSourcePoints(*m_map, m_path); - m_leftBoundMercator = p.geoToMapProjection(m_geometry.origin()); - } - m_geometry.markScreenDirty(); // ToDo: this needs refactor. It's useless, remove screenDirty_ altogether. - m_borderGeometry.markScreenDirty(); - m_borderGeometry.m_wrapOffset = m_geometry.m_wrapOffset = p.projectionWrapFactor(m_leftBoundMercator) + 1; -} - -QSGNode *QMapPolygonObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, - VisibleNode **visibleNode, - QSGNode *root, - QQuickWindow * /*window*/) -{ - if (!m_rootNode || !oldNode) { - m_rootNode = new QDeclarativePolygonMapItemPrivateOpenGL::RootNode(); - m_node = new MapPolygonNodeGL(); - m_rootNode->appendChildNode(m_node); - m_polylinenode = new MapPolylineNodeOpenGLExtruded(); - m_rootNode->appendChildNode(m_polylinenode); - m_rootNode->markDirty(QSGNode::DirtyNodeAdded); - *visibleNode = static_cast<VisibleNode *>(m_rootNode); - if (oldNode) - delete oldNode; - } else { - m_rootNode = static_cast<QDeclarativePolygonMapItemPrivateOpenGL::RootNode *>(oldNode); - } - - const QMatrix4x4 &combinedMatrix = m_map->geoProjection().qsgTransform(); - const QDoubleVector3D &cameraCenter = m_map->geoProjection().centerMercator(); - - if (m_borderGeometry.isScreenDirty()) { - /* Do the border update first */ - m_polylinenode->update(borderColor(), - float(borderWidth()), - &m_borderGeometry, - combinedMatrix, - cameraCenter, - Qt::SquareCap, - true); - m_borderGeometry.setPreserveGeometry(false); - m_borderGeometry.markClean(); - } - if (m_geometry.isScreenDirty()) { - m_node->update(fillColor(), - &m_geometry, - combinedMatrix, - cameraCenter); - m_geometry.setPreserveGeometry(false); - m_geometry.markClean(); - } - - if (!m_polylinenode->isSubtreeBlocked() || !m_node->isSubtreeBlocked()) { - m_rootNode->setSubtreeBlocked(false); - root->appendChildNode(m_rootNode); - return m_rootNode; - } else { - m_rootNode->setSubtreeBlocked(true); - // If the object is currently invisible, but not gone, - // it is reasonable to assume it will become visible again. - // However, better not to retain unused data. - delete m_rootNode; - m_rootNode = nullptr; - m_node = nullptr; - m_polylinenode = nullptr; - *visibleNode = nullptr; - return nullptr; - } -} - -void QMapPolygonObjectPrivateQSG::markSourceDirty() -{ - m_geometry.markSourceDirty(); - m_borderGeometry.markSourceDirty(); -} - -QT_END_NAMESPACE |