[core] Introduce StyleCalculationParameters
This makes subsequent changes to the the parameter list less intrusive.
This commit is contained in:
@@ -2,10 +2,10 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
RenderPass BackgroundLayer::applyStyleProperties(const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
applyTransitionedStyleProperty(PropertyKey::BackgroundOpacity, properties.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::BackgroundColor, properties.color, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::BackgroundImage, properties.image, z, now, zoomHistory);
|
||||
RenderPass BackgroundLayer::applyStyleProperties(const StyleCalculationParameters& parameters) {
|
||||
applyTransitionedStyleProperty(PropertyKey::BackgroundOpacity, properties.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::BackgroundColor, properties.color, parameters);
|
||||
applyStyleProperty(PropertyKey::BackgroundImage, properties.image, parameters);
|
||||
return properties.isVisible() ? RenderPass::Translucent : RenderPass::None;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mbgl {
|
||||
|
||||
class BackgroundLayer : public StyleLayer {
|
||||
public:
|
||||
RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) override;
|
||||
RenderPass applyStyleProperties(const StyleCalculationParameters&) override;
|
||||
|
||||
BackgroundPaintProperties properties;
|
||||
};
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
RenderPass CircleLayer::applyStyleProperties(const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleRadius, properties.radius, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleColor, properties.color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleOpacity, properties.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleTranslate, properties.translate, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::CircleTranslateAnchor, properties.translateAnchor, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleBlur, properties.blur, z, now, zoomHistory);
|
||||
RenderPass CircleLayer::applyStyleProperties(const StyleCalculationParameters& parameters) {
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleRadius, properties.radius, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleColor, properties.color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleOpacity, properties.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleTranslate, properties.translate, parameters);
|
||||
applyStyleProperty(PropertyKey::CircleTranslateAnchor, properties.translateAnchor, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::CircleBlur, properties.blur, parameters);
|
||||
return properties.isVisible() ? RenderPass::Translucent : RenderPass::None;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mbgl {
|
||||
|
||||
class CircleLayer : public StyleLayer {
|
||||
public:
|
||||
RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) override;
|
||||
RenderPass applyStyleProperties(const StyleCalculationParameters&) override;
|
||||
|
||||
CirclePaintProperties properties;
|
||||
};
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
RenderPass FillLayer::applyStyleProperties(const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
applyStyleProperty(PropertyKey::FillAntialias, properties.antialias, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillOpacity, properties.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillColor, properties.fill_color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillOutlineColor, properties.stroke_color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillTranslate, properties.translate, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::FillTranslateAnchor, properties.translateAnchor, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::FillImage, properties.image, z, now, zoomHistory);
|
||||
RenderPass FillLayer::applyStyleProperties(const StyleCalculationParameters& parameters) {
|
||||
applyStyleProperty(PropertyKey::FillAntialias, properties.antialias, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillOpacity, properties.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillColor, properties.fill_color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillOutlineColor, properties.stroke_color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::FillTranslate, properties.translate, parameters);
|
||||
applyStyleProperty(PropertyKey::FillTranslateAnchor, properties.translateAnchor, parameters);
|
||||
applyStyleProperty(PropertyKey::FillImage, properties.image, parameters);
|
||||
|
||||
RenderPass result = RenderPass::None;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mbgl {
|
||||
|
||||
class FillLayer : public StyleLayer {
|
||||
public:
|
||||
RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) override;
|
||||
RenderPass applyStyleProperties(const StyleCalculationParameters&) override;
|
||||
|
||||
FillPaintProperties properties;
|
||||
};
|
||||
|
||||
@@ -2,19 +2,21 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
RenderPass LineLayer::applyStyleProperties(const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
applyTransitionedStyleProperty(PropertyKey::LineOpacity, properties.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineColor, properties.color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineTranslate, properties.translate, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::LineTranslateAnchor, properties.translateAnchor, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineWidth, properties.width, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineGapWidth, properties.gap_width, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineBlur, properties.blur, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::LineDashArray, properties.dash_array, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::LineImage, properties.image, z, now, zoomHistory);
|
||||
RenderPass LineLayer::applyStyleProperties(const StyleCalculationParameters& parameters) {
|
||||
applyTransitionedStyleProperty(PropertyKey::LineOpacity, properties.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineColor, properties.color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineTranslate, properties.translate, parameters);
|
||||
applyStyleProperty(PropertyKey::LineTranslateAnchor, properties.translateAnchor, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineWidth, properties.width, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineGapWidth, properties.gap_width, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::LineBlur, properties.blur, parameters);
|
||||
applyStyleProperty(PropertyKey::LineDashArray, properties.dash_array, parameters);
|
||||
applyStyleProperty(PropertyKey::LineImage, properties.image, parameters);
|
||||
|
||||
// for scaling dasharrays
|
||||
applyStyleProperty(PropertyKey::LineWidth, properties.dash_line_width, std::floor(z), now, zoomHistory);
|
||||
StyleCalculationParameters dashArrayParams = parameters;
|
||||
dashArrayParams.z = std::floor(dashArrayParams.z);
|
||||
applyStyleProperty(PropertyKey::LineWidth, properties.dash_line_width, dashArrayParams);
|
||||
|
||||
return properties.isVisible() ? RenderPass::Translucent : RenderPass::None;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mbgl {
|
||||
|
||||
class LineLayer : public StyleLayer {
|
||||
public:
|
||||
RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) override;
|
||||
RenderPass applyStyleProperties(const StyleCalculationParameters&) override;
|
||||
|
||||
LinePaintProperties properties;
|
||||
};
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
RenderPass RasterLayer::applyStyleProperties(const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterOpacity, properties.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterHueRotate, properties.hue_rotate, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterBrightnessLow, properties.brightness[0], z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterBrightnessHigh, properties.brightness[1], z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterSaturation, properties.saturation, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterContrast, properties.contrast, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterFade, properties.fade, z, now, zoomHistory);
|
||||
RenderPass RasterLayer::applyStyleProperties(const StyleCalculationParameters& parameters) {
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterOpacity, properties.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterHueRotate, properties.hue_rotate, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterBrightnessLow, properties.brightness[0], parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterBrightnessHigh, properties.brightness[1], parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterSaturation, properties.saturation, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterContrast, properties.contrast, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::RasterFade, properties.fade, parameters);
|
||||
return properties.isVisible() ? RenderPass::Translucent : RenderPass::None;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mbgl {
|
||||
|
||||
class RasterLayer : public StyleLayer {
|
||||
public:
|
||||
RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) override;
|
||||
RenderPass applyStyleProperties(const StyleCalculationParameters&) override;
|
||||
|
||||
RasterPaintProperties properties;
|
||||
};
|
||||
|
||||
@@ -4,32 +4,32 @@
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
RenderPass SymbolLayer::applyStyleProperties(const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
applyTransitionedStyleProperty(PropertyKey::IconOpacity, properties.icon.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconColor, properties.icon.color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconHaloColor, properties.icon.halo_color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconHaloWidth, properties.icon.halo_width, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconHaloBlur, properties.icon.halo_blur, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconTranslate, properties.icon.translate, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::IconTranslateAnchor, properties.icon.translate_anchor, z, now, zoomHistory);
|
||||
RenderPass SymbolLayer::applyStyleProperties(const StyleCalculationParameters& parameters) {
|
||||
applyTransitionedStyleProperty(PropertyKey::IconOpacity, properties.icon.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconColor, properties.icon.color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconHaloColor, properties.icon.halo_color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconHaloWidth, properties.icon.halo_width, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconHaloBlur, properties.icon.halo_blur, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::IconTranslate, properties.icon.translate, parameters);
|
||||
applyStyleProperty(PropertyKey::IconTranslateAnchor, properties.icon.translate_anchor, parameters);
|
||||
|
||||
applyTransitionedStyleProperty(PropertyKey::TextOpacity, properties.text.opacity, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextColor, properties.text.color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextHaloColor, properties.text.halo_color, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextHaloWidth, properties.text.halo_width, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextHaloBlur, properties.text.halo_blur, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextTranslate, properties.text.translate, z, now, zoomHistory);
|
||||
applyStyleProperty(PropertyKey::TextTranslateAnchor, properties.text.translate_anchor, z, now, zoomHistory);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextOpacity, properties.text.opacity, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextColor, properties.text.color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextHaloColor, properties.text.halo_color, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextHaloWidth, properties.text.halo_width, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextHaloBlur, properties.text.halo_blur, parameters);
|
||||
applyTransitionedStyleProperty(PropertyKey::TextTranslate, properties.text.translate, parameters);
|
||||
applyStyleProperty(PropertyKey::TextTranslateAnchor, properties.text.translate_anchor, parameters);
|
||||
|
||||
// text-size and icon-size are layout properties but they also need to be evaluated as paint properties:
|
||||
auto it = bucket->layout.properties.find(PropertyKey::IconSize);
|
||||
if (it != bucket->layout.properties.end()) {
|
||||
const PropertyEvaluator<float> evaluator(z, zoomHistory);
|
||||
const PropertyEvaluator<float> evaluator(parameters);
|
||||
properties.icon.size = mapbox::util::apply_visitor(evaluator, it->second);
|
||||
}
|
||||
it = bucket->layout.properties.find(PropertyKey::TextSize);
|
||||
if (it != bucket->layout.properties.end()) {
|
||||
const PropertyEvaluator<float> evaluator(z, zoomHistory);
|
||||
const PropertyEvaluator<float> evaluator(parameters);
|
||||
properties.text.size = mapbox::util::apply_visitor(evaluator, it->second);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace mbgl {
|
||||
|
||||
class SymbolLayer : public StyleLayer {
|
||||
public:
|
||||
RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) override;
|
||||
RenderPass applyStyleProperties(const StyleCalculationParameters&) override;
|
||||
|
||||
SymbolPaintProperties properties;
|
||||
};
|
||||
|
||||
@@ -22,6 +22,7 @@ TileWorker::TileWorker(TileID id_,
|
||||
: layers(std::move(layers_)),
|
||||
id(id_),
|
||||
sourceID(sourceID_),
|
||||
parameters(id.z),
|
||||
style(style_),
|
||||
state(state_),
|
||||
collisionTile(std::move(collision_)) {
|
||||
@@ -65,10 +66,10 @@ void TileWorker::redoPlacement(float angle, float pitch, bool collisionDebug) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void applyLayoutProperty(PropertyKey key, const ClassProperties &classProperties, T &target, const float z) {
|
||||
void applyLayoutProperty(PropertyKey key, const ClassProperties &classProperties, T &target, const StyleCalculationParameters& parameters) {
|
||||
auto it = classProperties.properties.find(key);
|
||||
if (it != classProperties.properties.end()) {
|
||||
const PropertyEvaluator<T> evaluator(z);
|
||||
const PropertyEvaluator<T> evaluator(parameters);
|
||||
target = mapbox::util::apply_visitor(evaluator, it->second);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <mbgl/util/noncopyable.hpp>
|
||||
#include <mbgl/util/ptr.hpp>
|
||||
#include <mbgl/style/filter_expression.hpp>
|
||||
#include <mbgl/style/style_calculation_parameters.hpp>
|
||||
|
||||
#include <string>
|
||||
#include <memory>
|
||||
@@ -57,6 +58,7 @@ private:
|
||||
|
||||
const TileID id;
|
||||
const std::string sourceID;
|
||||
const StyleCalculationParameters parameters;
|
||||
|
||||
Style& style;
|
||||
const std::atomic<TileData::State>& state;
|
||||
|
||||
@@ -16,16 +16,17 @@ size_t getBiggestStopLessThan(std::vector<std::pair<float, T>> stops, float z) {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T PiecewiseConstantFunction<T>::evaluate(float z, const ZoomHistory &zh) const {
|
||||
T PiecewiseConstantFunction<T>::evaluate(const StyleCalculationParameters& parameters) const {
|
||||
T result;
|
||||
|
||||
float z = parameters.z;
|
||||
float fraction = std::fmod(z, 1.0f);
|
||||
float t = std::min((Clock::now() - zh.lastIntegerZoomTime) / duration, 1.0f);
|
||||
float t = std::min((Clock::now() - parameters.zoomHistory.lastIntegerZoomTime) / duration, 1.0f);
|
||||
float fromScale = 1.0f;
|
||||
float toScale = 1.0f;
|
||||
size_t from, to;
|
||||
|
||||
if (z > zh.lastIntegerZoom) {
|
||||
if (z > parameters.zoomHistory.lastIntegerZoom) {
|
||||
result.t = fraction + (1.0f - fraction) * t;
|
||||
from = getBiggestStopLessThan(values, z - 1.0f);
|
||||
to = getBiggestStopLessThan(values, z);
|
||||
@@ -46,7 +47,7 @@ T PiecewiseConstantFunction<T>::evaluate(float z, const ZoomHistory &zh) const {
|
||||
return result;
|
||||
}
|
||||
|
||||
template Faded<std::string> PiecewiseConstantFunction<Faded<std::string>>::evaluate(float z, const ZoomHistory &zoomHistory) const;
|
||||
template Faded<std::vector<float>> PiecewiseConstantFunction<Faded<std::vector<float>>>::evaluate(float z, const ZoomHistory &zoomHistory) const;
|
||||
template Faded<std::string> PiecewiseConstantFunction<Faded<std::string>>::evaluate(const StyleCalculationParameters&) const;
|
||||
template Faded<std::vector<float>> PiecewiseConstantFunction<Faded<std::vector<float>>>::evaluate(const StyleCalculationParameters&) const;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef MBGL_STYLE_FADEDFUNCTION_PROPERTIES
|
||||
#define MBGL_STYLE_FADEDFUNCTION_PROPERTIES
|
||||
|
||||
#include <mbgl/style/zoom_history.hpp>
|
||||
#include <mbgl/style/style_calculation_parameters.hpp>
|
||||
|
||||
#include <vector>
|
||||
|
||||
@@ -11,7 +11,8 @@ 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_) {}
|
||||
T evaluate(float z, const ZoomHistory &zoomHistory) const;
|
||||
|
||||
T evaluate(const StyleCalculationParameters&) const;
|
||||
|
||||
private:
|
||||
const std::vector<std::pair<float, T>> values;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <mbgl/style/zoom_history.hpp>
|
||||
#include <mbgl/style/function_properties.hpp>
|
||||
#include <mbgl/style/piecewisefunction_properties.hpp>
|
||||
#include <mbgl/style/style_calculation_parameters.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
@@ -14,8 +15,8 @@ class PropertyEvaluator {
|
||||
public:
|
||||
typedef T result_type;
|
||||
|
||||
PropertyEvaluator(float z_) : z(z_), zoomHistory() {}
|
||||
PropertyEvaluator(float z_, const ZoomHistory& zoomHistory_) : z(z_), zoomHistory(zoomHistory_) {}
|
||||
PropertyEvaluator(const StyleCalculationParameters& parameters_)
|
||||
: parameters(parameters_) {}
|
||||
|
||||
template <typename P, typename std::enable_if<std::is_convertible<P, T>::value, int>::type = 0>
|
||||
T operator()(const P &value) const {
|
||||
@@ -23,11 +24,11 @@ public:
|
||||
}
|
||||
|
||||
T operator()(const Function<T>& value) const {
|
||||
return mapbox::util::apply_visitor(FunctionEvaluator<T>(z), value);
|
||||
return mapbox::util::apply_visitor(FunctionEvaluator<T>(parameters.z), value);
|
||||
}
|
||||
|
||||
T operator()(const PiecewiseConstantFunction<T>& value) const {
|
||||
return value.evaluate(z, zoomHistory);
|
||||
return value.evaluate(parameters);
|
||||
}
|
||||
|
||||
template <typename P, typename std::enable_if<!std::is_convertible<P, T>::value, int>::type = 0>
|
||||
@@ -36,8 +37,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
const float z;
|
||||
ZoomHistory zoomHistory;
|
||||
StyleCalculationParameters parameters;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -136,8 +136,10 @@ void Style::recalculate(float z) {
|
||||
|
||||
zoomHistory.update(z, data.getAnimationTime());
|
||||
|
||||
StyleCalculationParameters parameters(z, data.getAnimationTime(), zoomHistory);
|
||||
|
||||
for (const auto& layer : layers) {
|
||||
layer->updateProperties(z, data.getAnimationTime(), zoomHistory);
|
||||
layer->updateProperties(parameters);
|
||||
if (!layer->bucket) {
|
||||
continue;
|
||||
}
|
||||
|
||||
26
src/mbgl/style/style_calculation_parameters.hpp
Normal file
26
src/mbgl/style/style_calculation_parameters.hpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef STYLE_CALCULATION_PARAMETERS
|
||||
#define STYLE_CALCULATION_PARAMETERS
|
||||
|
||||
#include <mbgl/style/zoom_history.hpp>
|
||||
#include <mbgl/util/chrono.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
class StyleCalculationParameters {
|
||||
public:
|
||||
StyleCalculationParameters(float z_)
|
||||
: z(z_) {}
|
||||
|
||||
StyleCalculationParameters(float z_, const TimePoint& now_, const ZoomHistory& zoomHistory_)
|
||||
: z(z_),
|
||||
now(now_),
|
||||
zoomHistory(zoomHistory_) {}
|
||||
|
||||
float z;
|
||||
TimePoint now;
|
||||
ZoomHistory zoomHistory;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -118,14 +118,14 @@ void StyleLayer::applyClassProperties(const ClassID class_id,
|
||||
}
|
||||
}
|
||||
|
||||
void StyleLayer::updateProperties(float z, const TimePoint& now, ZoomHistory &zoomHistory) {
|
||||
cleanupAppliedStyleProperties(now);
|
||||
void StyleLayer::updateProperties(const StyleCalculationParameters& parameters) {
|
||||
cleanupAppliedStyleProperties(parameters.now);
|
||||
|
||||
// Clear the pending transitions flag upon each update.
|
||||
hasPendingTransitions = false;
|
||||
|
||||
// Update the render passes when this layer is visible.
|
||||
passes = applyStyleProperties(z, now, zoomHistory);
|
||||
passes = applyStyleProperties(parameters);
|
||||
}
|
||||
|
||||
bool StyleLayer::hasTransitions() const {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <mbgl/style/applied_class_properties.hpp>
|
||||
#include <mbgl/style/zoom_history.hpp>
|
||||
#include <mbgl/style/property_evaluator.hpp>
|
||||
#include <mbgl/style/style_calculation_parameters.hpp>
|
||||
|
||||
#include <mbgl/renderer/render_pass.hpp>
|
||||
|
||||
@@ -34,7 +35,7 @@ public:
|
||||
|
||||
// Updates the StyleProperties information in this layer by evaluating all
|
||||
// pending transitions and applied classes in order.
|
||||
void updateProperties(float z, const TimePoint& now, ZoomHistory &zoomHistory);
|
||||
void updateProperties(const StyleCalculationParameters&);
|
||||
|
||||
// Sets the list of classes and creates transitions to the currently applied values.
|
||||
void setClasses(const std::vector<std::string> &class_names, const TimePoint& now,
|
||||
@@ -58,14 +59,14 @@ public:
|
||||
protected:
|
||||
// TODO: extract
|
||||
template <typename T>
|
||||
void applyStyleProperty(PropertyKey key, T& target, const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
void applyStyleProperty(PropertyKey key, T& target, const StyleCalculationParameters& parameters) {
|
||||
auto it = appliedStyle.find(key);
|
||||
if (it != appliedStyle.end()) {
|
||||
AppliedClassPropertyValues &applied = it->second;
|
||||
// Iterate through all properties that we need to apply in order.
|
||||
const PropertyEvaluator<T> evaluator(z, zoomHistory);
|
||||
const PropertyEvaluator<T> evaluator(parameters);
|
||||
for (auto& property : applied.propertyValues) {
|
||||
if (now >= property.begin) {
|
||||
if (parameters.now >= property.begin) {
|
||||
// We overwrite the current property with the new value.
|
||||
target = mapbox::util::apply_visitor(evaluator, property.value);
|
||||
} else {
|
||||
@@ -76,19 +77,19 @@ protected:
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void applyTransitionedStyleProperty(PropertyKey key, T& target, const float z, const TimePoint& now, const ZoomHistory& zoomHistory) {
|
||||
void applyTransitionedStyleProperty(PropertyKey key, T& target, const StyleCalculationParameters& parameters) {
|
||||
auto it = appliedStyle.find(key);
|
||||
if (it != appliedStyle.end()) {
|
||||
AppliedClassPropertyValues &applied = it->second;
|
||||
// Iterate through all properties that we need to apply in order.
|
||||
const PropertyEvaluator<T> evaluator(z, zoomHistory);
|
||||
const PropertyEvaluator<T> evaluator(parameters);
|
||||
for (auto& property : applied.propertyValues) {
|
||||
if (now >= property.end) {
|
||||
if (parameters.now >= property.end) {
|
||||
// We overwrite the current property with the new value.
|
||||
target = mapbox::util::apply_visitor(evaluator, property.value);
|
||||
} else if (now >= property.begin) {
|
||||
} else if (parameters.now >= property.begin) {
|
||||
// We overwrite the current property partially with the new value.
|
||||
float progress = std::chrono::duration<float>(now - property.begin) / (property.end - property.begin);
|
||||
float progress = std::chrono::duration<float>(parameters.now - property.begin) / (property.end - property.begin);
|
||||
target = util::interpolate(target, mapbox::util::apply_visitor(evaluator, property.value), progress);
|
||||
hasPendingTransitions = true;
|
||||
} else {
|
||||
@@ -105,7 +106,7 @@ private:
|
||||
|
||||
// Sets the properties of this object by evaluating all pending transitions and
|
||||
// aplied classes in order.
|
||||
virtual RenderPass applyStyleProperties(float z, const TimePoint& now, const ZoomHistory&) = 0;
|
||||
virtual RenderPass applyStyleProperties(const StyleCalculationParameters&) = 0;
|
||||
|
||||
// Removes all expired style transitions.
|
||||
void cleanupAppliedStyleProperties(const TimePoint& now);
|
||||
|
||||
Reference in New Issue
Block a user