diff options
Diffstat (limited to 'src/mbgl/style/layers/circle_layer.cpp')
-rw-r--r-- | src/mbgl/style/layers/circle_layer.cpp | 125 |
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 { |