summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/data_driven_property_evaluator.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/data_driven_property_evaluator.hpp')
-rw-r--r--src/mbgl/renderer/data_driven_property_evaluator.hpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mbgl/renderer/data_driven_property_evaluator.hpp b/src/mbgl/renderer/data_driven_property_evaluator.hpp
index f9452cc572..d65ac36713 100644
--- a/src/mbgl/renderer/data_driven_property_evaluator.hpp
+++ b/src/mbgl/renderer/data_driven_property_evaluator.hpp
@@ -3,6 +3,7 @@
#include <mbgl/style/property_value.hpp>
#include <mbgl/renderer/property_evaluation_parameters.hpp>
#include <mbgl/renderer/possibly_evaluated_property_value.hpp>
+#include <mbgl/renderer/cross_faded_property_evaluator.hpp>
namespace mbgl {
@@ -40,4 +41,43 @@ private:
T defaultValue;
};
+template <typename T>
+class DataDrivenPropertyEvaluator<Faded<T>> {
+public:
+ using ResultType = PossiblyEvaluatedPropertyValue<Faded<T>>;
+
+ DataDrivenPropertyEvaluator(const PropertyEvaluationParameters& parameters_, T defaultValue_)
+ : parameters(parameters_),
+ defaultValue(std::move(defaultValue_)) {}
+
+ ResultType operator()(const T& constant) const {
+ return ResultType(calculate(constant, constant, constant));
+ }
+
+ ResultType operator()(const style::Undefined& ) const {
+ return ResultType(calculate(defaultValue, defaultValue, defaultValue));
+ }
+
+ ResultType operator()(const style::PropertyExpression<T>& expression) const {
+ if (!expression.isFeatureConstant()) {
+ return ResultType(expression);
+ } else {
+ const T evaluated = expression.evaluate(floor(parameters.z));
+ return ResultType(calculate(evaluated, evaluated, evaluated));
+ }
+ }
+
+
+private:
+ Faded<T> calculate(const T& min, const T& mid, const T& max) const {
+ const float z = parameters.z;
+ return z > parameters.zoomHistory.lastIntegerZoom
+ ? Faded<T> { min, mid }
+ : Faded<T> { max, mid };
+ };
+
+ const PropertyEvaluationParameters& parameters;
+ T defaultValue;
+};
+
} // namespace mbgl