summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-06-21 11:39:02 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-06-26 09:42:35 -0700
commit150fc6b643e0f10d2fb98d056ee4ea6a159596fb (patch)
tree2070c5fd557158437d3f565f7c4256091eca65de /src
parentc3900e42d6b58eeb14c3246528f0517229bd51b9 (diff)
downloadqtlocation-mapboxgl-150fc6b643e0f10d2fb98d056ee4ea6a159596fb.tar.gz
[core] Don't transition new layers on a setStyle operation
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp8
-rw-r--r--src/mbgl/renderer/layers/render_raster_layer.cpp5
-rw-r--r--src/mbgl/renderer/layers/render_symbol_layer.cpp5
-rw-r--r--src/mbgl/renderer/render_light.cpp5
-rw-r--r--src/mbgl/style/properties.hpp27
9 files changed, 48 insertions, 22 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp
index 83ec7bf2db..702977cd23 100644
--- a/src/mbgl/renderer/layers/render_background_layer.cpp
+++ b/src/mbgl/renderer/layers/render_background_layer.cpp
@@ -5,7 +5,8 @@
namespace mbgl {
RenderBackgroundLayer::RenderBackgroundLayer(Immutable<style::BackgroundLayer::Impl> _impl)
- : RenderLayer(style::LayerType::Background, _impl) {
+ : RenderLayer(style::LayerType::Background, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::BackgroundLayer::Impl& RenderBackgroundLayer::impl() const {
@@ -19,7 +20,7 @@ std::unique_ptr<Bucket> RenderBackgroundLayer::createBucket(const BucketParamete
}
void RenderBackgroundLayer::transition(const TransitionParameters &parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderBackgroundLayer::evaluate(const PropertyEvaluationParameters &parameters) {
diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp
index a8595ce61d..51a5ecd7d6 100644
--- a/src/mbgl/renderer/layers/render_circle_layer.cpp
+++ b/src/mbgl/renderer/layers/render_circle_layer.cpp
@@ -8,7 +8,8 @@
namespace mbgl {
RenderCircleLayer::RenderCircleLayer(Immutable<style::CircleLayer::Impl> _impl)
- : RenderLayer(style::LayerType::Circle, _impl) {
+ : RenderLayer(style::LayerType::Circle, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::CircleLayer::Impl& RenderCircleLayer::impl() const {
@@ -20,7 +21,7 @@ std::unique_ptr<Bucket> RenderCircleLayer::createBucket(const BucketParameters&
}
void RenderCircleLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) {
diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
index 551fcc5fc9..cd69316670 100644
--- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
@@ -8,7 +8,8 @@
namespace mbgl {
RenderFillExtrusionLayer::RenderFillExtrusionLayer(Immutable<style::FillExtrusionLayer::Impl> _impl)
- : RenderLayer(style::LayerType::FillExtrusion, _impl) {
+ : RenderLayer(style::LayerType::FillExtrusion, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::FillExtrusionLayer::Impl& RenderFillExtrusionLayer::impl() const {
@@ -20,7 +21,7 @@ std::unique_ptr<Bucket> RenderFillExtrusionLayer::createBucket(const BucketParam
}
void RenderFillExtrusionLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderFillExtrusionLayer::evaluate(const PropertyEvaluationParameters& parameters) {
diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp
index a36e1688a7..f1c7e97067 100644
--- a/src/mbgl/renderer/layers/render_fill_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_layer.cpp
@@ -8,7 +8,8 @@
namespace mbgl {
RenderFillLayer::RenderFillLayer(Immutable<style::FillLayer::Impl> _impl)
- : RenderLayer(style::LayerType::Fill, _impl) {
+ : RenderLayer(style::LayerType::Fill, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::FillLayer::Impl& RenderFillLayer::impl() const {
@@ -20,7 +21,7 @@ std::unique_ptr<Bucket> RenderFillLayer::createBucket(const BucketParameters& pa
}
void RenderFillLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderFillLayer::evaluate(const PropertyEvaluationParameters& parameters) {
diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp
index 5998c1f2fb..c27e5ea990 100644
--- a/src/mbgl/renderer/layers/render_line_layer.cpp
+++ b/src/mbgl/renderer/layers/render_line_layer.cpp
@@ -8,7 +8,8 @@
namespace mbgl {
RenderLineLayer::RenderLineLayer(Immutable<style::LineLayer::Impl> _impl)
- : RenderLayer(style::LayerType::Line, _impl) {
+ : RenderLayer(style::LayerType::Line, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::LineLayer::Impl& RenderLineLayer::impl() const {
@@ -20,12 +21,11 @@ std::unique_ptr<Bucket> RenderLineLayer::createBucket(const BucketParameters& pa
}
void RenderLineLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderLineLayer::evaluate(const PropertyEvaluationParameters& parameters) {
- style::Properties<LineFloorwidth>::Unevaluated extra;
- extra.get<LineFloorwidth>() = unevaluated.get<style::LineWidth>();
+ style::Properties<LineFloorwidth>::Unevaluated extra(unevaluated.get<style::LineWidth>());
auto dashArrayParams = parameters;
dashArrayParams.useIntegerZoom = true;
diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp
index 30b506b63b..84e27a3895 100644
--- a/src/mbgl/renderer/layers/render_raster_layer.cpp
+++ b/src/mbgl/renderer/layers/render_raster_layer.cpp
@@ -10,7 +10,8 @@
namespace mbgl {
RenderRasterLayer::RenderRasterLayer(Immutable<style::RasterLayer::Impl> _impl)
- : RenderLayer(style::LayerType::Raster, _impl) {
+ : RenderLayer(style::LayerType::Raster, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::RasterLayer::Impl& RenderRasterLayer::impl() const {
@@ -23,7 +24,7 @@ std::unique_ptr<Bucket> RenderRasterLayer::createBucket(const BucketParameters&,
}
void RenderRasterLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderRasterLayer::evaluate(const PropertyEvaluationParameters& parameters) {
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp
index 9d59162a86..6540fc9612 100644
--- a/src/mbgl/renderer/layers/render_symbol_layer.cpp
+++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp
@@ -9,7 +9,8 @@
namespace mbgl {
RenderSymbolLayer::RenderSymbolLayer(Immutable<style::SymbolLayer::Impl> _impl)
- : RenderLayer(style::LayerType::Symbol, _impl) {
+ : RenderLayer(style::LayerType::Symbol, _impl),
+ unevaluated(impl().paint.untransitioned()) {
}
const style::SymbolLayer::Impl& RenderSymbolLayer::impl() const {
@@ -34,7 +35,7 @@ std::unique_ptr<SymbolLayout> RenderSymbolLayer::createLayout(const BucketParame
}
void RenderSymbolLayer::transition(const TransitionParameters& parameters) {
- unevaluated = impl().paint.transition(parameters, std::move(unevaluated));
+ unevaluated = impl().paint.transitioned(parameters, std::move(unevaluated));
}
void RenderSymbolLayer::evaluate(const PropertyEvaluationParameters& parameters) {
diff --git a/src/mbgl/renderer/render_light.cpp b/src/mbgl/renderer/render_light.cpp
index f1b5c28d3b..85768cff47 100644
--- a/src/mbgl/renderer/render_light.cpp
+++ b/src/mbgl/renderer/render_light.cpp
@@ -3,11 +3,12 @@
namespace mbgl {
RenderLight::RenderLight(Immutable<style::Light::Impl> impl_)
- : impl(std::move(impl_)) {
+ : impl(std::move(impl_)),
+ transitioning(impl->properties.untransitioned()) {
}
void RenderLight::transition(const TransitionParameters& parameters) {
- transitioning = impl->properties.transition(parameters, std::move(transitioning));
+ transitioning = impl->properties.transitioned(parameters, std::move(transitioning));
}
void RenderLight::evaluate(const PropertyEvaluationParameters& parameters) {
diff --git a/src/mbgl/style/properties.hpp b/src/mbgl/style/properties.hpp
index e42beac97a..dfcf7993a7 100644
--- a/src/mbgl/style/properties.hpp
+++ b/src/mbgl/style/properties.hpp
@@ -20,6 +20,10 @@ class Transitioning {
public:
Transitioning() = default;
+ explicit Transitioning(Value value_)
+ : value(std::move(value_)) {
+ }
+
Transitioning(Value value_,
Transitioning<Value> prior_,
TransitionOptions transition,
@@ -125,7 +129,10 @@ public:
class Evaluated : public Tuple<EvaluatedTypes> {
public:
- using Tuple<EvaluatedTypes>::Tuple;
+ template <class... Us>
+ Evaluated(Us&&... us)
+ : Tuple<EvaluatedTypes>(std::forward<Us>(us)...) {
+ }
};
class PossiblyEvaluated : public Tuple<PossiblyEvaluatedTypes> {
@@ -169,7 +176,10 @@ public:
class Unevaluated : public Tuple<UnevaluatedTypes> {
public:
- using Tuple<UnevaluatedTypes>::Tuple;
+ template <class... Us>
+ Unevaluated(Us&&... us)
+ : Tuple<UnevaluatedTypes>(std::forward<Us>(us)...) {
+ }
bool hasTransition() const {
bool result = false;
@@ -200,15 +210,24 @@ public:
class Transitionable : public Tuple<TransitionableTypes> {
public:
- using Tuple<TransitionableTypes>::Tuple;
+ template <class... Us>
+ Transitionable(Us&&... us)
+ : Tuple<TransitionableTypes>(std::forward<Us>(us)...) {
+ }
- Unevaluated transition(const TransitionParameters& parameters, Unevaluated&& prior) const {
+ Unevaluated transitioned(const TransitionParameters& parameters, Unevaluated&& prior) const {
return Unevaluated {
this->template get<Ps>()
.transition(parameters, std::move(prior.template get<Ps>()))...
};
}
+ Unevaluated untransitioned() const {
+ return Unevaluated {
+ typename Ps::UnevaluatedType(this->template get<Ps>().value)...
+ };
+ }
+
bool hasDataDrivenPropertyDifference(const Transitionable& other) const {
bool result = false;
util::ignore({ (result |= this->template get<Ps>().value.hasDataDrivenPropertyDifference(other.template get<Ps>().value))... });