diff options
-rw-r--r-- | src/mbgl/layermanager/layer_factory.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/style/conversion/layer.cpp | 38 |
2 files changed, 16 insertions, 33 deletions
diff --git a/src/mbgl/layermanager/layer_factory.cpp b/src/mbgl/layermanager/layer_factory.cpp index f4967b0e5d..be87dd665b 100644 --- a/src/mbgl/layermanager/layer_factory.cpp +++ b/src/mbgl/layermanager/layer_factory.cpp @@ -46,17 +46,6 @@ bool LayerFactory::initSourceLayerAndFilter(style::Layer* layer, const style::co } layer->setSourceLayer(*sourceLayer); } - - auto filterValue = objectMember(value, "filter"); - if (filterValue) { - style::conversion::Error error; - optional<style::Filter> filter = style::conversion::convert<style::Filter>(*filterValue, error); - if (!filter) { - return false; - } - layer->setFilter(*filter); - } - return true; } diff --git a/src/mbgl/style/conversion/layer.cpp b/src/mbgl/style/conversion/layer.cpp index baf078c3a3..05689d29b1 100644 --- a/src/mbgl/style/conversion/layer.cpp +++ b/src/mbgl/style/conversion/layer.cpp @@ -9,6 +9,18 @@ namespace mbgl { namespace style { namespace conversion { +namespace { +bool setObjectMember(std::unique_ptr<Layer>& layer, const Convertible& value, const char* member, Error& error) { + if (auto memberValue = objectMember(value, member)) { + if (auto error_ = layer->setProperty(member, *memberValue)) { + error = *error_; + return false; + } + } + return true; +} +} // namespace + optional<Error> setPaintProperties(Layer& layer, const Convertible& value) { auto paintValue = objectMember(value, "paint"); if (!paintValue) { @@ -51,29 +63,11 @@ optional<std::unique_ptr<Layer>> Converter<std::unique_ptr<Layer>>::operator()(c } std::unique_ptr<Layer> layer = LayerManager::get()->createLayer(*type, *id, value, error); - if (!layer) { - return nullopt; - } + if (!layer) return nullopt; - auto minzoomValue = objectMember(value, "minzoom"); - if (minzoomValue) { - optional<float> minzoom = toNumber(*minzoomValue); - if (!minzoom) { - error.message = "minzoom must be numeric"; - return nullopt; - } - layer->setMinZoom(*minzoom); - } - - auto maxzoomValue = objectMember(value, "maxzoom"); - if (maxzoomValue) { - optional<float> maxzoom = toNumber(*maxzoomValue); - if (!maxzoom) { - error.message = "maxzoom must be numeric"; - return nullopt; - } - layer->setMaxZoom(*maxzoom); - } + if (!setObjectMember(layer, value, "minzoom", error)) return nullopt; + if (!setObjectMember(layer, value, "maxzoom", error)) return nullopt; + if (!setObjectMember(layer, value, "filter", error)) return nullopt; auto layoutValue = objectMember(value, "layout"); if (layoutValue) { |