summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-03-24 15:35:41 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-03-24 15:35:41 +0200
commit80d723351d71006cf4e2994df7ab3b1a2b9df8b9 (patch)
tree02fea176845cb0de880c66a6b0705ca33d75faa2
parent336d8b85150625c7fc307b62634c566f1a7ba293 (diff)
downloadqtlocation-mapboxgl-upstream/mikhail_base_layer_setters.tar.gz
[core] Ability to set source-layer setProperty methodupstream/mikhail_base_layer_setters
-rw-r--r--include/mbgl/layermanager/layer_factory.hpp1
-rw-r--r--src/mbgl/layermanager/circle_layer_factory.cpp6
-rw-r--r--src/mbgl/layermanager/fill_extrusion_layer_factory.cpp6
-rw-r--r--src/mbgl/layermanager/fill_layer_factory.cpp6
-rw-r--r--src/mbgl/layermanager/heatmap_layer_factory.cpp6
-rw-r--r--src/mbgl/layermanager/layer_factory.cpp12
-rw-r--r--src/mbgl/layermanager/line_layer_factory.cpp7
-rw-r--r--src/mbgl/layermanager/symbol_layer_factory.cpp7
-rw-r--r--src/mbgl/style/conversion/layer.cpp3
-rw-r--r--src/mbgl/style/layer.cpp5
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<std::string> 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<style::Layer> CircleLayerFactory::createLayer(const std::string&
return nullptr;
}
- std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new style::CircleLayer(id, *source));
- if (!initSourceLayerAndFilter(layer.get(), value)) {
- return nullptr;
- }
- return layer;
+ return std::unique_ptr<style::Layer>(new style::CircleLayer(id, *source));
}
std::unique_ptr<Bucket> CircleLayerFactory::createBucket(const BucketParameters& parameters, const std::vector<Immutable<style::LayerProperties>>& 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<style::Layer> FillExtrusionLayerFactory::createLayer(const std::
return nullptr;
}
- std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new style::FillExtrusionLayer(id, *source));
- if (!initSourceLayerAndFilter(layer.get(), value)) {
- return nullptr;
- }
- return layer;
+ return std::unique_ptr<style::Layer>(new style::FillExtrusionLayer(id, *source));
}
std::unique_ptr<Layout> 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<style::Layer> FillLayerFactory::createLayer(const std::string& i
return nullptr;
}
- std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new style::FillLayer(id, *source));
- if (!initSourceLayerAndFilter(layer.get(), value)) {
- return nullptr;
- }
- return layer;
+ return std::unique_ptr<style::Layer>(new style::FillLayer(id, *source));
}
std::unique_ptr<Layout>
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<style::Layer> HeatmapLayerFactory::createLayer(const std::string
return nullptr;
}
- std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new style::HeatmapLayer(id, *source));
- if (!initSourceLayerAndFilter(layer.get(), value)) {
- return nullptr;
- }
- return layer;
+ return std::unique_ptr<style::Layer>(new style::HeatmapLayer(id, *source));
}
std::unique_ptr<Bucket> HeatmapLayerFactory::createBucket(const BucketParameters& parameters, const std::vector<Immutable<style::LayerProperties>>& 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<Layout> 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<std::string> 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<style::Layer> LineLayerFactory::createLayer(const std::string& i
if (!source) {
return nullptr;
}
-
- std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new style::LineLayer(id, *source));
- if (!initSourceLayerAndFilter(layer.get(), value)) {
- return nullptr;
- }
- return layer;
+ return std::unique_ptr<style::Layer>(new style::LineLayer(id, *source));
}
std::unique_ptr<Layout> 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<style::Layer> SymbolLayerFactory::createLayer(const std::string&
if (!source) {
return nullptr;
}
-
- std::unique_ptr<style::Layer> layer = std::unique_ptr<style::Layer>(new style::SymbolLayer(id, *source));
- if (!initSourceLayerAndFilter(layer.get(), value)) {
- return nullptr;
- }
- return layer;
+ return std::unique_ptr<style::Layer>(new style::SymbolLayer(id, *source));
}
std::unique_ptr<Layout> 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<std::unique_ptr<Layer>> Converter<std::unique_ptr<Layer>>::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<conversion::Error> Layer::setProperty(const std::string& name, const co
setFilter(*filter);
return nullopt;
}
+ } else if (name == "source-layer") {
+ if (auto sourceLayer = convert<std::string>(value, *error)) {
+ setSourceLayer(*sourceLayer);
+ return nullopt;
+ }
}
return error; // Must be Error{"layer doesn't support this property"}.
}