summaryrefslogtreecommitdiff
path: root/src/mbgl/style
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2015-07-14 15:14:39 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2015-07-14 16:58:32 +0300
commit0ea8a37cb081302707c7815f3df5745bd3d6eef3 (patch)
tree1a6d5511d12ee57e461b48b6552bef47e9a053aa /src/mbgl/style
parent2aad2f4e14ab762847141788e725d50e1ee44ace (diff)
downloadqtlocation-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.hpp1
-rw-r--r--src/mbgl/style/property_transition.hpp2
-rw-r--r--src/mbgl/style/style.cpp19
-rw-r--r--src/mbgl/style/style.hpp6
-rw-r--r--src/mbgl/style/style_parser.cpp30
-rw-r--r--src/mbgl/style/style_parser.hpp5
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;
};
}