diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-11 13:48:27 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-06-20 13:01:59 +0300 |
commit | 760a692378a8ae7c9cc87246c10f2fe9a64117bd (patch) | |
tree | 9503c6662a5807390700bb948096e82b544ebf19 /platform/qt | |
parent | 2f8fce7bdb0a60a1fb94a3f5bb9f35adf8795094 (diff) | |
download | qtlocation-mapboxgl-760a692378a8ae7c9cc87246c10f2fe9a64117bd.tar.gz |
[Qt] Added QMapbox::TransitionOptions to style class functions
Diffstat (limited to 'platform/qt')
-rw-r--r-- | platform/qt/app/mapwindow.cpp | 9 | ||||
-rw-r--r-- | platform/qt/include/qmapbox.hpp | 5 | ||||
-rw-r--r-- | platform/qt/include/qmapboxgl.hpp | 3 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 86 |
4 files changed, 75 insertions, 28 deletions
diff --git a/platform/qt/app/mapwindow.cpp b/platform/qt/app/mapwindow.cpp index 35f56a0bef..da8a9767ce 100644 --- a/platform/qt/app/mapwindow.cpp +++ b/platform/qt/app/mapwindow.cpp @@ -67,6 +67,8 @@ void MapWindow::changeStyle() void MapWindow::keyPressEvent(QKeyEvent *ev) { + static const QMapbox::TransitionOptions transition { 300, {} }; + switch (ev->key()) { case Qt::Key_S: changeStyle(); @@ -74,6 +76,13 @@ void MapWindow::keyPressEvent(QKeyEvent *ev) case Qt::Key_Tab: m_map.cycleDebugOptions(); break; + case Qt::Key_R: + if (m_map.hasClass("night")) { + m_map.removeClass("night", transition); + } else { + m_map.addClass("night", transition); + } + break; default: break; } diff --git a/platform/qt/include/qmapbox.hpp b/platform/qt/include/qmapbox.hpp index 3200da2729..1f4f22f5f1 100644 --- a/platform/qt/include/qmapbox.hpp +++ b/platform/qt/include/qmapbox.hpp @@ -54,6 +54,11 @@ struct Q_DECL_EXPORT CustomLayerRenderParameters { double altitude; }; +struct Q_DECL_EXPORT TransitionOptions { + QVariant duration; // qint64 + QVariant delay; // qint64 +}; + typedef void (*CustomLayerInitializeFunction)(void* context) ; typedef void (*CustomLayerRenderFunction)(void* context, const CustomLayerRenderParameters&); typedef void (*CustomLayerDeinitializeFunction)(void* context); diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp index 8ce6b02f47..309aef1c77 100644 --- a/platform/qt/include/qmapboxgl.hpp +++ b/platform/qt/include/qmapboxgl.hpp @@ -159,9 +159,12 @@ public: void setGestureInProgress(bool inProgress); void addClass(const QString &); + void addClass(const QString &, const QMapbox::TransitionOptions &); void removeClass(const QString &); + void removeClass(const QString &, const QMapbox::TransitionOptions &); bool hasClass(const QString &) const; void setClasses(const QStringList &); + void setClasses(const QStringList &, const QMapbox::TransitionOptions &); QStringList getClasses() const; QMapbox::AnnotationID addPointAnnotation(const QMapbox::PointAnnotation &); diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index 9b1c58b6c4..76b643f40a 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -5,6 +5,7 @@ #include <mbgl/map/camera.hpp> #include <mbgl/map/map.hpp> #include <mbgl/style/layers/custom_layer.hpp> +#include <mbgl/style/transition_options.hpp> #include <mbgl/sprite/sprite_image.hpp> #include <mbgl/storage/network_status.hpp> #include <mbgl/util/constants.hpp> @@ -73,6 +74,48 @@ namespace { QThreadStorage<std::shared_ptr<mbgl::util::RunLoop>> loop; +// Convertion helper functions. + +auto fromQMapboxGLShapeAnnotation(const ShapeAnnotation &shapeAnnotation) { + const CoordinateSegments &segments = shapeAnnotation.first; + const QString &styleLayer = shapeAnnotation.second; + + mbgl::Polygon<double> polygon; + polygon.reserve(segments.size()); + + for (const Coordinates &coordinates : segments) { + mbgl::LinearRing<double> linearRing; + linearRing.reserve(coordinates.size()); + + for (const Coordinate &coordinate : coordinates) { + linearRing.emplace_back(mbgl::Point<double> { coordinate.first, coordinate.second }); + } + + polygon.push_back(std::move(linearRing)); + } + + return mbgl::StyleSourcedAnnotation { std::move(polygon), styleLayer.toStdString() }; +} + +auto fromQMapboxTransitionOptions(const QMapbox::TransitionOptions &options) { + auto convert = [](auto& value) -> mbgl::optional<mbgl::Duration> { + if (value.isValid()) { + return std::chrono::duration_cast<mbgl::Duration>(mbgl::Milliseconds(value.template value<qint64>())); + }; + return {}; + }; + return mbgl::style::TransitionOptions { convert(options.duration), convert(options.delay) }; +} + +auto fromQStringList(const QStringList &list) +{ + std::vector<std::string> strings(list.size()); + for (const QString &string : list) { + strings.emplace_back(string.toStdString()); + } + return strings; +} + } QMapboxGLSettings::QMapboxGLSettings() @@ -345,11 +388,21 @@ void QMapboxGL::addClass(const QString &className) d_ptr->mapObj->addClass(className.toStdString()); } +void QMapboxGL::addClass(const QString &className, const QMapbox::TransitionOptions &options) +{ + d_ptr->mapObj->addClass(className.toStdString(), fromQMapboxTransitionOptions(options)); +} + void QMapboxGL::removeClass(const QString &className) { d_ptr->mapObj->removeClass(className.toStdString()); } +void QMapboxGL::removeClass(const QString &className, const QMapbox::TransitionOptions &options) +{ + d_ptr->mapObj->removeClass(className.toStdString(), fromQMapboxTransitionOptions(options)); +} + bool QMapboxGL::hasClass(const QString &className) const { return d_ptr->mapObj->hasClass(className.toStdString()); @@ -357,14 +410,12 @@ bool QMapboxGL::hasClass(const QString &className) const void QMapboxGL::setClasses(const QStringList &classNames) { - std::vector<std::string> mbglClassNames; - mbglClassNames.reserve(classNames.size()); - - for (const QString &className : classNames) { - mbglClassNames.emplace_back(className.toStdString()); - } + d_ptr->mapObj->setClasses(fromQStringList(classNames)); +} - d_ptr->mapObj->setClasses(mbglClassNames); +void QMapboxGL::setClasses(const QStringList &classNames, const QMapbox::TransitionOptions &options) +{ + d_ptr->mapObj->setClasses(fromQStringList(classNames), fromQMapboxTransitionOptions(options)); } QStringList QMapboxGL::getClasses() const @@ -392,27 +443,6 @@ void QMapboxGL::updatePointAnnotation(AnnotationID id, const PointAnnotation &po d_ptr->mapObj->updateAnnotation(id, fromPointAnnotation(pointAnnotation)); } -mbgl::Annotation fromQMapboxGLShapeAnnotation(const ShapeAnnotation &shapeAnnotation) { - const CoordinateSegments &segments = shapeAnnotation.first; - const QString &styleLayer = shapeAnnotation.second; - - mbgl::Polygon<double> polygon; - polygon.reserve(segments.size()); - - for (const Coordinates &coordinates : segments) { - mbgl::LinearRing<double> linearRing; - linearRing.reserve(coordinates.size()); - - for (const Coordinate &coordinate : coordinates) { - linearRing.emplace_back(mbgl::Point<double> { coordinate.first, coordinate.second }); - } - - polygon.push_back(std::move(linearRing)); - } - - return mbgl::StyleSourcedAnnotation { polygon, styleLayer.toStdString() }; -} - AnnotationID QMapboxGL::addShapeAnnotation(const ShapeAnnotation &shapeAnnotation) { return d_ptr->mapObj->addAnnotation(fromQMapboxGLShapeAnnotation(shapeAnnotation)); |