aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-09-07 16:43:47 -0700
committerAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-10-09 16:17:03 -0700
commit9913a1d787da3cea0323a70ef8fbbb604a7840d4 (patch)
tree3173a169e2e53aa0df8d3ebf23392004bc512110
parent0ab4b69b75f602991cd49ebdd1979543523d1021 (diff)
isFeatureStateDependent
-rw-r--r--src/mbgl/renderer/possibly_evaluated_property_value.hpp18
-rw-r--r--src/mbgl/style/properties.hpp22
2 files changed, 40 insertions, 0 deletions
diff --git a/src/mbgl/renderer/possibly_evaluated_property_value.hpp b/src/mbgl/renderer/possibly_evaluated_property_value.hpp
index 539df0933..b1fa0c502 100644
--- a/src/mbgl/renderer/possibly_evaluated_property_value.hpp
+++ b/src/mbgl/renderer/possibly_evaluated_property_value.hpp
@@ -26,6 +26,15 @@ public:
return value.template is<T>();
}
+ bool isFeatureStateDependent() const {
+ return this->match(
+ [&] (const T&) { return false; },
+ [&] (const style::PropertyExpression<T>& expression) {
+ return !expression.isFeatureStateConstant();
+ }
+ );
+ }
+
optional<T> constant() const {
return value.match(
[&] (const T& t) { return optional<T>(t); },
@@ -83,6 +92,15 @@ public:
[&] (const auto&) { return optional<Faded<T>>(); });
}
+ bool isFeatureStateDependent() const {
+ return value.match(
+ [&] (const Faded<T>&) { return false; },
+ [&] (const style::PropertyExpression<T>& expression) {
+ return !expression.isFeatureStateConstant();
+ }
+ );
+ }
+
Faded<T> constantOr(const Faded<T>& t) const {
return constant().value_or(t);
}
diff --git a/src/mbgl/style/properties.hpp b/src/mbgl/style/properties.hpp
index 1210ed914..ebc6e2ee3 100644
--- a/src/mbgl/style/properties.hpp
+++ b/src/mbgl/style/properties.hpp
@@ -169,6 +169,28 @@ public:
evaluate<Ps>(z, feature)...
};
}
+
+ template <class T>
+ static bool isFeatureStateDependent(const T&) {
+ return false;
+ }
+
+ template <class T>
+ static bool isFeatureStateDependent(const PossiblyEvaluatedPropertyValue<T>& v) {
+ return v.isFeatureStateDependent();
+ }
+
+ template <class P>
+ bool isFeatureStateDependent() const {
+ return isFeatureStateDependent(this->template get<P>());
+ }
+
+ bool isFeatureStateDependent() const {
+ bool result = false;
+ util::ignore({ result |= isFeatureStateDependent<Ps>()... });
+ return result;
+ }
+
};
class Unevaluated : public Tuple<UnevaluatedTypes> {