diff --git a/platform/qt/include/qmapbox.hpp b/platform/qt/include/qmapbox.hpp index fe7c749e5..d9a9f37f3 100644 --- a/platform/qt/include/qmapbox.hpp +++ b/platform/qt/include/qmapbox.hpp @@ -3,6 +3,7 @@ #include #include +#include #include // This header follows the Qt coding style: https://wiki.qt.io/Qt_Coding_Style @@ -30,9 +31,19 @@ enum NetworkMode { Offline, }; +struct Q_DECL_EXPORT CameraOptions { + QVariant center; // Coordinate + QVariant anchor; // QPointF + QVariant zoom; // double + QVariant angle; // double + QVariant pitch; // double +}; + Q_DECL_EXPORT NetworkMode networkMode(); Q_DECL_EXPORT void setNetworkMode(NetworkMode); } +Q_DECLARE_METATYPE(QMapbox::Coordinate); + #endif // QMAPBOX_H diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp index f3e0af98e..866aa29ce 100644 --- a/platform/qt/include/qmapboxgl.hpp +++ b/platform/qt/include/qmapboxgl.hpp @@ -125,6 +125,8 @@ public: void setCoordinate(const QMapbox::Coordinate &); void setCoordinateZoom(const QMapbox::Coordinate &, double zoom); + void jumpTo(const QMapbox::CameraOptions&); + void setGestureInProgress(bool inProgress); void addClass(const QString &); diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index e7752df29..479f348d9 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -209,6 +210,32 @@ void QMapboxGL::setCoordinateZoom(const Coordinate &coordinate_, double zoom_) mbgl::LatLng { coordinate_.first, coordinate_.second }, zoom_, d_ptr->margins); } +void QMapboxGL::jumpTo(const CameraOptions& camera) +{ + mbgl::CameraOptions mbglCamera; + if (camera.center.isValid()) { + const Coordinate center = camera.center.value(); + mbglCamera.center = mbgl::LatLng { center.first, center.second }; + } + if (camera.anchor.isValid()) { + const QPointF anchor = camera.anchor.value(); + mbglCamera.anchor = mbgl::ScreenCoordinate { anchor.x(), anchor.y() }; + } + if (camera.zoom.isValid()) { + mbglCamera.zoom = camera.zoom.value(); + } + if (camera.angle.isValid()) { + mbglCamera.angle = -camera.angle.value() * mbgl::util::DEG2RAD; + } + if (camera.pitch.isValid()) { + mbglCamera.pitch = camera.pitch.value() * mbgl::util::DEG2RAD; + } + + mbglCamera.padding = d_ptr->margins; + + d_ptr->mapObj->jumpTo(mbglCamera); +} + double QMapboxGL::bearing() const { return d_ptr->mapObj->getBearing();