summaryrefslogtreecommitdiff
path: root/src/mbgl/style/layers/circle_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/circle_layer.cpp')
-rw-r--r--src/mbgl/style/layers/circle_layer.cpp125
1 files changed, 73 insertions, 52 deletions
diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp
index 7de6fef482..ca2f93306f 100644
--- a/src/mbgl/style/layers/circle_layer.cpp
+++ b/src/mbgl/style/layers/circle_layer.cpp
@@ -364,6 +364,8 @@ using namespace conversion;
namespace {
+constexpr uint8_t kPaintPropertyCount = 22u;
+
enum class Property : uint8_t {
CircleBlur,
CircleColor,
@@ -417,8 +419,78 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map<
{"circle-stroke-width-transition", toUint8(Property::CircleStrokeWidthTransition)},
{"circle-translate-transition", toUint8(Property::CircleTranslateTransition)},
{"circle-translate-anchor-transition", toUint8(Property::CircleTranslateAnchorTransition)}});
+
+StyleProperty getLayerProperty(const CircleLayer& layer, Property property) {
+ switch (property) {
+ case Property::CircleBlur:
+ return makeStyleProperty(layer.getCircleBlur());
+ case Property::CircleColor:
+ return makeStyleProperty(layer.getCircleColor());
+ case Property::CircleOpacity:
+ return makeStyleProperty(layer.getCircleOpacity());
+ case Property::CirclePitchAlignment:
+ return makeStyleProperty(layer.getCirclePitchAlignment());
+ case Property::CirclePitchScale:
+ return makeStyleProperty(layer.getCirclePitchScale());
+ case Property::CircleRadius:
+ return makeStyleProperty(layer.getCircleRadius());
+ case Property::CircleStrokeColor:
+ return makeStyleProperty(layer.getCircleStrokeColor());
+ case Property::CircleStrokeOpacity:
+ return makeStyleProperty(layer.getCircleStrokeOpacity());
+ case Property::CircleStrokeWidth:
+ return makeStyleProperty(layer.getCircleStrokeWidth());
+ case Property::CircleTranslate:
+ return makeStyleProperty(layer.getCircleTranslate());
+ case Property::CircleTranslateAnchor:
+ return makeStyleProperty(layer.getCircleTranslateAnchor());
+ case Property::CircleBlurTransition:
+ return makeStyleProperty(layer.getCircleBlurTransition());
+ case Property::CircleColorTransition:
+ return makeStyleProperty(layer.getCircleColorTransition());
+ case Property::CircleOpacityTransition:
+ return makeStyleProperty(layer.getCircleOpacityTransition());
+ case Property::CirclePitchAlignmentTransition:
+ return makeStyleProperty(layer.getCirclePitchAlignmentTransition());
+ case Property::CirclePitchScaleTransition:
+ return makeStyleProperty(layer.getCirclePitchScaleTransition());
+ case Property::CircleRadiusTransition:
+ return makeStyleProperty(layer.getCircleRadiusTransition());
+ case Property::CircleStrokeColorTransition:
+ return makeStyleProperty(layer.getCircleStrokeColorTransition());
+ case Property::CircleStrokeOpacityTransition:
+ return makeStyleProperty(layer.getCircleStrokeOpacityTransition());
+ case Property::CircleStrokeWidthTransition:
+ return makeStyleProperty(layer.getCircleStrokeWidthTransition());
+ case Property::CircleTranslateTransition:
+ return makeStyleProperty(layer.getCircleTranslateTransition());
+ case Property::CircleTranslateAnchorTransition:
+ return makeStyleProperty(layer.getCircleTranslateAnchorTransition());
+ }
+ return {};
+}
+
+StyleProperty getLayerProperty(const CircleLayer& layer, const std::string& name) {
+ const auto it = layerProperties.find(name.c_str());
+ if (it == layerProperties.end()) {
+ return {};
+ }
+ return getLayerProperty(layer, static_cast<Property>(it->second));
+}
+
} // namespace
+Value CircleLayer::serialize() const {
+ auto result = Layer::serialize();
+ assert(result.getObject());
+ for (const auto& property : layerProperties) {
+ auto styleProperty = getLayerProperty(*this, static_cast<Property>(property.second));
+ if (styleProperty.getKind() == StyleProperty::Kind::Undefined) continue;
+ serializeProperty(result, styleProperty, property.first.c_str(), property.second < kPaintPropertyCount);
+ }
+ return result;
+}
+
optional<Error> CircleLayer::setProperty(const std::string& name, const Convertible& value) {
const auto it = layerProperties.find(name.c_str());
if (it == layerProperties.end()) {
@@ -584,58 +656,7 @@ optional<Error> CircleLayer::setProperty(const std::string& name, const Converti
}
StyleProperty CircleLayer::getProperty(const std::string& name) const {
- const auto it = layerProperties.find(name.c_str());
- if (it == layerProperties.end()) {
- return {};
- }
-
- switch (static_cast<Property>(it->second)) {
- case Property::CircleBlur:
- return makeStyleProperty(getCircleBlur());
- case Property::CircleColor:
- return makeStyleProperty(getCircleColor());
- case Property::CircleOpacity:
- return makeStyleProperty(getCircleOpacity());
- case Property::CirclePitchAlignment:
- return makeStyleProperty(getCirclePitchAlignment());
- case Property::CirclePitchScale:
- return makeStyleProperty(getCirclePitchScale());
- case Property::CircleRadius:
- return makeStyleProperty(getCircleRadius());
- case Property::CircleStrokeColor:
- return makeStyleProperty(getCircleStrokeColor());
- case Property::CircleStrokeOpacity:
- return makeStyleProperty(getCircleStrokeOpacity());
- case Property::CircleStrokeWidth:
- return makeStyleProperty(getCircleStrokeWidth());
- case Property::CircleTranslate:
- return makeStyleProperty(getCircleTranslate());
- case Property::CircleTranslateAnchor:
- return makeStyleProperty(getCircleTranslateAnchor());
- case Property::CircleBlurTransition:
- return makeStyleProperty(getCircleBlurTransition());
- case Property::CircleColorTransition:
- return makeStyleProperty(getCircleColorTransition());
- case Property::CircleOpacityTransition:
- return makeStyleProperty(getCircleOpacityTransition());
- case Property::CirclePitchAlignmentTransition:
- return makeStyleProperty(getCirclePitchAlignmentTransition());
- case Property::CirclePitchScaleTransition:
- return makeStyleProperty(getCirclePitchScaleTransition());
- case Property::CircleRadiusTransition:
- return makeStyleProperty(getCircleRadiusTransition());
- case Property::CircleStrokeColorTransition:
- return makeStyleProperty(getCircleStrokeColorTransition());
- case Property::CircleStrokeOpacityTransition:
- return makeStyleProperty(getCircleStrokeOpacityTransition());
- case Property::CircleStrokeWidthTransition:
- return makeStyleProperty(getCircleStrokeWidthTransition());
- case Property::CircleTranslateTransition:
- return makeStyleProperty(getCircleTranslateTransition());
- case Property::CircleTranslateAnchorTransition:
- return makeStyleProperty(getCircleTranslateAnchorTransition());
- }
- return {};
+ return getLayerProperty(*this, name);
}
Mutable<Layer::Impl> CircleLayer::mutableBaseImpl() const {