summaryrefslogtreecommitdiff
path: root/platform/qt
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-11 13:48:27 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-20 13:01:59 +0300
commit760a692378a8ae7c9cc87246c10f2fe9a64117bd (patch)
tree9503c6662a5807390700bb948096e82b544ebf19 /platform/qt
parent2f8fce7bdb0a60a1fb94a3f5bb9f35adf8795094 (diff)
downloadqtlocation-mapboxgl-760a692378a8ae7c9cc87246c10f2fe9a64117bd.tar.gz
[Qt] Added QMapbox::TransitionOptions to style class functions
Diffstat (limited to 'platform/qt')
-rw-r--r--platform/qt/app/mapwindow.cpp9
-rw-r--r--platform/qt/include/qmapbox.hpp5
-rw-r--r--platform/qt/include/qmapboxgl.hpp3
-rw-r--r--platform/qt/src/qmapboxgl.cpp86
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));