diff options
author | Juha Alanen <juha.alanen@mapbox.com> | 2019-08-21 16:21:46 +0300 |
---|---|---|
committer | Juha Alanen <19551460+jmalanen@users.noreply.github.com> | 2019-09-18 14:29:15 +0300 |
commit | 75d18e32fce61f4c20cc2fe78d4cdf5eb357ccca (patch) | |
tree | a75a88058a4f917ac2adaf1f5e381ca3aae98fcd /src/mbgl | |
parent | e51fafd4ebab154472e8d00a8b16a374728f0863 (diff) | |
download | qtlocation-mapboxgl-75d18e32fce61f4c20cc2fe78d4cdf5eb357ccca.tar.gz |
[core] Add feature state support to expression
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/renderer/possibly_evaluated_property_value.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/style/properties.hpp | 17 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/mbgl/renderer/possibly_evaluated_property_value.hpp b/src/mbgl/renderer/possibly_evaluated_property_value.hpp index 625235011c..2e47e6c854 100644 --- a/src/mbgl/renderer/possibly_evaluated_property_value.hpp +++ b/src/mbgl/renderer/possibly_evaluated_property_value.hpp @@ -49,6 +49,16 @@ public: } ); } + + template <class Feature> + T evaluate(const Feature& feature, float zoom, const FeatureState& featureState, T defaultValue) const { + return this->match( + [&] (const T& constant_) { return constant_; }, + [&] (const style::PropertyExpression<T>& expression) { + return expression.evaluate(zoom, feature, featureState, defaultValue); + } + ); + } }; template <class T> diff --git a/src/mbgl/style/properties.hpp b/src/mbgl/style/properties.hpp index 9d66f850de..b07456a96d 100644 --- a/src/mbgl/style/properties.hpp +++ b/src/mbgl/style/properties.hpp @@ -180,11 +180,28 @@ public: }); } + template <class T> + static T evaluate(float z, const GeometryTileFeature& feature, const FeatureState& state, + const PossiblyEvaluatedPropertyValue<T>& v, const T& defaultValue) { + return v.match( + [&] (const T& t) { + return t; + }, + [&] (const PropertyExpression<T>& t) { + return t.evaluate(z, feature, state, defaultValue); + }); + } + template <class P> auto evaluate(float z, const GeometryTileFeature& feature) const { return evaluate(z, feature, this->template get<P>(), P::defaultValue()); } + template <class P> + auto evaluate(float z, const GeometryTileFeature& feature, const FeatureState& state) const { + return evaluate(z, feature, state, this->template get<P>(), P::defaultValue()); + } + Evaluated evaluate(float z, const GeometryTileFeature& feature) const { return Evaluated { evaluate<Ps>(z, feature)... |