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.cpp199
1 files changed, 129 insertions, 70 deletions
diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp
index 2f68bcccf3..145d76a9a8 100644
--- a/src/mbgl/style/layers/circle_layer.cpp
+++ b/src/mbgl/style/layers/circle_layer.cpp
@@ -1,5 +1,3 @@
-// clang-format off
-
// This file is generated. Edit scripts/generate-style-code.js, then run `make style-code`.
#include <mbgl/style/layers/circle_layer.hpp>
@@ -364,60 +362,69 @@ TransitionOptions CircleLayer::getCircleTranslateAnchorTransition() const {
using namespace conversion;
+namespace {
+
+enum class Property : uint8_t {
+ CircleBlur,
+ CircleColor,
+ CircleOpacity,
+ CirclePitchAlignment,
+ CirclePitchScale,
+ CircleRadius,
+ CircleStrokeColor,
+ CircleStrokeOpacity,
+ CircleStrokeWidth,
+ CircleTranslate,
+ CircleTranslateAnchor,
+ CircleBlurTransition,
+ CircleColorTransition,
+ CircleOpacityTransition,
+ CirclePitchAlignmentTransition,
+ CirclePitchScaleTransition,
+ CircleRadiusTransition,
+ CircleStrokeColorTransition,
+ CircleStrokeOpacityTransition,
+ CircleStrokeWidthTransition,
+ CircleTranslateTransition,
+ CircleTranslateAnchorTransition,
+};
+
+template <typename T>
+constexpr uint8_t toUint8(T t) noexcept {
+ return uint8_t(mbgl::underlying_type(t));
+}
+
+MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>(
+ {{"circle-blur", toUint8(Property::CircleBlur)},
+ {"circle-color", toUint8(Property::CircleColor)},
+ {"circle-opacity", toUint8(Property::CircleOpacity)},
+ {"circle-pitch-alignment", toUint8(Property::CirclePitchAlignment)},
+ {"circle-pitch-scale", toUint8(Property::CirclePitchScale)},
+ {"circle-radius", toUint8(Property::CircleRadius)},
+ {"circle-stroke-color", toUint8(Property::CircleStrokeColor)},
+ {"circle-stroke-opacity", toUint8(Property::CircleStrokeOpacity)},
+ {"circle-stroke-width", toUint8(Property::CircleStrokeWidth)},
+ {"circle-translate", toUint8(Property::CircleTranslate)},
+ {"circle-translate-anchor", toUint8(Property::CircleTranslateAnchor)},
+ {"circle-blur-transition", toUint8(Property::CircleBlurTransition)},
+ {"circle-color-transition", toUint8(Property::CircleColorTransition)},
+ {"circle-opacity-transition", toUint8(Property::CircleOpacityTransition)},
+ {"circle-pitch-alignment-transition", toUint8(Property::CirclePitchAlignmentTransition)},
+ {"circle-pitch-scale-transition", toUint8(Property::CirclePitchScaleTransition)},
+ {"circle-radius-transition", toUint8(Property::CircleRadiusTransition)},
+ {"circle-stroke-color-transition", toUint8(Property::CircleStrokeColorTransition)},
+ {"circle-stroke-opacity-transition", toUint8(Property::CircleStrokeOpacityTransition)},
+ {"circle-stroke-width-transition", toUint8(Property::CircleStrokeWidthTransition)},
+ {"circle-translate-transition", toUint8(Property::CircleTranslateTransition)},
+ {"circle-translate-anchor-transition", toUint8(Property::CircleTranslateAnchorTransition)}});
+
+constexpr uint8_t lastPaintPropertyIndex = toUint8(Property::CircleTranslateAnchorTransition);
+} // namespace
+
optional<Error> CircleLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- CircleBlur,
- CircleColor,
- CircleOpacity,
- CirclePitchAlignment,
- CirclePitchScale,
- CircleRadius,
- CircleStrokeColor,
- CircleStrokeOpacity,
- CircleStrokeWidth,
- CircleTranslate,
- CircleTranslateAnchor,
- CircleBlurTransition,
- CircleColorTransition,
- CircleOpacityTransition,
- CirclePitchAlignmentTransition,
- CirclePitchScaleTransition,
- CircleRadiusTransition,
- CircleStrokeColorTransition,
- CircleStrokeOpacityTransition,
- CircleStrokeWidthTransition,
- CircleTranslateTransition,
- CircleTranslateAnchorTransition,
- };
-
- MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
- { "circle-blur", mbgl::underlying_type(Property::CircleBlur) },
- { "circle-color", mbgl::underlying_type(Property::CircleColor) },
- { "circle-opacity", mbgl::underlying_type(Property::CircleOpacity) },
- { "circle-pitch-alignment", mbgl::underlying_type(Property::CirclePitchAlignment) },
- { "circle-pitch-scale", mbgl::underlying_type(Property::CirclePitchScale) },
- { "circle-radius", mbgl::underlying_type(Property::CircleRadius) },
- { "circle-stroke-color", mbgl::underlying_type(Property::CircleStrokeColor) },
- { "circle-stroke-opacity", mbgl::underlying_type(Property::CircleStrokeOpacity) },
- { "circle-stroke-width", mbgl::underlying_type(Property::CircleStrokeWidth) },
- { "circle-translate", mbgl::underlying_type(Property::CircleTranslate) },
- { "circle-translate-anchor", mbgl::underlying_type(Property::CircleTranslateAnchor) },
- { "circle-blur-transition", mbgl::underlying_type(Property::CircleBlurTransition) },
- { "circle-color-transition", mbgl::underlying_type(Property::CircleColorTransition) },
- { "circle-opacity-transition", mbgl::underlying_type(Property::CircleOpacityTransition) },
- { "circle-pitch-alignment-transition", mbgl::underlying_type(Property::CirclePitchAlignmentTransition) },
- { "circle-pitch-scale-transition", mbgl::underlying_type(Property::CirclePitchScaleTransition) },
- { "circle-radius-transition", mbgl::underlying_type(Property::CircleRadiusTransition) },
- { "circle-stroke-color-transition", mbgl::underlying_type(Property::CircleStrokeColorTransition) },
- { "circle-stroke-opacity-transition", mbgl::underlying_type(Property::CircleStrokeOpacityTransition) },
- { "circle-stroke-width-transition", mbgl::underlying_type(Property::CircleStrokeWidthTransition) },
- { "circle-translate-transition", mbgl::underlying_type(Property::CircleTranslateTransition) },
- { "circle-translate-anchor-transition", mbgl::underlying_type(Property::CircleTranslateAnchorTransition) }
- });
-
- const auto it = properties.find(name.c_str());
- if (it == properties.end()) {
- return Error { "layer doesn't support this property" };
+ const auto it = layerProperties.find(name.c_str());
+ if (it == layerProperties.end() || it->second > lastPaintPropertyIndex) {
+ return Error{"layer doesn't support this property"};
}
auto property = static_cast<Property>(it->second);
@@ -530,64 +537,118 @@ optional<Error> CircleLayer::setPaintProperty(const std::string& name, const Con
if (!transition) {
return error;
}
-
+
if (property == Property::CircleBlurTransition) {
setCircleBlurTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleColorTransition) {
setCircleColorTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleOpacityTransition) {
setCircleOpacityTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CirclePitchAlignmentTransition) {
setCirclePitchAlignmentTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CirclePitchScaleTransition) {
setCirclePitchScaleTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleRadiusTransition) {
setCircleRadiusTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleStrokeColorTransition) {
setCircleStrokeColorTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleStrokeOpacityTransition) {
setCircleStrokeOpacityTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleStrokeWidthTransition) {
setCircleStrokeWidthTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleTranslateTransition) {
setCircleTranslateTransition(*transition);
return nullopt;
}
-
+
if (property == Property::CircleTranslateAnchorTransition) {
setCircleTranslateAnchorTransition(*transition);
return nullopt;
}
-
- return Error { "layer doesn't support this property" };
+ return Error{"layer doesn't support this property"};
+}
+
+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 {};
}
optional<Error> CircleLayer::setLayoutProperty(const std::string& name, const Convertible& value) {
@@ -604,5 +665,3 @@ Mutable<Layer::Impl> CircleLayer::mutableBaseImpl() const {
} // namespace style
} // namespace mbgl
-
-// clang-format on