1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Copyright (C) 2017 Mapbox, Inc.
5** Contact: http://www.qt.io/licensing/
6**
7** This file is part of the QtLocation module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL3$
10** Commercial License Usage
11** Licensees holding valid commercial Qt licenses may use this file in
12** accordance with the commercial license agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and The Qt Company. For licensing terms
15** and conditions see http://www.qt.io/terms-conditions. For further
16** information use the contact form at http://www.qt.io/contact-us.
17**
18** GNU Lesser General Public License Usage
19** Alternatively, this file may be used under the terms of the GNU Lesser
20** General Public License version 3 as published by the Free Software
21** Foundation and appearing in the file LICENSE.LGPLv3 included in the
22** packaging of this file. Please review the following information to
23** ensure the GNU Lesser General Public License version 3 requirements
24** will be met: https://www.gnu.org/licenses/lgpl.html.
25**
26** GNU General Public License Usage
27** Alternatively, this file may be used under the terms of the GNU
28** General Public License version 2.0 or later as published by the Free
29** Software Foundation and appearing in the file LICENSE.GPL included in
30** the packaging of this file. Please review the following information to
31** ensure the GNU General Public License version 2.0 requirements will be
32** met: http://www.gnu.org/licenses/gpl-2.0.html.
33**
34** $QT_END_LICENSE$
35**
36****************************************************************************/
37
38#ifndef QGEOMAPMAPBOXGL_P_H
39#define QGEOMAPMAPBOXGL_P_H
40
41#include <QtCore/QHash>
42#include <QtCore/QList>
43#include <QtCore/QSharedPointer>
44#include <QtCore/QTimer>
45#include <QtCore/QVariant>
46#include <QtCore/QRectF>
47#include <QtLocation/private/qgeomap_p_p.h>
48#include <QtLocation/private/qgeomapparameter_p.h>
49
50class QMapboxGL;
51class QMapboxGLStyleChange;
52
53class QGeoMapMapboxGLPrivate : public QGeoMapPrivate
54{
55 Q_DECLARE_PUBLIC(QGeoMapMapboxGL)
56
57public:
58 QGeoMapMapboxGLPrivate(QGeoMappingManagerEngineMapboxGL *engine);
59
60 ~QGeoMapMapboxGLPrivate();
61
62 QSGNode *updateSceneGraph(QSGNode *oldNode, QQuickWindow *window);
63
64 void addParameter(QGeoMapParameter *param) override;
65 void removeParameter(QGeoMapParameter *param) override;
66
67 QGeoMap::ItemTypes supportedMapItemTypes() const override;
68 void addMapItem(QDeclarativeGeoMapItemBase *item) override;
69 void removeMapItem(QDeclarativeGeoMapItemBase *item) override;
70
71 /* Data members */
72 enum SyncState : int {
73 NoSync = 0,
74 ViewportSync = 1 << 0,
75 CameraDataSync = 1 << 1,
76 MapTypeSync = 1 << 2,
77 VisibleAreaSync = 1 << 3
78 };
79 Q_DECLARE_FLAGS(SyncStates, SyncState);
80
81 QMapboxGLSettings m_settings;
82 bool m_useFBO = true;
83 bool m_developmentMode = false;
84 QString m_mapItemsBefore;
85
86 QTimer m_refresh;
87 bool m_shouldRefresh = true;
88 bool m_warned = false;
89 bool m_threadedRendering = false;
90 bool m_styleLoaded = false;
91
92 SyncStates m_syncState = NoSync;
93
94 QList<QSharedPointer<QMapboxGLStyleChange>> m_styleChanges;
95
96protected:
97 void changeViewportSize(const QSize &size) override;
98 void changeCameraData(const QGeoCameraData &oldCameraData) override;
99 void changeActiveMapType(const QGeoMapType mapType) override;
100
101 void setVisibleArea(const QRectF &visibleArea) override;
102 QRectF visibleArea() const override;
103
104private:
105 Q_DISABLE_COPY(QGeoMapMapboxGLPrivate);
106
107 void syncStyleChanges(QMapboxGL *map);
108 void threadedRenderingHack(QQuickWindow *window, QMapboxGL *map);
109
110 QRectF m_visibleArea;
111};
112
113Q_DECLARE_OPERATORS_FOR_FLAGS(QGeoMapMapboxGLPrivate::SyncStates)
114
115#endif // QGEOMAPMAPBOXGL_P_H
116

source code of qtlocation/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl_p.h