[Qt] Add API for adding icon to the style

This commit is contained in:
Thiago Marcos P. Santos
2016-09-13 18:40:11 -07:00
parent c4420d081c
commit 746bb678c8
2 changed files with 28 additions and 9 deletions

View File

@@ -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,

View File

@@ -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;