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