diff options
Diffstat (limited to 'src/mbgl/style/layers/layer.cpp.ejs')
-rw-r--r-- | src/mbgl/style/layers/layer.cpp.ejs | 69 |
1 files changed, 47 insertions, 22 deletions
diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs index e74e7ab345..a17b9e803c 100644 --- a/src/mbgl/style/layers/layer.cpp.ejs +++ b/src/mbgl/style/layers/layer.cpp.ejs @@ -200,6 +200,8 @@ using namespace conversion; namespace { +constexpr uint8_t kPaintPropertyCount = <%- paintProperties.length * 2 -%>u; + enum class Property : uint8_t { <% for (const property of paintProperties) { -%> <%- camelize(property.name) %>, @@ -207,8 +209,12 @@ enum class Property : uint8_t { <% for (const property of paintProperties) { -%> <%- camelize(property.name) %>Transition, <% } -%> -<% for (const property of layoutProperties) { -%> - <%- camelize(property.name) %>, +<% for (let i = 0; i < layoutProperties.length; ++i) { -%> +<% if (i===0) { -%> + <%- camelize(layoutProperties[i].name) %> = kPaintPropertyCount, +<% } else { -%> + <%- camelize(layoutProperties[i].name) %>, +<% } -%> <% } -%> }; @@ -225,8 +231,46 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map< <%- paintProperties.map(p => `{"${p.name}-transition", toUint8(Property::${camelize(p.name)}Transition)}`).join(',\n ') %>, <%- layoutProperties.map(p => `{"${p.name}", toUint8(Property::${camelize(p.name)})}`).join(',\n ') %>}); <% } -%> + +StyleProperty getLayerProperty(const <%- camelize(type) %>Layer& layer, Property property) { + switch (property) { +<% for (const property of paintProperties) { -%> + case Property::<%- camelize(property.name) %>: + return makeStyleProperty(layer.get<%- camelize(property.name) %>()); +<% } -%> +<% for (const property of paintProperties) { -%> + case Property::<%- camelize(property.name) %>Transition: + return makeStyleProperty(layer.get<%- camelize(property.name) %>Transition()); +<% } -%> +<% for (const property of layoutProperties) { -%> + case Property::<%- camelize(property.name) %>: + return makeStyleProperty(layer.get<%- camelize(property.name) %>()); +<% } -%> + } + return {}; +} + +StyleProperty getLayerProperty(const <%- camelize(type) -%>Layer& 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 <%- camelize(type) %>Layer::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> <%- camelize(type) %>Layer::setProperty(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); if (it == layerProperties.end()) { @@ -289,26 +333,7 @@ optional<Error> <%- camelize(type) %>Layer::setProperty(const std::string& name, } StyleProperty <%- camelize(type) %>Layer::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)) { -<% for (const property of paintProperties) { -%> - case Property::<%- camelize(property.name) %>: - return makeStyleProperty(get<%- camelize(property.name) %>()); -<% } -%> -<% for (const property of paintProperties) { -%> - case Property::<%- camelize(property.name) %>Transition: - return makeStyleProperty(get<%- camelize(property.name) %>Transition()); -<% } -%> -<% for (const property of layoutProperties) { -%> - case Property::<%- camelize(property.name) %>: - return makeStyleProperty(get<%- camelize(property.name) %>()); -<% } -%> - } - return {}; + return getLayerProperty(*this, name); } Mutable<Layer::Impl> <%- camelize(type) %>Layer::mutableBaseImpl() const { |