diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-09-13 18:40:11 -0700 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-09-23 16:43:37 +0300 |
commit | 746bb678c8a16919adae94ac4cd1ccc8433c1b8c (patch) | |
tree | 6a6f4d30e3aa4d64991892c0b6d60c148faaccf5 /platform | |
parent | c4420d081cb2678fb970a85eeae8645cf07deb8c (diff) | |
download | qtlocation-mapboxgl-746bb678c8a16919adae94ac4cd1ccc8433c1b8c.tar.gz |
[Qt] Add API for adding icon to the style
Diffstat (limited to 'platform')
-rw-r--r-- | platform/qt/include/qmapboxgl.hpp | 3 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 34 |
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; |