You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					94 lines
				
				2.4 KiB
			
		
		
			
		
	
	
					94 lines
				
				2.4 KiB
			| 
											2 years ago
										 | // Copyright (C) 2023 MapLibre contributors
 | ||
|  | // Copyright (C) 2017 The Qt Company Ltd.
 | ||
|  | // Copyright (C) 2017 Mapbox, Inc.
 | ||
|  | 
 | ||
|  | // SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
 | ||
|  | 
 | ||
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include "qgeomap.hpp"
 | ||
|  | 
 | ||
|  | #include <QMapLibre/Settings>
 | ||
|  | #include <QMapLibre/StyleParameter>
 | ||
|  | 
 | ||
|  | #include <QtLocation/private/qgeomap_p_p.h>
 | ||
|  | 
 | ||
|  | #include <QtCore/QHash>
 | ||
|  | #include <QtCore/QList>
 | ||
|  | #include <QtCore/QRectF>
 | ||
|  | #include <QtCore/QSharedPointer>
 | ||
|  | #include <QtCore/QTimer>
 | ||
|  | #include <QtCore/QVariant>
 | ||
|  | 
 | ||
|  | namespace QMapLibre {
 | ||
|  | 
 | ||
|  | class Map;
 | ||
|  | class StyleChange;
 | ||
|  | 
 | ||
|  | class QGeoMapMapLibrePrivate : public QGeoMapPrivate {
 | ||
|  |     Q_DECLARE_PUBLIC(QGeoMapMapLibre)
 | ||
|  | 
 | ||
|  | public:
 | ||
|  |     explicit QGeoMapMapLibrePrivate(QGeoMappingManagerEngine *engine);
 | ||
|  |     ~QGeoMapMapLibrePrivate() override;
 | ||
|  | 
 | ||
|  |     QSGNode *updateSceneGraph(QSGNode *oldNode, QQuickWindow *window);
 | ||
|  | 
 | ||
|  |     QGeoMap::ItemTypes supportedMapItemTypes() const override;
 | ||
|  |     void addMapItem(QDeclarativeGeoMapItemBase *item) override;
 | ||
|  |     void removeMapItem(QDeclarativeGeoMapItemBase *item) override;
 | ||
|  | 
 | ||
|  |     void addStyleParameter(StyleParameter *parameter);
 | ||
|  |     void removeStyleParameter(StyleParameter *parameter);
 | ||
|  |     void clearStyleParameters();
 | ||
|  | 
 | ||
|  |     /* Data members */
 | ||
|  |     enum SyncState : int {
 | ||
|  |         NoSync = 0,
 | ||
|  |         ViewportSync = 1 << 0,
 | ||
|  |         CameraDataSync = 1 << 1,
 | ||
|  |         MapTypeSync = 1 << 2,
 | ||
|  |         VisibleAreaSync = 1 << 3
 | ||
|  |     };
 | ||
|  |     Q_DECLARE_FLAGS(SyncStates, SyncState);
 | ||
|  | 
 | ||
|  |     Settings m_settings;
 | ||
|  |     QString m_mapItemsBefore;
 | ||
|  | 
 | ||
|  |     QList<StyleParameter *> m_mapParameters;
 | ||
|  | 
 | ||
|  |     QTimer m_refresh;
 | ||
|  |     bool m_shouldRefresh = true;
 | ||
|  |     bool m_warned = false;
 | ||
|  |     bool m_threadedRendering = false;
 | ||
|  |     bool m_styleLoaded = false;
 | ||
|  | 
 | ||
|  |     SyncStates m_syncState = NoSync;
 | ||
|  | 
 | ||
|  |     std::vector<std::unique_ptr<StyleChange>> m_styleChanges;
 | ||
|  | 
 | ||
|  | protected:
 | ||
|  |     void changeViewportSize(const QSize &size) override;
 | ||
|  |     void changeCameraData(const QGeoCameraData &data) override;
 | ||
|  | #if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
 | ||
|  |     void changeActiveMapType(const QGeoMapType &mapType) override;
 | ||
|  | #else
 | ||
|  |     void changeActiveMapType(const QGeoMapType mapType) override;
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  |     void setVisibleArea(const QRectF &visibleArea) override;
 | ||
|  |     QRectF visibleArea() const override;
 | ||
|  | 
 | ||
|  | private:
 | ||
|  |     Q_DISABLE_COPY(QGeoMapMapLibrePrivate);
 | ||
|  | 
 | ||
|  |     void syncStyleChanges(Map *map);
 | ||
|  |     void threadedRenderingHack(QQuickWindow *window, Map *map);
 | ||
|  | 
 | ||
|  |     QRectF m_visibleArea;
 | ||
|  | };
 | ||
|  | 
 | ||
|  | Q_DECLARE_OPERATORS_FOR_FLAGS(QGeoMapMapLibrePrivate::SyncStates)
 | ||
|  | 
 | ||
|  | } // namespace QMapLibre
 |