From 4a5dc37245d23805d13865f5ef9c5f26e539a9ca Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Thu, 14 Jun 2018 14:35:39 -0700 Subject: [core] Implement CrossFadedDataDrivenProperty to add support for feature expressions in `*-pattern` properties --- src/mbgl/renderer/property_evaluation_parameters.hpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/mbgl/renderer/property_evaluation_parameters.hpp') diff --git a/src/mbgl/renderer/property_evaluation_parameters.hpp b/src/mbgl/renderer/property_evaluation_parameters.hpp index da6a4a0892..0e1c317294 100644 --- a/src/mbgl/renderer/property_evaluation_parameters.hpp +++ b/src/mbgl/renderer/property_evaluation_parameters.hpp @@ -5,6 +5,13 @@ namespace mbgl { +class CrossfadeParameters { +public: + float fromScale; + float toScale; + float t; +}; + class PropertyEvaluationParameters { public: explicit PropertyEvaluationParameters(float z_) @@ -24,6 +31,18 @@ public: defaultFadeDuration(std::move(defaultFadeDuration_)), useIntegerZoom(useIntegerZoom_) {} + CrossfadeParameters getCrossfadeParameters() const { + const float fraction = z - std::floor(z); + const std::chrono::duration d = defaultFadeDuration; + const float t = d != std::chrono::duration::zero() + ? std::min((now - zoomHistory.lastIntegerZoomTime) / d, 1.0f) + : 1.0f; + + return z > zoomHistory.lastIntegerZoom + ? CrossfadeParameters { 2.0f, 1.0f, fraction + (1.0f - fraction) * t } + : CrossfadeParameters { 0.5f, 1.0f, 1 - (1 - t) * fraction }; + } + float z; TimePoint now; ZoomHistory zoomHistory; -- cgit v1.2.1