diff options
Diffstat (limited to 'src/mbgl/style/layers/fill_layer.cpp')
-rw-r--r-- | src/mbgl/style/layers/fill_layer.cpp | 143 |
1 files changed, 93 insertions, 50 deletions
diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp index 52f2b166b3..e3d6c6c708 100644 --- a/src/mbgl/style/layers/fill_layer.cpp +++ b/src/mbgl/style/layers/fill_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/fill_layer.hpp> @@ -256,44 +254,53 @@ TransitionOptions FillLayer::getFillTranslateAnchorTransition() const { using namespace conversion; +namespace { + +enum class Property : uint8_t { + FillAntialias, + FillColor, + FillOpacity, + FillOutlineColor, + FillPattern, + FillTranslate, + FillTranslateAnchor, + FillAntialiasTransition, + FillColorTransition, + FillOpacityTransition, + FillOutlineColorTransition, + FillPatternTransition, + FillTranslateTransition, + FillTranslateAnchorTransition, +}; + +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>( + {{"fill-antialias", toUint8(Property::FillAntialias)}, + {"fill-color", toUint8(Property::FillColor)}, + {"fill-opacity", toUint8(Property::FillOpacity)}, + {"fill-outline-color", toUint8(Property::FillOutlineColor)}, + {"fill-pattern", toUint8(Property::FillPattern)}, + {"fill-translate", toUint8(Property::FillTranslate)}, + {"fill-translate-anchor", toUint8(Property::FillTranslateAnchor)}, + {"fill-antialias-transition", toUint8(Property::FillAntialiasTransition)}, + {"fill-color-transition", toUint8(Property::FillColorTransition)}, + {"fill-opacity-transition", toUint8(Property::FillOpacityTransition)}, + {"fill-outline-color-transition", toUint8(Property::FillOutlineColorTransition)}, + {"fill-pattern-transition", toUint8(Property::FillPatternTransition)}, + {"fill-translate-transition", toUint8(Property::FillTranslateTransition)}, + {"fill-translate-anchor-transition", toUint8(Property::FillTranslateAnchorTransition)}}); + +constexpr uint8_t lastPaintPropertyIndex = toUint8(Property::FillTranslateAnchorTransition); +} // namespace + optional<Error> FillLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - FillAntialias, - FillColor, - FillOpacity, - FillOutlineColor, - FillPattern, - FillTranslate, - FillTranslateAnchor, - FillAntialiasTransition, - FillColorTransition, - FillOpacityTransition, - FillOutlineColorTransition, - FillPatternTransition, - FillTranslateTransition, - FillTranslateAnchorTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map<mapbox::eternal::string, uint8_t>({ - { "fill-antialias", mbgl::underlying_type(Property::FillAntialias) }, - { "fill-color", mbgl::underlying_type(Property::FillColor) }, - { "fill-opacity", mbgl::underlying_type(Property::FillOpacity) }, - { "fill-outline-color", mbgl::underlying_type(Property::FillOutlineColor) }, - { "fill-pattern", mbgl::underlying_type(Property::FillPattern) }, - { "fill-translate", mbgl::underlying_type(Property::FillTranslate) }, - { "fill-translate-anchor", mbgl::underlying_type(Property::FillTranslateAnchor) }, - { "fill-antialias-transition", mbgl::underlying_type(Property::FillAntialiasTransition) }, - { "fill-color-transition", mbgl::underlying_type(Property::FillColorTransition) }, - { "fill-opacity-transition", mbgl::underlying_type(Property::FillOpacityTransition) }, - { "fill-outline-color-transition", mbgl::underlying_type(Property::FillOutlineColorTransition) }, - { "fill-pattern-transition", mbgl::underlying_type(Property::FillPatternTransition) }, - { "fill-translate-transition", mbgl::underlying_type(Property::FillTranslateTransition) }, - { "fill-translate-anchor-transition", mbgl::underlying_type(Property::FillTranslateAnchorTransition) } - }); - - 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); @@ -384,44 +391,82 @@ optional<Error> FillLayer::setPaintProperty(const std::string& name, const Conve if (!transition) { return error; } - + if (property == Property::FillAntialiasTransition) { setFillAntialiasTransition(*transition); return nullopt; } - + if (property == Property::FillColorTransition) { setFillColorTransition(*transition); return nullopt; } - + if (property == Property::FillOpacityTransition) { setFillOpacityTransition(*transition); return nullopt; } - + if (property == Property::FillOutlineColorTransition) { setFillOutlineColorTransition(*transition); return nullopt; } - + if (property == Property::FillPatternTransition) { setFillPatternTransition(*transition); return nullopt; } - + if (property == Property::FillTranslateTransition) { setFillTranslateTransition(*transition); return nullopt; } - + if (property == Property::FillTranslateAnchorTransition) { setFillTranslateAnchorTransition(*transition); return nullopt; } - - return Error { "layer doesn't support this property" }; + return Error{"layer doesn't support this property"}; +} + +StyleProperty FillLayer::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::FillAntialias: + return makeStyleProperty(getFillAntialias()); + case Property::FillColor: + return makeStyleProperty(getFillColor()); + case Property::FillOpacity: + return makeStyleProperty(getFillOpacity()); + case Property::FillOutlineColor: + return makeStyleProperty(getFillOutlineColor()); + case Property::FillPattern: + return makeStyleProperty(getFillPattern()); + case Property::FillTranslate: + return makeStyleProperty(getFillTranslate()); + case Property::FillTranslateAnchor: + return makeStyleProperty(getFillTranslateAnchor()); + case Property::FillAntialiasTransition: + return makeStyleProperty(getFillAntialiasTransition()); + case Property::FillColorTransition: + return makeStyleProperty(getFillColorTransition()); + case Property::FillOpacityTransition: + return makeStyleProperty(getFillOpacityTransition()); + case Property::FillOutlineColorTransition: + return makeStyleProperty(getFillOutlineColorTransition()); + case Property::FillPatternTransition: + return makeStyleProperty(getFillPatternTransition()); + case Property::FillTranslateTransition: + return makeStyleProperty(getFillTranslateTransition()); + case Property::FillTranslateAnchorTransition: + return makeStyleProperty(getFillTranslateAnchorTransition()); + } + return {}; } optional<Error> FillLayer::setLayoutProperty(const std::string& name, const Convertible& value) { @@ -438,5 +483,3 @@ Mutable<Layer::Impl> FillLayer::mutableBaseImpl() const { } // namespace style } // namespace mbgl - -// clang-format on |