summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Wojciechowski <lucas@mapbox.com>2018-02-13 13:50:30 -0800
committerLucas Wojciechowski <lucas@mapbox.com>2018-03-07 11:46:16 -0800
commitbbdce800a597ea52abe6db23fa9ecf60ac3df4b3 (patch)
tree3a80091aa0d34fcc908830a3e79eb6560034d13d
parentaab8b157f1b96b8e1c0444cc1fbe4908dd63d7d2 (diff)
downloadqtlocation-mapboxgl-bbdce800a597ea52abe6db23fa9ecf60ac3df4b3.tar.gz
WIP
-rw-r--r--include/mbgl/style/filter.hpp4
-rw-r--r--include/mbgl/style/filter_evaluator.hpp10
-rw-r--r--src/mbgl/layout/symbol_layout.cpp2
-rw-r--r--src/mbgl/tile/geometry_tile_worker.cpp2
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();