Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qgeomap.cpp
Go to the documentation of this file.
1// Copyright (C) 2015 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qgeomap_p.h"
5#include "qgeomap_p_p.h"
9#include <QDebug>
10#include <QRectF>
11
13
14QGeoMap::QGeoMap(QGeoMapPrivate &dd, QObject *parent)
15 : QObject(dd,parent)
16{
17}
18
19QGeoMap::~QGeoMap()
20{
21}
22
23void QGeoMap::setViewportSize(const QSize& size)
24{
25 Q_D(QGeoMap);
26 if (size == d->m_viewportSize)
27 return;
28 d->m_viewportSize = size;
29 d->m_geoProjection->setViewportSize(size);
30 d->changeViewportSize(size);
31}
32
33QSize QGeoMap::viewportSize() const
34{
35 Q_D(const QGeoMap);
36 return d->m_viewportSize;
37}
38
39int QGeoMap::viewportWidth() const
40{
41 Q_D(const QGeoMap);
42 return d->m_viewportSize.width();
43}
44
45int QGeoMap::viewportHeight() const
46{
47 Q_D(const QGeoMap);
48 return d->m_viewportSize.height();
49}
50
51void QGeoMap::setCameraData(const QGeoCameraData &cameraData)
52{
53 Q_D(QGeoMap);
54 if (cameraData == d->m_cameraData)
55 return;
56 d->m_cameraData = cameraData;
57 d->m_geoProjection->setCameraData(cameraData, false);
58 d->changeCameraData(cameraData);
59 emit cameraDataChanged(d->m_cameraData);
60}
61
62void QGeoMap::setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities)
63{
64 Q_D(QGeoMap);
65 d->setCameraCapabilities(cameraCapabilities);
66}
67
68bool QGeoMap::handleEvent(QEvent *event)
69{
70 Q_UNUSED(event);
71 return false;
72}
73
74bool QGeoMap::setBearing(qreal bearing, const QGeoCoordinate &coordinate) //FIXME visibleArea
75{
76 Q_D(QGeoMap);
77 bool res = d->m_geoProjection->setBearing(bearing, coordinate);
78 if (!res)
79 return false;
80
81 setCameraData(geoProjection().cameraData());
82 return true;
83}
84
85bool QGeoMap::anchorCoordinateToPoint(const QGeoCoordinate &coordinate, const QPointF &anchorPoint)
86{
87 Q_D(QGeoMap);
88 QGeoCoordinate newCenter = geoProjection().anchorCoordinateToPoint(coordinate, anchorPoint);
89 newCenter.setLatitude(qBound(d->m_minimumViewportLatitude, newCenter.latitude(), d->m_maximumViewportLatitude));
90 QGeoCameraData data = cameraData();
91 if (data.center() != newCenter) {
92 data.setCenter(newCenter);
93 setCameraData(data);
94 return true;
95 }
96 return false;
97}
98
99bool QGeoMap::fitViewportToGeoRectangle(const QGeoRectangle &rectangle, const QMargins &borders)
100{
101 Q_UNUSED(rectangle);
102 Q_UNUSED(borders);
103 return false;
104}
105
106QGeoShape QGeoMap::visibleRegion() const
107{
108 return geoProjection().visibleRegion();
109}
110
111const QGeoCameraData &QGeoMap::cameraData() const
112{
113 Q_D(const QGeoMap);
114 return d->m_cameraData;
115}
116
117void QGeoMap::setActiveMapType(const QGeoMapType &type)
118{
119 Q_D(QGeoMap);
120 if (type == d->m_activeMapType)
121 return;
122 d->m_activeMapType = type;
123 d->setCameraCapabilities(d->m_engine->cameraCapabilities(type.mapId())); // emits
124 d->changeActiveMapType(type);
125 emit activeMapTypeChanged();
126}
127
128QGeoMapType QGeoMap::activeMapType() const
129{
130 Q_D(const QGeoMap);
131 return d->m_activeMapType;
132}
133
134double QGeoMap::minimumZoom() const
135{
136 Q_D(const QGeoMap);
137 return d->m_geoProjection->minimumZoom();
138}
139
140double QGeoMap::maximumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
141{
142 Q_D(const QGeoMap);
143 return d->maximumCenterLatitudeAtZoom(cameraData);
144}
145
146double QGeoMap::minimumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
147{
148 Q_D(const QGeoMap);
149 return d->minimumCenterLatitudeAtZoom(cameraData);
150}
151
152double QGeoMap::mapWidth() const
153{
154 Q_D(const QGeoMap);
155 return d->mapWidth();
156}
157
158double QGeoMap::mapHeight() const
159{
160 Q_D(const QGeoMap);
161 return d->mapHeight();
162}
163
164const QGeoProjection &QGeoMap::geoProjection() const
165{
166 Q_D(const QGeoMap);
167 return *(d->m_geoProjection);
168}
169
170QGeoCameraCapabilities QGeoMap::cameraCapabilities() const
171{
172 Q_D(const QGeoMap);
173 return d->m_cameraCapabilities;
174}
175
176QGeoMap::Capabilities QGeoMap::capabilities() const
177{
178 return Capabilities(QGeoMap::SupportsNothing);
179}
180
181void QGeoMap::prefetchData()
182{
183
184}
185
186void QGeoMap::clearData()
187{
188
189}
190
191QGeoMap::ItemTypes QGeoMap::supportedMapItemTypes() const
192{
193 Q_D(const QGeoMap);
194 return d->supportedMapItemTypes();
195}
196
197void QGeoMap::addMapItem(QDeclarativeGeoMapItemBase *item)
198{
199 Q_D(QGeoMap);
200 if (item && !d->m_mapItems.contains(item) && d->supportedMapItemTypes() & item->itemType()) {
201 d->m_mapItems.append(item);
202 d->addMapItem(item);
203 }
204}
205
206void QGeoMap::removeMapItem(QDeclarativeGeoMapItemBase *item)
207{
208 Q_D(QGeoMap);
209 if (item && d->m_mapItems.contains(item)) {
210 d->removeMapItem(item);
211 d->m_mapItems.removeOne(item);
212 }
213}
214
215void QGeoMap::clearMapItems()
216{
217 Q_D(QGeoMap);
218 for (QDeclarativeGeoMapItemBase *p : d->m_mapItems)
219 d->removeMapItem(p);
220 d->m_mapItems.clear();
221}
222
223void QGeoMap::setItemToWindowTransform(const QTransform &itemToWindowTransform)
224{
225 Q_D(QGeoMap);
226 d->m_geoProjection->setItemToWindowTransform(itemToWindowTransform);
227}
228
229void QGeoMap::setVisibleArea(const QRectF &visibleArea)
230{
231 Q_D(QGeoMap);
232 const QRectF &va = d->visibleArea();
233 d->setVisibleArea(visibleArea);
234 if (va != d->visibleArea())
235 emit visibleAreaChanged();
236}
237
238QRectF QGeoMap::visibleArea() const
239{
240 Q_D(const QGeoMap);
241 return d->visibleArea();
242}
243
244QString QGeoMap::copyrightsStyleSheet() const
245{
246 return QStringLiteral("#copyright-root { background: rgba(255, 255, 255, 128) }");
247}
248
249void QGeoMap::setAcceptedGestures(bool pan, bool flick, bool pinch, bool rotate, bool tilt)
250{
251 Q_UNUSED(pan);
252 Q_UNUSED(flick);
253 Q_UNUSED(pinch);
254 Q_UNUSED(rotate);
255 Q_UNUSED(tilt);
256}
257
258void QGeoMap::setCopyrightVisible(bool visible)
259{
260 Q_D(QGeoMap);
261 if (d->m_copyrightVisible == visible)
262 return;
263
264 d->m_copyrightVisible = visible;
265}
266
267QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine, QGeoProjection *geoProjection)
268 : QObjectPrivate(),
269 m_geoProjection(geoProjection),
270 m_engine(engine)
271{
272 // Setting the default camera caps without emitting anything
273 if (engine)
274 m_cameraCapabilities = m_engine->cameraCapabilities(m_activeMapType.mapId());
275}
276
277QGeoMapPrivate::~QGeoMapPrivate()
278{
279 if (m_geoProjection)
280 delete m_geoProjection;
281}
282
283void QGeoMapPrivate::setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities)
284{
285 Q_Q(QGeoMap);
286 if (m_cameraCapabilities == cameraCapabilities)
287 return;
288 QGeoCameraCapabilities oldCaps = m_cameraCapabilities;
289 m_cameraCapabilities = cameraCapabilities;
290 emit q->cameraCapabilitiesChanged(oldCaps);
291}
292
293const QGeoCameraCapabilities &QGeoMapPrivate::cameraCapabilities() const
294{
295 return m_cameraCapabilities;
296}
297
298const QGeoMapPrivate *QGeoMapPrivate::get(const QGeoMap &map)
299{
300 return map.d_func();
301}
302
303QGeoMap::ItemTypes QGeoMapPrivate::supportedMapItemTypes() const
304{
305 return QGeoMap::NoItem;
306}
307
308void QGeoMapPrivate::addMapItem(QDeclarativeGeoMapItemBase *item)
309{
310 Q_UNUSED(item);
311}
312
313void QGeoMapPrivate::removeMapItem(QDeclarativeGeoMapItemBase *item)
314{
315 Q_UNUSED(item);
316}
317
318double QGeoMapPrivate::mapWidth() const
319{
320 if (m_geoProjection->projectionType() == QGeoProjection::ProjectionWebMercator)
321 return static_cast<const QGeoProjectionWebMercator *>(m_geoProjection)->mapWidth();
322 return 0; // override this for maps supporting other projections
323}
324
325double QGeoMapPrivate::mapHeight() const
326{
327 if (m_geoProjection->projectionType() == QGeoProjection::ProjectionWebMercator)
328 return static_cast<const QGeoProjectionWebMercator *>(m_geoProjection)->mapHeight();
329 return 0; // override this for maps supporting other projections
330}
331
332void QGeoMapPrivate::setCopyrightVisible(bool visible)
333{
334 m_copyrightVisible = visible;
335}
336
337bool QGeoMapPrivate::copyrightVisible() const
338{
339 return m_copyrightVisible;
340}
341
342double QGeoMapPrivate::maximumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
343{
344 m_maximumViewportLatitude = m_geoProjection->maximumCenterLatitudeAtZoom(cameraData);
345 return m_maximumViewportLatitude;
346}
347
348double QGeoMapPrivate::minimumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
349{
350 m_minimumViewportLatitude = m_geoProjection->minimumCenterLatitudeAtZoom(cameraData);
351 return m_minimumViewportLatitude;
352}
353
354void QGeoMapPrivate::setVisibleArea(const QRectF &/*visibleArea*/)
355{
356
357}
358
359QRectF QGeoMapPrivate::visibleArea() const
360{
361 return QRectF();
362}
363
364QRectF QGeoMapPrivate::clampVisibleArea(const QRectF &visibleArea) const
365{
366 qreal xp = qMin<qreal>(visibleArea.x(), qMax(m_viewportSize.width() - 1, 0));
367 qreal yp = qMin<qreal>(visibleArea.y(), qMax(m_viewportSize.height() - 1, 0));
368 qreal w = qMin<qreal>(visibleArea.width(), qMax<qreal>(m_viewportSize.width() - xp, 0));
369 qreal h = qMin<qreal>(visibleArea.height(), qMax<qreal>(m_viewportSize.height() - yp, 0));
370 return QRectF(xp, yp, w, h);
371}
372
373QT_END_NAMESPACE