From 80d723351d71006cf4e2994df7ab3b1a2b9df8b9 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 24 Mar 2020 15:35:41 +0200 Subject: [core] Ability to set source-layer setProperty method --- include/mbgl/layermanager/layer_factory.hpp | 1 - src/mbgl/layermanager/circle_layer_factory.cpp | 6 +----- src/mbgl/layermanager/fill_extrusion_layer_factory.cpp | 6 +----- src/mbgl/layermanager/fill_layer_factory.cpp | 6 +----- src/mbgl/layermanager/heatmap_layer_factory.cpp | 6 +----- src/mbgl/layermanager/layer_factory.cpp | 12 ------------ src/mbgl/layermanager/line_layer_factory.cpp | 7 +------ src/mbgl/layermanager/symbol_layer_factory.cpp | 7 +------ src/mbgl/style/conversion/layer.cpp | 3 +++ src/mbgl/style/layer.cpp | 5 +++++ 10 files changed, 14 insertions(+), 45 deletions(-) diff --git a/include/mbgl/layermanager/layer_factory.hpp b/include/mbgl/layermanager/layer_factory.hpp index f3cfef6bb6..afa25bf92d 100644 --- a/include/mbgl/layermanager/layer_factory.hpp +++ b/include/mbgl/layermanager/layer_factory.hpp @@ -37,7 +37,6 @@ public: protected: optional getSource(const style::conversion::Convertible& value) const noexcept; - bool initSourceLayerAndFilter(style::Layer*, const style::conversion::Convertible& value) const noexcept; }; } // namespace mbgl diff --git a/src/mbgl/layermanager/circle_layer_factory.cpp b/src/mbgl/layermanager/circle_layer_factory.cpp index 0f6ee6d407..ce28270c0b 100644 --- a/src/mbgl/layermanager/circle_layer_factory.cpp +++ b/src/mbgl/layermanager/circle_layer_factory.cpp @@ -17,11 +17,7 @@ std::unique_ptr CircleLayerFactory::createLayer(const std::string& return nullptr; } - std::unique_ptr layer = std::unique_ptr(new style::CircleLayer(id, *source)); - if (!initSourceLayerAndFilter(layer.get(), value)) { - return nullptr; - } - return layer; + return std::unique_ptr(new style::CircleLayer(id, *source)); } std::unique_ptr CircleLayerFactory::createBucket(const BucketParameters& parameters, const std::vector>& layers) noexcept { diff --git a/src/mbgl/layermanager/fill_extrusion_layer_factory.cpp b/src/mbgl/layermanager/fill_extrusion_layer_factory.cpp index e1bedb5246..079d1a0947 100644 --- a/src/mbgl/layermanager/fill_extrusion_layer_factory.cpp +++ b/src/mbgl/layermanager/fill_extrusion_layer_factory.cpp @@ -17,11 +17,7 @@ std::unique_ptr FillExtrusionLayerFactory::createLayer(const std:: return nullptr; } - std::unique_ptr layer = std::unique_ptr(new style::FillExtrusionLayer(id, *source)); - if (!initSourceLayerAndFilter(layer.get(), value)) { - return nullptr; - } - return layer; + return std::unique_ptr(new style::FillExtrusionLayer(id, *source)); } std::unique_ptr FillExtrusionLayerFactory::createLayout(const LayoutParameters& parameters, diff --git a/src/mbgl/layermanager/fill_layer_factory.cpp b/src/mbgl/layermanager/fill_layer_factory.cpp index 0c7c270c98..94f3f47ce8 100644 --- a/src/mbgl/layermanager/fill_layer_factory.cpp +++ b/src/mbgl/layermanager/fill_layer_factory.cpp @@ -17,11 +17,7 @@ std::unique_ptr FillLayerFactory::createLayer(const std::string& i return nullptr; } - std::unique_ptr layer = std::unique_ptr(new style::FillLayer(id, *source)); - if (!initSourceLayerAndFilter(layer.get(), value)) { - return nullptr; - } - return layer; + return std::unique_ptr(new style::FillLayer(id, *source)); } std::unique_ptr diff --git a/src/mbgl/layermanager/heatmap_layer_factory.cpp b/src/mbgl/layermanager/heatmap_layer_factory.cpp index 221a103053..babbe8993b 100644 --- a/src/mbgl/layermanager/heatmap_layer_factory.cpp +++ b/src/mbgl/layermanager/heatmap_layer_factory.cpp @@ -17,11 +17,7 @@ std::unique_ptr HeatmapLayerFactory::createLayer(const std::string return nullptr; } - std::unique_ptr layer = std::unique_ptr(new style::HeatmapLayer(id, *source)); - if (!initSourceLayerAndFilter(layer.get(), value)) { - return nullptr; - } - return layer; + return std::unique_ptr(new style::HeatmapLayer(id, *source)); } std::unique_ptr HeatmapLayerFactory::createBucket(const BucketParameters& parameters, const std::vector>& layers) noexcept { diff --git a/src/mbgl/layermanager/layer_factory.cpp b/src/mbgl/layermanager/layer_factory.cpp index be87dd665b..9db96f62ca 100644 --- a/src/mbgl/layermanager/layer_factory.cpp +++ b/src/mbgl/layermanager/layer_factory.cpp @@ -37,16 +37,4 @@ std::unique_ptr LayerFactory::createLayout(const LayoutParameters&, return nullptr; } -bool LayerFactory::initSourceLayerAndFilter(style::Layer* layer, const style::conversion::Convertible& value) const noexcept { - auto sourceLayerValue = objectMember(value, "source-layer"); - if (sourceLayerValue) { - optional sourceLayer = toString(*sourceLayerValue); - if (!sourceLayer) { - return false; - } - layer->setSourceLayer(*sourceLayer); - } - return true; -} - } // namespace mbgl diff --git a/src/mbgl/layermanager/line_layer_factory.cpp b/src/mbgl/layermanager/line_layer_factory.cpp index 53b91a0705..03751fef06 100644 --- a/src/mbgl/layermanager/line_layer_factory.cpp +++ b/src/mbgl/layermanager/line_layer_factory.cpp @@ -16,12 +16,7 @@ std::unique_ptr LineLayerFactory::createLayer(const std::string& i if (!source) { return nullptr; } - - std::unique_ptr layer = std::unique_ptr(new style::LineLayer(id, *source)); - if (!initSourceLayerAndFilter(layer.get(), value)) { - return nullptr; - } - return layer; + return std::unique_ptr(new style::LineLayer(id, *source)); } std::unique_ptr LineLayerFactory::createLayout(const LayoutParameters& parameters, diff --git a/src/mbgl/layermanager/symbol_layer_factory.cpp b/src/mbgl/layermanager/symbol_layer_factory.cpp index 11a4f09ec3..5f3de27bb5 100644 --- a/src/mbgl/layermanager/symbol_layer_factory.cpp +++ b/src/mbgl/layermanager/symbol_layer_factory.cpp @@ -16,12 +16,7 @@ std::unique_ptr SymbolLayerFactory::createLayer(const std::string& if (!source) { return nullptr; } - - std::unique_ptr layer = std::unique_ptr(new style::SymbolLayer(id, *source)); - if (!initSourceLayerAndFilter(layer.get(), value)) { - return nullptr; - } - return layer; + return std::unique_ptr(new style::SymbolLayer(id, *source)); } std::unique_ptr SymbolLayerFactory::createLayout(const LayoutParameters& parameters, diff --git a/src/mbgl/style/conversion/layer.cpp b/src/mbgl/style/conversion/layer.cpp index 05689d29b1..8f29665957 100644 --- a/src/mbgl/style/conversion/layer.cpp +++ b/src/mbgl/style/conversion/layer.cpp @@ -68,6 +68,9 @@ optional> Converter>::operator()(c if (!setObjectMember(layer, value, "minzoom", error)) return nullopt; if (!setObjectMember(layer, value, "maxzoom", error)) return nullopt; if (!setObjectMember(layer, value, "filter", error)) return nullopt; + if (layer->getTypeInfo()->source == LayerTypeInfo::Source::Required) { + if (!setObjectMember(layer, value, "source-layer", error)) return nullopt; + } auto layoutValue = objectMember(value, "layout"); if (layoutValue) { diff --git a/src/mbgl/style/layer.cpp b/src/mbgl/style/layer.cpp index 492858a1bc..cd3cc35aa2 100644 --- a/src/mbgl/style/layer.cpp +++ b/src/mbgl/style/layer.cpp @@ -163,6 +163,11 @@ optional Layer::setProperty(const std::string& name, const co setFilter(*filter); return nullopt; } + } else if (name == "source-layer") { + if (auto sourceLayer = convert(value, *error)) { + setSourceLayer(*sourceLayer); + return nullopt; + } } return error; // Must be Error{"layer doesn't support this property"}. } -- cgit v1.2.1