summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-04-28 16:33:09 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-04-28 16:33:09 -0700
commitda78422c5c37b2150eefeb399658903e45bf05d9 (patch)
tree1a7219a082c02de4f9f4d1274abb289090989826 /src/mbgl/renderer
parent10528091db0baaad4b528555498d43236e32ccce (diff)
downloadqtlocation-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.cpp23
-rw-r--r--src/mbgl/renderer/symbol_bucket.hpp5
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;