1 #pragma once
2 
3 #include <mbgl/style/property_value.hpp>
4 #include <mbgl/renderer/property_evaluation_parameters.hpp>
5 #include <mbgl/util/interpolate.hpp>
6 
7 namespace mbgl {
8 
9 template <typename T>
10 class Faded {
11 public:
12     T from;
13     T to;
14     float fromScale;
15     float toScale;
16     float t;
17 };
18 
19 template <typename T>
20 class CrossFadedPropertyEvaluator {
21 public:
22     using ResultType = Faded<T>;
23 
CrossFadedPropertyEvaluator(const PropertyEvaluationParameters & parameters_,T defaultValue_)24     CrossFadedPropertyEvaluator(const PropertyEvaluationParameters& parameters_, T defaultValue_)
25         : parameters(parameters_),
26           defaultValue(std::move(defaultValue_)) {}
27 
28     Faded<T> operator()(const style::Undefined&) const;
29     Faded<T> operator()(const T& constant) const;
30     Faded<T> operator()(const style::PropertyExpression<T>&) const;
31 
32 private:
33     Faded<T> calculate(const T& min, const T& mid, const T& max) const;
34 
35     const PropertyEvaluationParameters& parameters;
36     T defaultValue;
37 };
38 
39 namespace util {
40 template <typename T>
41 struct Interpolator<Faded<T>>
42     : Uninterpolated {};
43 } // namespace util
44 
45 } // namespace mbgl
46