summaryrefslogtreecommitdiff
path: root/src/mbgl/style/layers/fill_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/fill_layer.cpp')
-rw-r--r--src/mbgl/style/layers/fill_layer.cpp143
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