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.cpp232
1 files changed, 147 insertions, 85 deletions
diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp
index bd29f7f6fd..309a81ae2b 100644
--- a/src/mbgl/style/layers/line_layer.cpp
+++ b/src/mbgl/style/layers/line_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/line_layer.hpp>
@@ -430,60 +428,77 @@ TransitionOptions LineLayer::getLineWidthTransition() const {
using namespace conversion;
+namespace {
+
+enum class Property : uint8_t {
+ LineBlur,
+ LineColor,
+ LineDasharray,
+ LineGapWidth,
+ LineGradient,
+ LineOffset,
+ LineOpacity,
+ LinePattern,
+ LineTranslate,
+ LineTranslateAnchor,
+ LineWidth,
+ LineBlurTransition,
+ LineColorTransition,
+ LineDasharrayTransition,
+ LineGapWidthTransition,
+ LineGradientTransition,
+ LineOffsetTransition,
+ LineOpacityTransition,
+ LinePatternTransition,
+ LineTranslateTransition,
+ LineTranslateAnchorTransition,
+ LineWidthTransition,
+ LineCap,
+ LineJoin,
+ LineMiterLimit,
+ LineRoundLimit,
+};
+
+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>(
+ {{"line-blur", toUint8(Property::LineBlur)},
+ {"line-color", toUint8(Property::LineColor)},
+ {"line-dasharray", toUint8(Property::LineDasharray)},
+ {"line-gap-width", toUint8(Property::LineGapWidth)},
+ {"line-gradient", toUint8(Property::LineGradient)},
+ {"line-offset", toUint8(Property::LineOffset)},
+ {"line-opacity", toUint8(Property::LineOpacity)},
+ {"line-pattern", toUint8(Property::LinePattern)},
+ {"line-translate", toUint8(Property::LineTranslate)},
+ {"line-translate-anchor", toUint8(Property::LineTranslateAnchor)},
+ {"line-width", toUint8(Property::LineWidth)},
+ {"line-blur-transition", toUint8(Property::LineBlurTransition)},
+ {"line-color-transition", toUint8(Property::LineColorTransition)},
+ {"line-dasharray-transition", toUint8(Property::LineDasharrayTransition)},
+ {"line-gap-width-transition", toUint8(Property::LineGapWidthTransition)},
+ {"line-gradient-transition", toUint8(Property::LineGradientTransition)},
+ {"line-offset-transition", toUint8(Property::LineOffsetTransition)},
+ {"line-opacity-transition", toUint8(Property::LineOpacityTransition)},
+ {"line-pattern-transition", toUint8(Property::LinePatternTransition)},
+ {"line-translate-transition", toUint8(Property::LineTranslateTransition)},
+ {"line-translate-anchor-transition", toUint8(Property::LineTranslateAnchorTransition)},
+ {"line-width-transition", toUint8(Property::LineWidthTransition)},
+ {"line-cap", toUint8(Property::LineCap)},
+ {"line-join", toUint8(Property::LineJoin)},
+ {"line-miter-limit", toUint8(Property::LineMiterLimit)},
+ {"line-round-limit", toUint8(Property::LineRoundLimit)}});
+
+constexpr uint8_t lastPaintPropertyIndex = toUint8(Property::LineWidthTransition);
+} // namespace
+
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,
- };
-
- 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()) {
- 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);
@@ -601,85 +616,134 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
if (!transition) {
return error;
}
-
+
if (property == Property::LineBlurTransition) {
setLineBlurTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineColorTransition) {
setLineColorTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineDasharrayTransition) {
setLineDasharrayTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineGapWidthTransition) {
setLineGapWidthTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineGradientTransition) {
setLineGradientTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineOffsetTransition) {
setLineOffsetTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineOpacityTransition) {
setLineOpacityTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LinePatternTransition) {
setLinePatternTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineTranslateTransition) {
setLineTranslateTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineTranslateAnchorTransition) {
setLineTranslateAnchorTransition(*transition);
return nullopt;
}
-
+
if (property == Property::LineWidthTransition) {
setLineWidthTransition(*transition);
return nullopt;
}
-
- return Error { "layer doesn't support this property" };
+ return Error{"layer doesn't support this property"};
+}
+
+StyleProperty LineLayer::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::LineBlur:
+ return makeStyleProperty(getLineBlur());
+ case Property::LineColor:
+ return makeStyleProperty(getLineColor());
+ case Property::LineDasharray:
+ return makeStyleProperty(getLineDasharray());
+ case Property::LineGapWidth:
+ return makeStyleProperty(getLineGapWidth());
+ case Property::LineGradient:
+ return makeStyleProperty(getLineGradient());
+ case Property::LineOffset:
+ return makeStyleProperty(getLineOffset());
+ case Property::LineOpacity:
+ return makeStyleProperty(getLineOpacity());
+ case Property::LinePattern:
+ return makeStyleProperty(getLinePattern());
+ case Property::LineTranslate:
+ return makeStyleProperty(getLineTranslate());
+ case Property::LineTranslateAnchor:
+ return makeStyleProperty(getLineTranslateAnchor());
+ case Property::LineWidth:
+ return makeStyleProperty(getLineWidth());
+ case Property::LineBlurTransition:
+ return makeStyleProperty(getLineBlurTransition());
+ case Property::LineColorTransition:
+ return makeStyleProperty(getLineColorTransition());
+ case Property::LineDasharrayTransition:
+ return makeStyleProperty(getLineDasharrayTransition());
+ case Property::LineGapWidthTransition:
+ return makeStyleProperty(getLineGapWidthTransition());
+ case Property::LineGradientTransition:
+ return makeStyleProperty(getLineGradientTransition());
+ case Property::LineOffsetTransition:
+ return makeStyleProperty(getLineOffsetTransition());
+ case Property::LineOpacityTransition:
+ return makeStyleProperty(getLineOpacityTransition());
+ case Property::LinePatternTransition:
+ return makeStyleProperty(getLinePatternTransition());
+ case Property::LineTranslateTransition:
+ return makeStyleProperty(getLineTranslateTransition());
+ case Property::LineTranslateAnchorTransition:
+ return makeStyleProperty(getLineTranslateAnchorTransition());
+ case Property::LineWidthTransition:
+ return makeStyleProperty(getLineWidthTransition());
+ case Property::LineCap:
+ return makeStyleProperty(getLineCap());
+ case Property::LineJoin:
+ return makeStyleProperty(getLineJoin());
+ case Property::LineMiterLimit:
+ return makeStyleProperty(getLineMiterLimit());
+ case Property::LineRoundLimit:
+ return makeStyleProperty(getLineRoundLimit());
+ }
+ return {};
}
optional<Error> LineLayer::setLayoutProperty(const std::string& name, const Convertible& value) {
if (name == "visibility") {
return Layer::setVisibility(value);
}
- enum class Property {
- LineCap,
- LineJoin,
- LineMiterLimit,
- LineRoundLimit,
- };
- MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({
- { "line-cap", mbgl::underlying_type(Property::LineCap) },
- { "line-join", mbgl::underlying_type(Property::LineJoin) },
- { "line-miter-limit", mbgl::underlying_type(Property::LineMiterLimit) },
- { "line-round-limit", mbgl::underlying_type(Property::LineRoundLimit) }
- });
-
- const auto it = properties.find(name.c_str());
- if (it == properties.end()) {
+ const auto it = layerProperties.find(name.c_str());
+ if (it == layerProperties.end() || it->second <= lastPaintPropertyIndex) {
return Error { "layer doesn't support this property" };
}
@@ -739,5 +803,3 @@ Mutable<Layer::Impl> LineLayer::mutableBaseImpl() const {
} // namespace style
} // namespace mbgl
-
-// clang-format on