diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-04-28 16:33:09 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-04-28 16:33:09 -0700 |
commit | da78422c5c37b2150eefeb399658903e45bf05d9 (patch) | |
tree | 1a7219a082c02de4f9f4d1274abb289090989826 /src/mbgl/renderer | |
parent | 10528091db0baaad4b528555498d43236e32ccce (diff) | |
download | qtlocation-mapboxgl-da78422c5c37b2150eefeb399658903e45bf05d9.tar.gz |
[core] Prepare Filter for public API (#4900)
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.cpp | 23 | ||||
-rw-r--r-- | src/mbgl/renderer/symbol_bucket.hpp | 5 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/mbgl/renderer/symbol_bucket.cpp b/src/mbgl/renderer/symbol_bucket.cpp index cdb30bf222..c6d49101fc 100644 --- a/src/mbgl/renderer/symbol_bucket.cpp +++ b/src/mbgl/renderer/symbol_bucket.cpp @@ -1,4 +1,5 @@ #include <mbgl/renderer/symbol_bucket.hpp> +#include <mbgl/style/filter_evaluator.hpp> #include <mbgl/layer/symbol_layer.hpp> #include <mbgl/tile/geometry_tile.hpp> #include <mbgl/sprite/sprite_image.hpp> @@ -26,6 +27,7 @@ #include <mbgl/util/std.hpp> #include <mbgl/util/get_geometries.hpp> #include <mbgl/util/constants.hpp> +#include <mbgl/util/string.hpp> namespace mbgl { @@ -99,8 +101,7 @@ bool SymbolBucket::needsClipping() const { return mode == MapMode::Still; } -void SymbolBucket::parseFeatures(const GeometryTileLayer& layer, - const FilterExpression& filter) { +void SymbolBucket::parseFeatures(const GeometryTileLayer& layer, const Filter& filter) { const bool has_text = !layout.textField.value.empty() && !layout.textFont.value.empty(); const bool has_icon = !layout.iconImage.value.empty(); @@ -113,15 +114,27 @@ void SymbolBucket::parseFeatures(const GeometryTileLayer& layer, for (GLsizei i = 0; i < featureCount; i++) { auto feature = layer.getFeature(i); - GeometryTileFeatureExtractor extractor(*feature); - if (!evaluate(filter, extractor)) + FilterEvaluator<GeometryTileFeatureExtractor> evaluator(*feature); + if (!Filter::visit(filter, evaluator)) continue; SymbolFeature ft; auto getValue = [&feature](const std::string& key) -> std::string { auto value = feature->getValue(key); - return value ? toString(*value) : std::string(); + if (!value) + return std::string(); + if (value->is<std::string>()) + return value->get<std::string>(); + if (value->is<bool>()) + return value->get<bool>() ? "true" : "false"; + if (value->is<int64_t>()) + return util::toString(value->get<int64_t>()); + if (value->is<uint64_t>()) + return util::toString(value->get<uint64_t>()); + if (value->is<double>()) + return util::toString(value->get<double>()); + return "null"; }; if (has_text) { diff --git a/src/mbgl/renderer/symbol_bucket.hpp b/src/mbgl/renderer/symbol_bucket.hpp index 243ae99de9..1b37a1e005 100644 --- a/src/mbgl/renderer/symbol_bucket.hpp +++ b/src/mbgl/renderer/symbol_bucket.hpp @@ -13,7 +13,7 @@ #include <mbgl/text/collision_feature.hpp> #include <mbgl/text/shaping.hpp> #include <mbgl/text/quads.hpp> -#include <mbgl/style/filter_expression.hpp> +#include <mbgl/style/filter.hpp> #include <mbgl/layer/symbol_layer.hpp> #include <memory> @@ -88,8 +88,7 @@ public: void drawIcons(IconShader&, gl::GLObjectStore&); void drawCollisionBoxes(CollisionBoxShader&, gl::GLObjectStore&); - void parseFeatures(const GeometryTileLayer&, - const FilterExpression&); + void parseFeatures(const GeometryTileLayer&, const Filter&); bool needsDependencies(GlyphStore&, SpriteStore&); void placeFeatures(CollisionTile&) override; |