Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Commit b6e5edc

Browse files
committed
[core] Restore support for *-transition properties
1 parent 925d394 commit b6e5edc

24 files changed

+496
-0
lines changed

cmake/core-files.cmake

+4
Original file line numberDiff line numberDiff line change
@@ -296,12 +296,16 @@ set(MBGL_CORE_FILES
296296
include/mbgl/style/conversion/property_value.hpp
297297
include/mbgl/style/conversion/source.hpp
298298
include/mbgl/style/conversion/tileset.hpp
299+
include/mbgl/style/conversion/transition_options.hpp
299300
src/mbgl/style/conversion/stringify.hpp
300301

301302
# style/function
302303
include/mbgl/style/function/camera_function.hpp
303304
include/mbgl/style/function/categorical_stops.hpp
305+
include/mbgl/style/function/composite_categorical_stops.hpp
306+
include/mbgl/style/function/composite_exponential_stops.hpp
304307
include/mbgl/style/function/composite_function.hpp
308+
include/mbgl/style/function/composite_interval_stops.hpp
305309
include/mbgl/style/function/exponential_stops.hpp
306310
include/mbgl/style/function/identity_stops.hpp
307311
include/mbgl/style/function/interval_stops.hpp

cmake/test-files.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ set(MBGL_TEST_FILES
7474
# style/conversion
7575
test/style/conversion/function.test.cpp
7676
test/style/conversion/geojson_options.test.cpp
77+
test/style/conversion/layer.test.cpp
7778
test/style/conversion/stringify.test.cpp
7879

7980
# style

include/mbgl/style/conversion/make_property_setters.hpp

+58
Original file line numberDiff line numberDiff line change
@@ -77,69 +77,127 @@ auto makePaintPropertySetters() {
7777
std::unordered_map<std::string, PaintPropertySetter<V>> result;
7878

7979
result["fill-antialias"] = makePropertySetter<V>(&FillLayer::setFillAntialias);
80+
result["fill-antialias-transition"] = makeTransitionSetter<V>(&FillLayer::setFillAntialiasTransition);
8081
result["fill-opacity"] = makePropertySetter<V>(&FillLayer::setFillOpacity);
82+
result["fill-opacity-transition"] = makeTransitionSetter<V>(&FillLayer::setFillOpacityTransition);
8183
result["fill-color"] = makePropertySetter<V>(&FillLayer::setFillColor);
84+
result["fill-color-transition"] = makeTransitionSetter<V>(&FillLayer::setFillColorTransition);
8285
result["fill-outline-color"] = makePropertySetter<V>(&FillLayer::setFillOutlineColor);
86+
result["fill-outline-color-transition"] = makeTransitionSetter<V>(&FillLayer::setFillOutlineColorTransition);
8387
result["fill-translate"] = makePropertySetter<V>(&FillLayer::setFillTranslate);
88+
result["fill-translate-transition"] = makeTransitionSetter<V>(&FillLayer::setFillTranslateTransition);
8489
result["fill-translate-anchor"] = makePropertySetter<V>(&FillLayer::setFillTranslateAnchor);
90+
result["fill-translate-anchor-transition"] = makeTransitionSetter<V>(&FillLayer::setFillTranslateAnchorTransition);
8591
result["fill-pattern"] = makePropertySetter<V>(&FillLayer::setFillPattern);
92+
result["fill-pattern-transition"] = makeTransitionSetter<V>(&FillLayer::setFillPatternTransition);
8693

8794
result["line-opacity"] = makePropertySetter<V>(&LineLayer::setLineOpacity);
95+
result["line-opacity-transition"] = makeTransitionSetter<V>(&LineLayer::setLineOpacityTransition);
8896
result["line-color"] = makePropertySetter<V>(&LineLayer::setLineColor);
97+
result["line-color-transition"] = makeTransitionSetter<V>(&LineLayer::setLineColorTransition);
8998
result["line-translate"] = makePropertySetter<V>(&LineLayer::setLineTranslate);
99+
result["line-translate-transition"] = makeTransitionSetter<V>(&LineLayer::setLineTranslateTransition);
90100
result["line-translate-anchor"] = makePropertySetter<V>(&LineLayer::setLineTranslateAnchor);
101+
result["line-translate-anchor-transition"] = makeTransitionSetter<V>(&LineLayer::setLineTranslateAnchorTransition);
91102
result["line-width"] = makePropertySetter<V>(&LineLayer::setLineWidth);
103+
result["line-width-transition"] = makeTransitionSetter<V>(&LineLayer::setLineWidthTransition);
92104
result["line-gap-width"] = makePropertySetter<V>(&LineLayer::setLineGapWidth);
105+
result["line-gap-width-transition"] = makeTransitionSetter<V>(&LineLayer::setLineGapWidthTransition);
93106
result["line-offset"] = makePropertySetter<V>(&LineLayer::setLineOffset);
107+
result["line-offset-transition"] = makeTransitionSetter<V>(&LineLayer::setLineOffsetTransition);
94108
result["line-blur"] = makePropertySetter<V>(&LineLayer::setLineBlur);
109+
result["line-blur-transition"] = makeTransitionSetter<V>(&LineLayer::setLineBlurTransition);
95110
result["line-dasharray"] = makePropertySetter<V>(&LineLayer::setLineDasharray);
111+
result["line-dasharray-transition"] = makeTransitionSetter<V>(&LineLayer::setLineDasharrayTransition);
96112
result["line-pattern"] = makePropertySetter<V>(&LineLayer::setLinePattern);
113+
result["line-pattern-transition"] = makeTransitionSetter<V>(&LineLayer::setLinePatternTransition);
97114

98115
result["icon-opacity"] = makePropertySetter<V>(&SymbolLayer::setIconOpacity);
116+
result["icon-opacity-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconOpacityTransition);
99117
result["icon-color"] = makePropertySetter<V>(&SymbolLayer::setIconColor);
118+
result["icon-color-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconColorTransition);
100119
result["icon-halo-color"] = makePropertySetter<V>(&SymbolLayer::setIconHaloColor);
120+
result["icon-halo-color-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconHaloColorTransition);
101121
result["icon-halo-width"] = makePropertySetter<V>(&SymbolLayer::setIconHaloWidth);
122+
result["icon-halo-width-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconHaloWidthTransition);
102123
result["icon-halo-blur"] = makePropertySetter<V>(&SymbolLayer::setIconHaloBlur);
124+
result["icon-halo-blur-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconHaloBlurTransition);
103125
result["icon-translate"] = makePropertySetter<V>(&SymbolLayer::setIconTranslate);
126+
result["icon-translate-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconTranslateTransition);
104127
result["icon-translate-anchor"] = makePropertySetter<V>(&SymbolLayer::setIconTranslateAnchor);
128+
result["icon-translate-anchor-transition"] = makeTransitionSetter<V>(&SymbolLayer::setIconTranslateAnchorTransition);
105129
result["text-opacity"] = makePropertySetter<V>(&SymbolLayer::setTextOpacity);
130+
result["text-opacity-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextOpacityTransition);
106131
result["text-color"] = makePropertySetter<V>(&SymbolLayer::setTextColor);
132+
result["text-color-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextColorTransition);
107133
result["text-halo-color"] = makePropertySetter<V>(&SymbolLayer::setTextHaloColor);
134+
result["text-halo-color-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextHaloColorTransition);
108135
result["text-halo-width"] = makePropertySetter<V>(&SymbolLayer::setTextHaloWidth);
136+
result["text-halo-width-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextHaloWidthTransition);
109137
result["text-halo-blur"] = makePropertySetter<V>(&SymbolLayer::setTextHaloBlur);
138+
result["text-halo-blur-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextHaloBlurTransition);
110139
result["text-translate"] = makePropertySetter<V>(&SymbolLayer::setTextTranslate);
140+
result["text-translate-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextTranslateTransition);
111141
result["text-translate-anchor"] = makePropertySetter<V>(&SymbolLayer::setTextTranslateAnchor);
142+
result["text-translate-anchor-transition"] = makeTransitionSetter<V>(&SymbolLayer::setTextTranslateAnchorTransition);
112143

113144
result["circle-radius"] = makePropertySetter<V>(&CircleLayer::setCircleRadius);
145+
result["circle-radius-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleRadiusTransition);
114146
result["circle-color"] = makePropertySetter<V>(&CircleLayer::setCircleColor);
147+
result["circle-color-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleColorTransition);
115148
result["circle-blur"] = makePropertySetter<V>(&CircleLayer::setCircleBlur);
149+
result["circle-blur-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleBlurTransition);
116150
result["circle-opacity"] = makePropertySetter<V>(&CircleLayer::setCircleOpacity);
151+
result["circle-opacity-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleOpacityTransition);
117152
result["circle-translate"] = makePropertySetter<V>(&CircleLayer::setCircleTranslate);
153+
result["circle-translate-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleTranslateTransition);
118154
result["circle-translate-anchor"] = makePropertySetter<V>(&CircleLayer::setCircleTranslateAnchor);
155+
result["circle-translate-anchor-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleTranslateAnchorTransition);
119156
result["circle-pitch-scale"] = makePropertySetter<V>(&CircleLayer::setCirclePitchScale);
157+
result["circle-pitch-scale-transition"] = makeTransitionSetter<V>(&CircleLayer::setCirclePitchScaleTransition);
120158
result["circle-stroke-width"] = makePropertySetter<V>(&CircleLayer::setCircleStrokeWidth);
159+
result["circle-stroke-width-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleStrokeWidthTransition);
121160
result["circle-stroke-color"] = makePropertySetter<V>(&CircleLayer::setCircleStrokeColor);
161+
result["circle-stroke-color-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleStrokeColorTransition);
122162
result["circle-stroke-opacity"] = makePropertySetter<V>(&CircleLayer::setCircleStrokeOpacity);
163+
result["circle-stroke-opacity-transition"] = makeTransitionSetter<V>(&CircleLayer::setCircleStrokeOpacityTransition);
123164

124165
result["fill-extrusion-opacity"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionOpacity);
166+
result["fill-extrusion-opacity-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionOpacityTransition);
125167
result["fill-extrusion-color"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionColor);
168+
result["fill-extrusion-color-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionColorTransition);
126169
result["fill-extrusion-translate"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionTranslate);
170+
result["fill-extrusion-translate-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionTranslateTransition);
127171
result["fill-extrusion-translate-anchor"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionTranslateAnchor);
172+
result["fill-extrusion-translate-anchor-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionTranslateAnchorTransition);
128173
result["fill-extrusion-pattern"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionPattern);
174+
result["fill-extrusion-pattern-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionPatternTransition);
129175
result["fill-extrusion-height"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionHeight);
176+
result["fill-extrusion-height-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionHeightTransition);
130177
result["fill-extrusion-base"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionBase);
178+
result["fill-extrusion-base-transition"] = makeTransitionSetter<V>(&FillExtrusionLayer::setFillExtrusionBaseTransition);
131179

132180
result["raster-opacity"] = makePropertySetter<V>(&RasterLayer::setRasterOpacity);
181+
result["raster-opacity-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterOpacityTransition);
133182
result["raster-hue-rotate"] = makePropertySetter<V>(&RasterLayer::setRasterHueRotate);
183+
result["raster-hue-rotate-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterHueRotateTransition);
134184
result["raster-brightness-min"] = makePropertySetter<V>(&RasterLayer::setRasterBrightnessMin);
185+
result["raster-brightness-min-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterBrightnessMinTransition);
135186
result["raster-brightness-max"] = makePropertySetter<V>(&RasterLayer::setRasterBrightnessMax);
187+
result["raster-brightness-max-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterBrightnessMaxTransition);
136188
result["raster-saturation"] = makePropertySetter<V>(&RasterLayer::setRasterSaturation);
189+
result["raster-saturation-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterSaturationTransition);
137190
result["raster-contrast"] = makePropertySetter<V>(&RasterLayer::setRasterContrast);
191+
result["raster-contrast-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterContrastTransition);
138192
result["raster-fade-duration"] = makePropertySetter<V>(&RasterLayer::setRasterFadeDuration);
193+
result["raster-fade-duration-transition"] = makeTransitionSetter<V>(&RasterLayer::setRasterFadeDurationTransition);
139194

140195
result["background-color"] = makePropertySetter<V>(&BackgroundLayer::setBackgroundColor);
196+
result["background-color-transition"] = makeTransitionSetter<V>(&BackgroundLayer::setBackgroundColorTransition);
141197
result["background-pattern"] = makePropertySetter<V>(&BackgroundLayer::setBackgroundPattern);
198+
result["background-pattern-transition"] = makeTransitionSetter<V>(&BackgroundLayer::setBackgroundPatternTransition);
142199
result["background-opacity"] = makePropertySetter<V>(&BackgroundLayer::setBackgroundOpacity);
200+
result["background-opacity-transition"] = makeTransitionSetter<V>(&BackgroundLayer::setBackgroundOpacityTransition);
143201

144202
return result;
145203
}

include/mbgl/style/conversion/make_property_setters.hpp.ejs

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ auto makePaintPropertySetters() {
3636
<% for (const layer of locals.layers) { -%>
3737
<% for (const property of layer.paintProperties) { -%>
3838
result["<%- property.name %>"] = makePropertySetter<V>(&<%- camelize(layer.type) %>Layer::set<%- camelize(property.name) %>);
39+
result["<%- property.name %>-transition"] = makeTransitionSetter<V>(&<%- camelize(layer.type) %>Layer::set<%- camelize(property.name) %>Transition);
3940
<% } -%>
4041
4142
<% } -%>

include/mbgl/style/conversion/property_setter.hpp

+19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <mbgl/style/conversion/constant.hpp>
66
#include <mbgl/style/conversion/property_value.hpp>
77
#include <mbgl/style/conversion/data_driven_property_value.hpp>
8+
#include <mbgl/style/conversion/transition_options.hpp>
89

910
#include <functional>
1011
#include <string>
@@ -37,6 +38,24 @@ auto makePropertySetter(void (L::*setter)(PropertyValue, const Args&...args)) {
3738
};
3839
}
3940

41+
template <class V, class L, class...Args>
42+
auto makeTransitionSetter(void (L::*setter)(const TransitionOptions&, const Args&...args)) {
43+
return [setter] (Layer& layer, const V& value, const Args&...args) -> optional<Error> {
44+
L* typedLayer = layer.as<L>();
45+
if (!typedLayer) {
46+
return Error { "layer doesn't support this property" };
47+
}
48+
49+
Result<TransitionOptions> transition = convert<TransitionOptions>(value);
50+
if (!transition) {
51+
return transition.error();
52+
}
53+
54+
(typedLayer->*setter)(*transition, args...);
55+
return {};
56+
};
57+
}
58+
4059
template <class V>
4160
optional<Error> setVisibility(Layer& layer, const V& value) {
4261
if (isUndefined(value)) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#pragma once
2+
3+
#include <mbgl/style/transition_options.hpp>
4+
#include <mbgl/style/conversion.hpp>
5+
6+
namespace mbgl {
7+
namespace style {
8+
namespace conversion {
9+
10+
template <>
11+
struct Converter<TransitionOptions> {
12+
public:
13+
template <class V>
14+
Result<TransitionOptions> operator()(const V& value) const {
15+
if (!isObject(value)) {
16+
return Error { "transition must be an object" };
17+
}
18+
19+
TransitionOptions result;
20+
21+
auto duration = objectMember(value, "duration");
22+
if (duration) {
23+
auto number = toNumber(*duration);
24+
if (!number) {
25+
return Error { "duration must be a number" };
26+
}
27+
result.duration = { std::chrono::milliseconds(int64_t(*number)) };
28+
}
29+
30+
auto delay = objectMember(value, "delay");
31+
if (delay) {
32+
auto number = toNumber(*delay);
33+
if (!number) {
34+
return Error { "delay must be a number" };
35+
}
36+
result.delay = { std::chrono::milliseconds(int64_t(*number)) };
37+
}
38+
39+
return result;
40+
}
41+
};
42+
43+
} // namespace conversion
44+
} // namespace style
45+
} // namespace mbgl

include/mbgl/style/layers/background_layer.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
namespace mbgl {
1313
namespace style {
1414

15+
class TransitionOptions;
16+
1517
class BackgroundLayer : public Layer {
1618
public:
1719
BackgroundLayer(const std::string& layerID);
@@ -22,14 +24,17 @@ class BackgroundLayer : public Layer {
2224
static PropertyValue<Color> getDefaultBackgroundColor();
2325
PropertyValue<Color> getBackgroundColor(const optional<std::string>& klass = {}) const;
2426
void setBackgroundColor(PropertyValue<Color>, const optional<std::string>& klass = {});
27+
void setBackgroundColorTransition(const TransitionOptions&, const optional<std::string>& klass = {});
2528

2629
static PropertyValue<std::string> getDefaultBackgroundPattern();
2730
PropertyValue<std::string> getBackgroundPattern(const optional<std::string>& klass = {}) const;
2831
void setBackgroundPattern(PropertyValue<std::string>, const optional<std::string>& klass = {});
32+
void setBackgroundPatternTransition(const TransitionOptions&, const optional<std::string>& klass = {});
2933

3034
static PropertyValue<float> getDefaultBackgroundOpacity();
3135
PropertyValue<float> getBackgroundOpacity(const optional<std::string>& klass = {}) const;
3236
void setBackgroundOpacity(PropertyValue<float>, const optional<std::string>& klass = {});
37+
void setBackgroundOpacityTransition(const TransitionOptions&, const optional<std::string>& klass = {});
3338

3439
// Private implementation
3540

0 commit comments

Comments
 (0)