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.cpp99
1 files changed, 60 insertions, 39 deletions
diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp
index 757738dfef..914a23d96b 100644
--- a/src/mbgl/style/layers/fill_layer.cpp
+++ b/src/mbgl/style/layers/fill_layer.cpp
@@ -272,6 +272,8 @@ using namespace conversion;
namespace {
+constexpr uint8_t kPaintPropertyCount = 14u;
+
enum class Property : uint8_t {
FillAntialias,
FillColor,
@@ -287,7 +289,7 @@ enum class Property : uint8_t {
FillPatternTransition,
FillTranslateTransition,
FillTranslateAnchorTransition,
- FillSortKey,
+ FillSortKey = kPaintPropertyCount,
};
template <typename T>
@@ -311,8 +313,64 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map<
{"fill-translate-transition", toUint8(Property::FillTranslateTransition)},
{"fill-translate-anchor-transition", toUint8(Property::FillTranslateAnchorTransition)},
{"fill-sort-key", toUint8(Property::FillSortKey)}});
+
+StyleProperty getLayerProperty(const FillLayer& layer, Property property) {
+ switch (property) {
+ case Property::FillAntialias:
+ return makeStyleProperty(layer.getFillAntialias());
+ case Property::FillColor:
+ return makeStyleProperty(layer.getFillColor());
+ case Property::FillOpacity:
+ return makeStyleProperty(layer.getFillOpacity());
+ case Property::FillOutlineColor:
+ return makeStyleProperty(layer.getFillOutlineColor());
+ case Property::FillPattern:
+ return makeStyleProperty(layer.getFillPattern());
+ case Property::FillTranslate:
+ return makeStyleProperty(layer.getFillTranslate());
+ case Property::FillTranslateAnchor:
+ return makeStyleProperty(layer.getFillTranslateAnchor());
+ case Property::FillAntialiasTransition:
+ return makeStyleProperty(layer.getFillAntialiasTransition());
+ case Property::FillColorTransition:
+ return makeStyleProperty(layer.getFillColorTransition());
+ case Property::FillOpacityTransition:
+ return makeStyleProperty(layer.getFillOpacityTransition());
+ case Property::FillOutlineColorTransition:
+ return makeStyleProperty(layer.getFillOutlineColorTransition());
+ case Property::FillPatternTransition:
+ return makeStyleProperty(layer.getFillPatternTransition());
+ case Property::FillTranslateTransition:
+ return makeStyleProperty(layer.getFillTranslateTransition());
+ case Property::FillTranslateAnchorTransition:
+ return makeStyleProperty(layer.getFillTranslateAnchorTransition());
+ case Property::FillSortKey:
+ return makeStyleProperty(layer.getFillSortKey());
+ }
+ return {};
+}
+
+StyleProperty getLayerProperty(const FillLayer& layer, const std::string& name) {
+ const auto it = layerProperties.find(name.c_str());
+ if (it == layerProperties.end()) {
+ return {};
+ }
+ return getLayerProperty(layer, static_cast<Property>(it->second));
+}
+
} // namespace
+Value FillLayer::serialize() const {
+ auto result = Layer::serialize();
+ assert(result.getObject());
+ for (const auto& property : layerProperties) {
+ auto styleProperty = getLayerProperty(*this, static_cast<Property>(property.second));
+ if (styleProperty.getKind() == StyleProperty::Kind::Undefined) continue;
+ serializeProperty(result, styleProperty, property.first.c_str(), property.second < kPaintPropertyCount);
+ }
+ return result;
+}
+
optional<Error> FillLayer::setProperty(const std::string& name, const Convertible& value) {
const auto it = layerProperties.find(name.c_str());
if (it == layerProperties.end()) {
@@ -442,44 +500,7 @@ optional<Error> FillLayer::setProperty(const std::string& name, const Convertibl
}
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());
- case Property::FillSortKey:
- return makeStyleProperty(getFillSortKey());
- }
- return {};
+ return getLayerProperty(*this, name);
}
Mutable<Layer::Impl> FillLayer::mutableBaseImpl() const {