diff options
author | Lucas Wojciechowski <lucas@mapbox.com> | 2018-02-13 13:50:30 -0800 |
---|---|---|
committer | Lucas Wojciechowski <lucas@mapbox.com> | 2018-03-07 11:46:16 -0800 |
commit | bbdce800a597ea52abe6db23fa9ecf60ac3df4b3 (patch) | |
tree | 3a80091aa0d34fcc908830a3e79eb6560034d13d | |
parent | aab8b157f1b96b8e1c0444cc1fbe4908dd63d7d2 (diff) | |
download | qtlocation-mapboxgl-bbdce800a597ea52abe6db23fa9ecf60ac3df4b3.tar.gz |
WIP
-rw-r--r-- | include/mbgl/style/filter.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/style/filter_evaluator.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_worker.cpp | 2 |
4 files changed, 10 insertions, 8 deletions
diff --git a/include/mbgl/style/filter.hpp b/include/mbgl/style/filter.hpp index 4728b8a1c3..e27c3bfc10 100644 --- a/include/mbgl/style/filter.hpp +++ b/include/mbgl/style/filter.hpp @@ -236,7 +236,7 @@ public: class ExpressionFilter { public: - std::shared_ptr<mbgl::style::expression::Expression> expression; + std::shared_ptr<expression::Expression> expression; friend bool operator==(const ExpressionFilter& lhs, const ExpressionFilter& rhs) { return lhs.expression == rhs.expression; @@ -281,7 +281,7 @@ public: bool operator()(const GeometryTileFeature&) const; template <class PropertyAccessor> - bool operator()(FeatureType type, optional<FeatureIdentifier> id, PropertyAccessor accessor, float zoom) const; + bool operator()(FeatureType type, optional<FeatureIdentifier> id, PropertyAccessor accessor, expression::EvaluationContext context) const; }; } // namespace style diff --git a/include/mbgl/style/filter_evaluator.hpp b/include/mbgl/style/filter_evaluator.hpp index 67882d2c0d..747627210d 100644 --- a/include/mbgl/style/filter_evaluator.hpp +++ b/include/mbgl/style/filter_evaluator.hpp @@ -247,18 +247,20 @@ inline bool Filter::operator()(const Feature& feature) const { if (it == feature.properties.end()) return {}; return it->second; - }, 0); + + // TODO include GeoJSONFeature-wrapped feature + }, expression::EvaluationContext { 0.0 } ); } template <class GeometryTileFeature> bool Filter::operator()(const GeometryTileFeature& feature) const { - return operator()(feature.getType(), feature.getID(), [&] (const auto& key) { return feature.getValue(key); }, 0); + return operator()(feature.getType(), feature.getID(), [&] (const auto& key) { return feature.getValue(key); }, expression::EvaluationContext { &feature }); } template <class PropertyAccessor> // TODO add zoom & expression-compatible feature reference to this call -bool Filter::operator()(FeatureType type, optional<FeatureIdentifier> id, PropertyAccessor accessor, float zoom) const { - (void) zoom; + bool Filter::operator()(FeatureType type, optional<FeatureIdentifier> id, PropertyAccessor accessor, expression::EvaluationContext context) const { + (void) context; return FilterBase::visit(*this, FilterEvaluator<PropertyAccessor> { type, id, accessor }); } diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 8a70f9ce56..049c68a764 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -100,7 +100,7 @@ SymbolLayout::SymbolLayout(const BucketParameters& parameters, const size_t featureCount = sourceLayer->featureCount(); for (size_t i = 0; i < featureCount; ++i) { auto feature = sourceLayer->getFeature(i); - if (!leader.filter(feature->getType(), feature->getID(), [&] (const auto& key) { return feature->getValue(key); }, 0)) + if (!leader.filter(feature->getType(), feature->getID(), [&] (const auto& key) { return feature->getValue(key); }, expression::EvaluationContext { feature.get() })) continue; SymbolFeature ft(std::move(feature)); diff --git a/src/mbgl/tile/geometry_tile_worker.cpp b/src/mbgl/tile/geometry_tile_worker.cpp index ecbbcb5308..c80bd5ecd5 100644 --- a/src/mbgl/tile/geometry_tile_worker.cpp +++ b/src/mbgl/tile/geometry_tile_worker.cpp @@ -339,7 +339,7 @@ void GeometryTileWorker::redoLayout() { for (std::size_t i = 0; !obsolete && i < geometryLayer->featureCount(); i++) { std::unique_ptr<GeometryTileFeature> feature = geometryLayer->getFeature(i); - if (!filter(feature->getType(), feature->getID(), [&] (const auto& key) { return feature->getValue(key); }, 0)) + if (!filter(feature->getType(), feature->getID(), [&] (const auto& key) { return feature->getValue(key); }, expression::EvaluationContext { feature.get() })) continue; GeometryCollection geometries = feature->getGeometries(); |