summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2016-09-13 18:40:11 -0700
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-09-23 16:43:37 +0300
commit746bb678c8a16919adae94ac4cd1ccc8433c1b8c (patch)
tree6a6f4d30e3aa4d64991892c0b6d60c148faaccf5
parentc4420d081cb2678fb970a85eeae8645cf07deb8c (diff)
downloadqtlocation-mapboxgl-746bb678c8a16919adae94ac4cd1ccc8433c1b8c.tar.gz
[Qt] Add API for adding icon to the style
-rw-r--r--platform/qt/include/qmapboxgl.hpp3
-rw-r--r--platform/qt/src/qmapboxgl.cpp34
2 files changed, 28 insertions, 9 deletions
diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp
index bab46fd096..cb9bf1a2d5 100644
--- a/platform/qt/include/qmapboxgl.hpp
+++ b/platform/qt/include/qmapboxgl.hpp
@@ -202,6 +202,9 @@ public:
void addSource(const QString &sourceID, const QVariantMap& params);
void removeSource(const QString &sourceID);
+ void addImage(const QString &name, const QImage &sprite);
+ void removeImage(const QString &name);
+
void addCustomLayer(const QString &id,
QMapbox::CustomLayerInitializeFunction,
QMapbox::CustomLayerRenderFunction,
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp
index 6dd53d628c..3dfbde56a1 100644
--- a/platform/qt/src/qmapboxgl.cpp
+++ b/platform/qt/src/qmapboxgl.cpp
@@ -127,6 +127,18 @@ auto fromQStringList(const QStringList &list)
return strings;
}
+std::unique_ptr<const mbgl::SpriteImage> toSpriteImage(const QImage &sprite) {
+ const QImage swapped = sprite
+ .rgbSwapped()
+ .convertToFormat(QImage::Format_ARGB32_Premultiplied);
+
+ auto img = std::make_unique<uint8_t[]>(swapped.byteCount());
+ memcpy(img.get(), swapped.constBits(), swapped.byteCount());
+
+ return std::make_unique<mbgl::SpriteImage>(mbgl::PremultipliedImage
+ { size_t(swapped.width()), size_t(swapped.height()), std::move(img) }, 1.0);
+}
+
}
/*!
@@ -619,15 +631,7 @@ void QMapboxGL::addAnnotationIcon(const QString &name, const QImage &sprite)
{
if (sprite.isNull()) return;
- const QImage swapped = sprite
- .rgbSwapped()
- .convertToFormat(QImage::Format_ARGB32_Premultiplied);
-
- auto img = std::make_unique<uint8_t[]>(swapped.byteCount());
- memcpy(img.get(), swapped.constBits(), swapped.byteCount());
-
- d_ptr->mapObj->addAnnotationIcon(name.toStdString(), std::make_shared<mbgl::SpriteImage>(
- mbgl::PremultipliedImage { size_t(swapped.width()), size_t(swapped.height()), std::move(img) }, 1.0));
+ d_ptr->mapObj->addAnnotationIcon(name.toStdString(), std::move(toSpriteImage(sprite)));
}
QPointF QMapboxGL::pixelForCoordinate(const Coordinate &coordinate_) const
@@ -751,6 +755,18 @@ void QMapboxGL::removeLayer(const QString& id)
d_ptr->mapObj->removeLayer(id.toStdString());
}
+void QMapboxGL::addImage(const QString &name, const QImage &sprite)
+{
+ if (sprite.isNull()) return;
+
+ d_ptr->mapObj->addImage(name.toStdString(), toSpriteImage(sprite));
+}
+
+void QMapboxGL::removeImage(const QString &name)
+{
+ d_ptr->mapObj->removeImage(name.toStdString());
+}
+
void QMapboxGL::setFilter(const QString& layer_, const QVariant& filter_)
{
using namespace mbgl::style;