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