diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-02-25 10:21:46 +0200 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2020-02-26 18:15:23 +0200 |
commit | 8785f77cd633be92123464310f85ea671689473c (patch) | |
tree | c3c845eb3feafeb8a02a392f2340fdfe4bd3d216 /src/mbgl/style/layers/fill_extrusion_layer.cpp | |
parent | 713299c429ab494e4cc3347d9dcd76b67ba2522c (diff) | |
download | qtlocation-mapboxgl-8785f77cd633be92123464310f85ea671689473c.tar.gz |
[core] Generate layer code
Diffstat (limited to 'src/mbgl/style/layers/fill_extrusion_layer.cpp')
-rw-r--r-- | src/mbgl/style/layers/fill_extrusion_layer.cpp | 101 |
1 files changed, 61 insertions, 40 deletions
diff --git a/src/mbgl/style/layers/fill_extrusion_layer.cpp b/src/mbgl/style/layers/fill_extrusion_layer.cpp index 2de27f3903..c9819f66f1 100644 --- a/src/mbgl/style/layers/fill_extrusion_layer.cpp +++ b/src/mbgl/style/layers/fill_extrusion_layer.cpp @@ -283,6 +283,8 @@ using namespace conversion; namespace { +constexpr uint8_t kPaintPropertyCount = 16u; + enum class Property : uint8_t { FillExtrusionBase, FillExtrusionColor, @@ -324,8 +326,66 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map< {"fill-extrusion-translate-transition", toUint8(Property::FillExtrusionTranslateTransition)}, {"fill-extrusion-translate-anchor-transition", toUint8(Property::FillExtrusionTranslateAnchorTransition)}, {"fill-extrusion-vertical-gradient-transition", toUint8(Property::FillExtrusionVerticalGradientTransition)}}); + +StyleProperty getLayerProperty(const FillExtrusionLayer& layer, Property property) { + switch (property) { + case Property::FillExtrusionBase: + return makeStyleProperty(layer.getFillExtrusionBase()); + case Property::FillExtrusionColor: + return makeStyleProperty(layer.getFillExtrusionColor()); + case Property::FillExtrusionHeight: + return makeStyleProperty(layer.getFillExtrusionHeight()); + case Property::FillExtrusionOpacity: + return makeStyleProperty(layer.getFillExtrusionOpacity()); + case Property::FillExtrusionPattern: + return makeStyleProperty(layer.getFillExtrusionPattern()); + case Property::FillExtrusionTranslate: + return makeStyleProperty(layer.getFillExtrusionTranslate()); + case Property::FillExtrusionTranslateAnchor: + return makeStyleProperty(layer.getFillExtrusionTranslateAnchor()); + case Property::FillExtrusionVerticalGradient: + return makeStyleProperty(layer.getFillExtrusionVerticalGradient()); + case Property::FillExtrusionBaseTransition: + return makeStyleProperty(layer.getFillExtrusionBaseTransition()); + case Property::FillExtrusionColorTransition: + return makeStyleProperty(layer.getFillExtrusionColorTransition()); + case Property::FillExtrusionHeightTransition: + return makeStyleProperty(layer.getFillExtrusionHeightTransition()); + case Property::FillExtrusionOpacityTransition: + return makeStyleProperty(layer.getFillExtrusionOpacityTransition()); + case Property::FillExtrusionPatternTransition: + return makeStyleProperty(layer.getFillExtrusionPatternTransition()); + case Property::FillExtrusionTranslateTransition: + return makeStyleProperty(layer.getFillExtrusionTranslateTransition()); + case Property::FillExtrusionTranslateAnchorTransition: + return makeStyleProperty(layer.getFillExtrusionTranslateAnchorTransition()); + case Property::FillExtrusionVerticalGradientTransition: + return makeStyleProperty(layer.getFillExtrusionVerticalGradientTransition()); + } + return {}; +} + +StyleProperty getLayerProperty(const FillExtrusionLayer& 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 FillExtrusionLayer::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> FillExtrusionLayer::setProperty(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); if (it == layerProperties.end()) { @@ -463,46 +523,7 @@ optional<Error> FillExtrusionLayer::setProperty(const std::string& name, const C } StyleProperty FillExtrusionLayer::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::FillExtrusionBase: - return makeStyleProperty(getFillExtrusionBase()); - case Property::FillExtrusionColor: - return makeStyleProperty(getFillExtrusionColor()); - case Property::FillExtrusionHeight: - return makeStyleProperty(getFillExtrusionHeight()); - case Property::FillExtrusionOpacity: - return makeStyleProperty(getFillExtrusionOpacity()); - case Property::FillExtrusionPattern: - return makeStyleProperty(getFillExtrusionPattern()); - case Property::FillExtrusionTranslate: - return makeStyleProperty(getFillExtrusionTranslate()); - case Property::FillExtrusionTranslateAnchor: - return makeStyleProperty(getFillExtrusionTranslateAnchor()); - case Property::FillExtrusionVerticalGradient: - return makeStyleProperty(getFillExtrusionVerticalGradient()); - case Property::FillExtrusionBaseTransition: - return makeStyleProperty(getFillExtrusionBaseTransition()); - case Property::FillExtrusionColorTransition: - return makeStyleProperty(getFillExtrusionColorTransition()); - case Property::FillExtrusionHeightTransition: - return makeStyleProperty(getFillExtrusionHeightTransition()); - case Property::FillExtrusionOpacityTransition: - return makeStyleProperty(getFillExtrusionOpacityTransition()); - case Property::FillExtrusionPatternTransition: - return makeStyleProperty(getFillExtrusionPatternTransition()); - case Property::FillExtrusionTranslateTransition: - return makeStyleProperty(getFillExtrusionTranslateTransition()); - case Property::FillExtrusionTranslateAnchorTransition: - return makeStyleProperty(getFillExtrusionTranslateAnchorTransition()); - case Property::FillExtrusionVerticalGradientTransition: - return makeStyleProperty(getFillExtrusionVerticalGradientTransition()); - } - return {}; + return getLayerProperty(*this, name); } Mutable<Layer::Impl> FillExtrusionLayer::mutableBaseImpl() const { |