diff options
author | Molly Lloyd <molly@mapbox.com> | 2018-06-14 14:35:39 -0700 |
---|---|---|
committer | Molly Lloyd <mollymerp@users.noreply.github.com> | 2018-08-31 13:08:47 -0700 |
commit | 4a5dc37245d23805d13865f5ef9c5f26e539a9ca (patch) | |
tree | de77bfeff6f7afbe02210c9189bf72da59293083 /src/mbgl/renderer/data_driven_property_evaluator.hpp | |
parent | ec62e321531b1a836074056e86de8e20018280fb (diff) | |
download | qtlocation-mapboxgl-4a5dc37245d23805d13865f5ef9c5f26e539a9ca.tar.gz |
[core] Implement CrossFadedDataDrivenProperty to add support for feature expressions in `*-pattern` properties
Diffstat (limited to 'src/mbgl/renderer/data_driven_property_evaluator.hpp')
-rw-r--r-- | src/mbgl/renderer/data_driven_property_evaluator.hpp | 40 |
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 |