diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-07-08 15:09:14 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-07-11 17:01:32 +0300 |
commit | 18c88301696de16037aaa2d3b9b31fdabc813696 (patch) | |
tree | 4f1db470cf3a91319493455fff3eb0ddcf86aad2 /platform/qt | |
parent | b59070590b71a4a433bbffbada7019bc2a3ef550 (diff) | |
download | qtlocation-mapboxgl-18c88301696de16037aaa2d3b9b31fdabc813696.tar.gz |
[Qt] Added set style filter method
Diffstat (limited to 'platform/qt')
-rw-r--r-- | platform/qt/include/qmapboxgl.hpp | 2 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 40 |
2 files changed, 42 insertions, 0 deletions
diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp index ad1f5e702c..1caee09be5 100644 --- a/platform/qt/include/qmapboxgl.hpp +++ b/platform/qt/include/qmapboxgl.hpp @@ -207,6 +207,8 @@ public: char* before = NULL); void removeCustomLayer(const QString& id); + void setFilter(const QString &layer, const QVariant &filter); + public slots: void render(); void connectionEstablished(); diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index a8fc51b236..c793353ac6 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -642,6 +642,46 @@ void QMapboxGL::removeCustomLayer(const QString& id) d_ptr->mapObj->removeLayer(id.toStdString()); } +void QMapboxGL::setFilter(const QString& layer_, const QVariant& filter_) +{ + using namespace mbgl::style; + using namespace mbgl::style::conversion; + + Layer* layer = d_ptr->mapObj->getLayer(layer_.toStdString()); + if (!layer) { + qWarning() << "Layer not found:" << layer_; + return; + } + + Filter filter; + + Result<Filter> converted = convert<Filter>(filter_); + if (!converted) { + qWarning() << "Error parsing filter:" << converted.error().message; + return; + } + filter = std::move(*converted); + + if (layer->is<FillLayer>()) { + layer->as<FillLayer>()->setFilter(filter); + return; + } + if (layer->is<LineLayer>()) { + layer->as<LineLayer>()->setFilter(filter); + return; + } + if (layer->is<SymbolLayer>()) { + layer->as<SymbolLayer>()->setFilter(filter); + return; + } + if (layer->is<CircleLayer>()) { + layer->as<CircleLayer>()->setFilter(filter); + return; + } + + qWarning() << "Layer doesn't support filters"; +} + void QMapboxGL::render() { d_ptr->dirty = false; |