diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-07-14 15:14:39 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-07-14 16:58:32 +0300 |
commit | 0ea8a37cb081302707c7815f3df5745bd3d6eef3 (patch) | |
tree | 1a6d5511d12ee57e461b48b6552bef47e9a053aa /src/mbgl/style | |
parent | 2aad2f4e14ab762847141788e725d50e1ee44ace (diff) | |
download | qtlocation-mapboxgl-0ea8a37cb081302707c7815f3df5745bd3d6eef3.tar.gz |
Unify default transition values in MapData
Relevant changes:
- Added 'defaultFadeDuration' and 'defaultTransitionDelay' to MapData;
- Painter & StyleParser now receives a reference to MapData;
- As previously seen on the code: 300ms is the default fade duration
and 0ms is the default transition duration;
- We no longer pass the current time point to Style, since it now uses
MapData.animationTime, which gets updated in MapContext::update().
- Updated StyleParser check to use a mock MapData;
Diffstat (limited to 'src/mbgl/style')
-rw-r--r-- | src/mbgl/style/piecewisefunction_properties.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/style/property_transition.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 19 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/style/style_parser.cpp | 30 | ||||
-rw-r--r-- | src/mbgl/style/style_parser.hpp | 5 |
6 files changed, 33 insertions, 30 deletions
diff --git a/src/mbgl/style/piecewisefunction_properties.hpp b/src/mbgl/style/piecewisefunction_properties.hpp index 0440655ba5..f05ee68647 100644 --- a/src/mbgl/style/piecewisefunction_properties.hpp +++ b/src/mbgl/style/piecewisefunction_properties.hpp @@ -11,7 +11,6 @@ template <typename T> struct PiecewiseConstantFunction { inline PiecewiseConstantFunction(const std::vector<std::pair<float, T>> &values_, std::chrono::duration<float> duration_) : values(values_), duration(duration_) {} inline PiecewiseConstantFunction(T &value, std::chrono::duration<float> duration_) : values({{ 0, value }}), duration(duration_) {} - inline PiecewiseConstantFunction() : values(), duration(std::chrono::milliseconds(300)) {} T evaluate(float z, const ZoomHistory &zoomHistory) const; private: diff --git a/src/mbgl/style/property_transition.hpp b/src/mbgl/style/property_transition.hpp index 584d67db55..4515fdc921 100644 --- a/src/mbgl/style/property_transition.hpp +++ b/src/mbgl/style/property_transition.hpp @@ -8,6 +8,8 @@ namespace mbgl { struct PropertyTransition { + explicit inline PropertyTransition(const Duration& duration_, const Duration& delay_) + : duration(duration_), delay(delay_) {} Duration duration = Duration::zero(); Duration delay = Duration::zero(); }; diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 415e342461..9945924082 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -7,6 +7,7 @@ #include <mbgl/style/style_layer.hpp> #include <mbgl/style/style_parser.hpp> #include <mbgl/style/style_bucket.hpp> +#include <mbgl/style/property_transition.hpp> #include <mbgl/geometry/glyph_atlas.hpp> #include <mbgl/geometry/sprite_atlas.hpp> #include <mbgl/geometry/line_atlas.hpp> @@ -41,7 +42,7 @@ void Style::setJSON(const std::string& json, const std::string&) { return; } - StyleParser parser; + StyleParser parser(data); parser.parse(doc); sources = parser.getSources(); @@ -86,23 +87,25 @@ void Style::update(const TransformState& transform, } } -void Style::cascade(const std::vector<std::string>& classes, const TimePoint& now) { +void Style::cascade() { for (const auto& layer : layers) { - layer->setClasses(classes, now, defaultTransition); + layer->setClasses(data.getClasses(), + data.getAnimationTime(), + PropertyTransition { data.getDefaultTransitionDuration(), data.getDefaultTransitionDelay() }); } } -void Style::recalculate(float z, const TimePoint& now) { +void Style::recalculate(float z) { uv::writelock lock(mtx); for (const auto& source : sources) { source->enabled = false; } - zoomHistory.update(z, now); + zoomHistory.update(z, data.getAnimationTime()); for (const auto& layer : layers) { - layer->updateProperties(z, now, zoomHistory); + layer->updateProperties(z, data.getAnimationTime(), zoomHistory); if (!layer->bucket) { continue; } @@ -124,10 +127,6 @@ Source* Style::getSource(const std::string& id) const { return it != sources.end() ? it->get() : nullptr; } -void Style::setDefaultTransitionDuration(Duration duration) { - defaultTransition.duration = duration; -} - bool Style::hasTransitions() const { for (const auto& layer : layers) { if (layer->hasTransitions()) { diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 16e0afcd4c..6d8a7ae522 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -54,10 +54,9 @@ public: // a tile is ready so observers can render the tile. void update(const TransformState&, TexturePool&); - void cascade(const std::vector<std::string>&, const TimePoint& now); - void recalculate(float z, const TimePoint& now); + void cascade(); + void recalculate(float z); - void setDefaultTransitionDuration(Duration); bool hasTransitions() const; std::exception_ptr getLastError() const { @@ -101,7 +100,6 @@ private: std::exception_ptr lastError; - PropertyTransition defaultTransition; std::unique_ptr<uv::rwlock> mtx; ZoomHistory zoomHistory; diff --git a/src/mbgl/style/style_parser.cpp b/src/mbgl/style/style_parser.cpp index 53313a548c..4767bdafa3 100644 --- a/src/mbgl/style/style_parser.cpp +++ b/src/mbgl/style/style_parser.cpp @@ -2,6 +2,7 @@ #include <mbgl/map/source.hpp> #include <mbgl/style/style_layer.hpp> #include <mbgl/map/annotation.hpp> +#include <mbgl/map/map_data.hpp> #include <mbgl/util/constants.hpp> #include <mbgl/util/vec.hpp> #include <mbgl/util/uv_detail.hpp> @@ -21,7 +22,8 @@ namespace mbgl { using JSVal = const rapidjson::Value&; -StyleParser::StyleParser() { +StyleParser::StyleParser(MapData& data_) + : data(data_) { } void StyleParser::parse(JSVal document) { @@ -399,13 +401,13 @@ template <typename T> StyleParser::Result<PiecewiseConstantFunction<T>> StyleParser::parsePiecewiseConstantFunction(JSVal value, Duration duration) { if (!value.HasMember("stops")) { Log::Warning(Event::ParseStyle, "function must specify a function type"); - return Result<PiecewiseConstantFunction<T>> { StyleParserFailure, {} }; + return Result<PiecewiseConstantFunction<T>> { StyleParserFailure, { {}, duration } }; } auto stops = parseStops<T>(value["stops"], ""); if (!std::get<0>(stops)) { - return Result<PiecewiseConstantFunction<T>> { StyleParserFailure, {} }; + return Result<PiecewiseConstantFunction<T>> { StyleParserFailure, { {}, duration } }; } return Result<PiecewiseConstantFunction<T>> { StyleParserSuccess, { std::get<1>(stops), duration } }; @@ -578,20 +580,21 @@ template<> StyleParser::Result<RotationAlignmentType> StyleParser::parseProperty } template<> StyleParser::Result<PropertyTransition> StyleParser::parseProperty(JSVal value, const char */*property_name*/) { - PropertyTransition transition; + PropertyTransition transition { data.getDefaultTransitionDuration(), data.getDefaultTransitionDelay() }; if (value.IsObject()) { + bool parsed = false; if (value.HasMember("duration") && value["duration"].IsNumber()) { transition.duration = std::chrono::milliseconds(value["duration"].GetUint()); + parsed = true; } if (value.HasMember("delay") && value["delay"].IsNumber()) { transition.delay = std::chrono::milliseconds(value["delay"].GetUint()); + parsed = true; + } + if (!parsed) { + return Result<PropertyTransition> { StyleParserFailure, std::move(transition) }; } } - - if (transition.duration == Duration::zero() && transition.delay == Duration::zero()) { - return Result<PropertyTransition> { StyleParserFailure, std::move(transition) }; - } - return Result<PropertyTransition> { StyleParserSuccess, std::move(transition) }; } @@ -653,7 +656,7 @@ template<> StyleParser::Result<Function<Color>> StyleParser::parseProperty(JSVal } template<> StyleParser::Result<PiecewiseConstantFunction<Faded<std::vector<float>>>> StyleParser::parseProperty(JSVal value, const char *property_name, JSVal transition) { - Duration duration = std::chrono::milliseconds(300); + Duration duration = data.getDefaultFadeDuration(); if (transition.HasMember("duration")) { duration = std::chrono::milliseconds(transition["duration"].GetUint()); } @@ -667,13 +670,12 @@ template<> StyleParser::Result<PiecewiseConstantFunction<Faded<std::vector<float return Result<PiecewiseConstantFunction<Faded<std::vector<float>>>> { std::get<0>(floatarray), { parsed, duration } }; } else { Log::Warning(Event::ParseStyle, "value of '%s' must be an array of numbers, or a number array function", property_name); - return Result<PiecewiseConstantFunction<Faded<std::vector<float>>>> { StyleParserFailure, {} }; + return Result<PiecewiseConstantFunction<Faded<std::vector<float>>>> { StyleParserFailure, { {}, duration } }; } } template<> StyleParser::Result<PiecewiseConstantFunction<Faded<std::string>>> StyleParser::parseProperty(JSVal value, const char *property_name, JSVal transition) { - - Duration duration = std::chrono::milliseconds(300); + Duration duration = data.getDefaultFadeDuration(); if (transition.HasMember("duration")) { duration = std::chrono::milliseconds(transition["duration"].GetUint()); } @@ -686,7 +688,7 @@ template<> StyleParser::Result<PiecewiseConstantFunction<Faded<std::string>>> St return Result<PiecewiseConstantFunction<Faded<std::string>>> { StyleParserSuccess, { parsed, duration } }; } else { Log::Warning(Event::ParseStyle, "value of '%s' must be string or a string function", property_name); - return Result<PiecewiseConstantFunction<Faded<std::string>>> { StyleParserFailure, {} }; + return Result<PiecewiseConstantFunction<Faded<std::string>>> { StyleParserFailure, { {}, duration } }; } } diff --git a/src/mbgl/style/style_parser.hpp b/src/mbgl/style/style_parser.hpp index 2daa5e14d8..5f0c509ebf 100644 --- a/src/mbgl/style/style_parser.hpp +++ b/src/mbgl/style/style_parser.hpp @@ -31,7 +31,7 @@ public: template<typename T> using Result = std::pair<Status, T>; - StyleParser(); + StyleParser(MapData& data); void parse(JSVal document); @@ -117,6 +117,9 @@ private: // URL template for glyph PBFs. std::string glyph_url; + + // Obtain default transition duration from map data. + MapData& data; }; } |