summaryrefslogtreecommitdiff
path: root/src/mbgl/style/layers/line_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/line_layer.cpp')
-rw-r--r--src/mbgl/style/layers/line_layer.cpp162
1 files changed, 110 insertions, 52 deletions
diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp
index bd29f7f6fd..491cfd48a0 100644
--- a/src/mbgl/style/layers/line_layer.cpp
+++ b/src/mbgl/style/layers/line_layer.cpp
@@ -430,59 +430,62 @@ TransitionOptions LineLayer::getLineWidthTransition() const {
using namespace conversion;
-optional<Error> LineLayer::setPaintProperty(const std::string& name, const Convertible& value) {
- enum class Property {
- LineBlur,
- LineColor,
- LineDasharray,
- LineGapWidth,
- LineGradient,
- LineOffset,
- LineOpacity,
- LinePattern,
- LineTranslate,
- LineTranslateAnchor,
- LineWidth,
- LineBlurTransition,
- LineColorTransition,
- LineDasharrayTransition,
- LineGapWidthTransition,
- LineGradientTransition,
- LineOffsetTransition,
- LineOpacityTransition,
- LinePatternTransition,
- LineTranslateTransition,
- LineTranslateAnchorTransition,
- LineWidthTransition,
- };
+namespace {
+
+enum class Property {
+ LineBlur,
+ LineColor,
+ LineDasharray,
+ LineGapWidth,
+ LineGradient,
+ LineOffset,
+ LineOpacity,
+ LinePattern,
+ LineTranslate,
+ LineTranslateAnchor,
+ LineWidth,
+ LineBlurTransition,
+ LineColorTransition,
+ LineDasharrayTransition,
+ LineGapWidthTransition,
+ LineGradientTransition,
+ LineOffsetTransition,
+ LineOpacityTransition,
+ LinePatternTransition,
+ LineTranslateTransition,
+ LineTranslateAnchorTransition,
+ LineWidthTransition,
+};
+
+MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>(
+ {{"line-blur", mbgl::underlying_type(Property::LineBlur)},
+ {"line-color", mbgl::underlying_type(Property::LineColor)},
+ {"line-dasharray", mbgl::underlying_type(Property::LineDasharray)},
+ {"line-gap-width", mbgl::underlying_type(Property::LineGapWidth)},
+ {"line-gradient", mbgl::underlying_type(Property::LineGradient)},
+ {"line-offset", mbgl::underlying_type(Property::LineOffset)},
+ {"line-opacity", mbgl::underlying_type(Property::LineOpacity)},
+ {"line-pattern", mbgl::underlying_type(Property::LinePattern)},
+ {"line-translate", mbgl::underlying_type(Property::LineTranslate)},
+ {"line-translate-anchor", mbgl::underlying_type(Property::LineTranslateAnchor)},
+ {"line-width", mbgl::underlying_type(Property::LineWidth)},
+ {"line-blur-transition", mbgl::underlying_type(Property::LineBlurTransition)},
+ {"line-color-transition", mbgl::underlying_type(Property::LineColorTransition)},
+ {"line-dasharray-transition", mbgl::underlying_type(Property::LineDasharrayTransition)},
+ {"line-gap-width-transition", mbgl::underlying_type(Property::LineGapWidthTransition)},
+ {"line-gradient-transition", mbgl::underlying_type(Property::LineGradientTransition)},
+ {"line-offset-transition", mbgl::underlying_type(Property::LineOffsetTransition)},
+ {"line-opacity-transition", mbgl::underlying_type(Property::LineOpacityTransition)},
+ {"line-pattern-transition", mbgl::underlying_type(Property::LinePatternTransition)},
+ {"line-translate-transition", mbgl::underlying_type(Property::LineTranslateTransition)},
+ {"line-translate-anchor-transition", mbgl::underlying_type(Property::LineTranslateAnchorTransition)},
+ {"line-width-transition", mbgl::underlying_type(Property::LineWidthTransition)}});
+
+} // namespace
- MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
- { "line-blur", mbgl::underlying_type(Property::LineBlur) },
- { "line-color", mbgl::underlying_type(Property::LineColor) },
- { "line-dasharray", mbgl::underlying_type(Property::LineDasharray) },
- { "line-gap-width", mbgl::underlying_type(Property::LineGapWidth) },
- { "line-gradient", mbgl::underlying_type(Property::LineGradient) },
- { "line-offset", mbgl::underlying_type(Property::LineOffset) },
- { "line-opacity", mbgl::underlying_type(Property::LineOpacity) },
- { "line-pattern", mbgl::underlying_type(Property::LinePattern) },
- { "line-translate", mbgl::underlying_type(Property::LineTranslate) },
- { "line-translate-anchor", mbgl::underlying_type(Property::LineTranslateAnchor) },
- { "line-width", mbgl::underlying_type(Property::LineWidth) },
- { "line-blur-transition", mbgl::underlying_type(Property::LineBlurTransition) },
- { "line-color-transition", mbgl::underlying_type(Property::LineColorTransition) },
- { "line-dasharray-transition", mbgl::underlying_type(Property::LineDasharrayTransition) },
- { "line-gap-width-transition", mbgl::underlying_type(Property::LineGapWidthTransition) },
- { "line-gradient-transition", mbgl::underlying_type(Property::LineGradientTransition) },
- { "line-offset-transition", mbgl::underlying_type(Property::LineOffsetTransition) },
- { "line-opacity-transition", mbgl::underlying_type(Property::LineOpacityTransition) },
- { "line-pattern-transition", mbgl::underlying_type(Property::LinePatternTransition) },
- { "line-translate-transition", mbgl::underlying_type(Property::LineTranslateTransition) },
- { "line-translate-anchor-transition", mbgl::underlying_type(Property::LineTranslateAnchorTransition) },
- { "line-width-transition", mbgl::underlying_type(Property::LineWidthTransition) }
- });
-
- const auto it = properties.find(name.c_str());
- if (it == properties.end()) {
+optional<Error> LineLayer::setPaintProperty(const std::string& name, const Convertible& value) {
+ const auto it = paintProperties.find(name.c_str());
+ if (it == paintProperties.end()) {
return Error { "layer doesn't support this property" };
}
@@ -661,6 +664,61 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
return Error { "layer doesn't support this property" };
}
+LayerProperty LineLayer::getPaintProperty(const std::string& name) const {
+ const auto it = paintProperties.find(name.c_str());
+ if (it == paintProperties.end()) {
+ return {};
+ }
+
+ switch (static_cast<Property>(it->second)) {
+ case Property::LineBlur:
+ return conversion::makeLayerProperty(getLineBlur());
+ case Property::LineColor:
+ return conversion::makeLayerProperty(getLineColor());
+ case Property::LineDasharray:
+ return conversion::makeLayerProperty(getLineDasharray());
+ case Property::LineGapWidth:
+ return conversion::makeLayerProperty(getLineGapWidth());
+ case Property::LineGradient:
+ return conversion::makeLayerProperty(getLineGradient());
+ case Property::LineOffset:
+ return conversion::makeLayerProperty(getLineOffset());
+ case Property::LineOpacity:
+ return conversion::makeLayerProperty(getLineOpacity());
+ case Property::LinePattern:
+ return conversion::makeLayerProperty(getLinePattern());
+ case Property::LineTranslate:
+ return conversion::makeLayerProperty(getLineTranslate());
+ case Property::LineTranslateAnchor:
+ return conversion::makeLayerProperty(getLineTranslateAnchor());
+ case Property::LineWidth:
+ return conversion::makeLayerProperty(getLineWidth());
+ case Property::LineBlurTransition:
+ return conversion::makeLayerProperty(getLineBlurTransition());
+ case Property::LineColorTransition:
+ return conversion::makeLayerProperty(getLineColorTransition());
+ case Property::LineDasharrayTransition:
+ return conversion::makeLayerProperty(getLineDasharrayTransition());
+ case Property::LineGapWidthTransition:
+ return conversion::makeLayerProperty(getLineGapWidthTransition());
+ case Property::LineGradientTransition:
+ return conversion::makeLayerProperty(getLineGradientTransition());
+ case Property::LineOffsetTransition:
+ return conversion::makeLayerProperty(getLineOffsetTransition());
+ case Property::LineOpacityTransition:
+ return conversion::makeLayerProperty(getLineOpacityTransition());
+ case Property::LinePatternTransition:
+ return conversion::makeLayerProperty(getLinePatternTransition());
+ case Property::LineTranslateTransition:
+ return conversion::makeLayerProperty(getLineTranslateTransition());
+ case Property::LineTranslateAnchorTransition:
+ return conversion::makeLayerProperty(getLineTranslateAnchorTransition());
+ case Property::LineWidthTransition:
+ return conversion::makeLayerProperty(getLineWidthTransition());
+ }
+ return {};
+}
+
optional<Error> LineLayer::setLayoutProperty(const std::string& name, const Convertible& value) {
if (name == "visibility") {
return Layer::setVisibility(value);