summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauren Budorick <lauren@mapbox.com>2017-04-14 13:04:19 -0700
committerLauren Budorick <lauren@mapbox.com>2017-04-24 17:10:32 -0700
commit0260886817def9436c9715ec03f508d86d844c91 (patch)
treedae1c640bed18d5dae0d36fa326e6efebddf09ee
parentd27dbb843ef4769167dd16231e7a040e860f8e88 (diff)
downloadqtlocation-mapboxgl-0260886817def9436c9715ec03f508d86d844c91.tar.gz
Per review:
* Reintroduce cascade params + rework light * TODO: rename cascade->? (raw?); potentially add proper value/transition setters/getters
-rw-r--r--include/mbgl/style/light.hpp95
-rw-r--r--src/mbgl/style/style.cpp2
2 files changed, 35 insertions, 62 deletions
diff --git a/include/mbgl/style/light.hpp b/include/mbgl/style/light.hpp
index 3b8547c329..3d28fec914 100644
--- a/include/mbgl/style/light.hpp
+++ b/include/mbgl/style/light.hpp
@@ -6,75 +6,35 @@
#include <mbgl/style/property_evaluator.hpp>
#include <mbgl/style/property_evaluation_parameters.hpp>
#include <mbgl/style/transition_options.hpp>
+#include <mbgl/style/cascade_parameters.hpp>
#include <mbgl/util/constants.hpp>
#include <mbgl/util/color.hpp>
#include <mbgl/util/constants.hpp>
#include <mbgl/util/interpolate.hpp>
#include <mbgl/util/indexed_tuple.hpp>
#include <mbgl/util/ignore.hpp>
-#include <mbgl/util/chrono.hpp>
#include <memory>
namespace mbgl {
namespace style {
-template <class Value>
-class TransitioningLightProperty {
-public:
- using UnevaluatedType = TransitioningProperty<Value>;
-
- bool isUndefined() const {
- return bool(value);
- }
-
- const Value& get() const {
- return value;
- }
-
- template <class Evaluator>
- auto evaluate(const Evaluator& evaluator, TimePoint now) {
- return unevaluated.evaluate(evaluator, now);
- }
-
- void set(const Value& value_) {
- value = value_;
- unevaluated =
- TransitioningProperty<Value>(std::move(value), unevaluated, transition, Clock::now());
- }
-
- const TransitionOptions& getTransition() const {
- if (transition) {
- return transition;
- } else {
- static const TransitionOptions staticValue{};
- return staticValue;
- }
- }
-
- void setTransition(const TransitionOptions& transition_) {
- transition = transition_;
- unevaluated = UnevaluatedType(value, std::move(unevaluated),
- transition_.reverseMerge(transition), Clock::now());
- }
-
- bool hasTransition() const {
- return unevaluated.hasTransition();
- }
-
-private:
- UnevaluatedType unevaluated;
- Value value;
- TransitionOptions transition;
-};
-
template <class T>
class LightProperty {
public:
using ValueType = PropertyValue<T>;
- using TransitioningType = TransitioningLightProperty<ValueType>;
+ using UnevaluatedType = TransitioningProperty<ValueType>;
using EvaluatorType = PropertyEvaluator<T>;
using EvaluatedType = T;
+
+ ValueType value;
+ TransitionOptions transition;
+
+ TransitioningProperty<ValueType> cascade(const CascadeParameters& params,
+ TransitioningProperty<ValueType> prior) const {
+ return TransitioningProperty<ValueType>(
+ value, std::move(prior), transition.reverseMerge(params.transition), params.now);
+ }
};
template <class... Ps>
@@ -83,7 +43,7 @@ public:
using Properties = TypeList<Ps...>;
using EvaluatedTypes = TypeList<typename Ps::EvaluatedType...>;
- using TransitioningTypes = TypeList<typename Ps::TransitioningType...>;
+ using UnevaluatedTypes = TypeList<typename Ps::UnevaluatedType...>;
template <class TypeList>
using Tuple = IndexedTuple<Properties, TypeList>;
@@ -93,36 +53,46 @@ public:
using Tuple<EvaluatedTypes>::Tuple;
};
- class Transitioning : public Tuple<TransitioningTypes> {
+ class Unevaluated : public Tuple<UnevaluatedTypes> {
public:
- using Tuple<TransitioningTypes>::Tuple;
+ using Tuple<UnevaluatedTypes>::Tuple;
+ };
+
+ class Cascading : public Tuple<Properties> {
+ public:
+ using Tuple<Properties>::Tuple;
};
template <class P>
auto get() const {
- return transitioning.template get<P>().get();
+ return cascading.template get<P>().value;
}
template <class P>
void set(const typename P::ValueType& value) {
- transitioning.template get<P>().set(value);
+ cascading.template get<P>().value = value;
}
template <class P>
TransitionOptions getTransition() {
- return transitioning.template get<P>().getTransition();
+ return cascading.template get<P>().transition();
}
template <class P>
void setTransition(const TransitionOptions& value) {
- transitioning.template get<P>().setTransition(value);
+ cascading.template get<P>().transition = value;
+ }
+
+ void cascade(const CascadeParameters& parameters) {
+ unevaluated = Unevaluated{ cascading.template get<Ps>().cascade(
+ parameters, std::move(unevaluated.template get<Ps>()))... };
}
template <class P>
auto evaluate(const PropertyEvaluationParameters& parameters) {
using Evaluator = typename P::EvaluatorType;
- return transitioning.template get<P>().evaluate(Evaluator(parameters, P::defaultValue()),
- parameters.now);
+ return unevaluated.template get<P>().evaluate(Evaluator(parameters, P::defaultValue()),
+ parameters.now);
}
void evaluate(const PropertyEvaluationParameters& parameters) {
@@ -131,11 +101,12 @@ public:
bool hasTransition() const {
bool result = false;
- util::ignore({ result |= transitioning.template get<Ps>().hasTransition()... });
+ util::ignore({ result |= unevaluated.template get<Ps>().hasTransition()... });
return result;
}
- Transitioning transitioning;
+ Cascading cascading;
+ Unevaluated unevaluated;
Evaluated evaluated;
};
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 640c1e9bdb..aec9713c27 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -308,6 +308,8 @@ void Style::cascade(const TimePoint& timePoint, MapMode mode) {
for (const auto& layer : layers) {
layer->baseImpl->cascade(parameters);
}
+
+ light.cascade(parameters);
}
void Style::recalculate(float z, const TimePoint& timePoint, MapMode mode) {