diff options
24 files changed, 100 insertions, 124 deletions
diff --git a/include/mbgl/gl/custom_layer.hpp b/include/mbgl/gl/custom_layer.hpp index 5dce484980..8b60af5d7f 100644 --- a/include/mbgl/gl/custom_layer.hpp +++ b/include/mbgl/gl/custom_layer.hpp @@ -66,21 +66,17 @@ public: CustomLayer(const std::string& id, std::unique_ptr<CustomLayerHost> host); + CustomLayer(const CustomLayer&) = delete; ~CustomLayer() final; - - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - StyleProperty getProperty(const std::string&) const final; - // Private implementation - class Impl; const Impl& impl() const; - Mutable<Impl> mutableImpl() const; - std::unique_ptr<Layer> cloneRef(const std::string& id) const final; - - CustomLayer(const CustomLayer&) = delete; +private: + optional<conversion::Error> setPropertyInternal(const std::string& name, + const conversion::Convertible& value) final; + StyleProperty getProperty(const std::string&) const final; + std::unique_ptr<Layer> cloneRef(const std::string& id) const final; Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index 204cb9c697..10baf19607 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -110,8 +110,7 @@ public: void setMaxZoom(float); // Dynamic properties - virtual optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) = 0; - optional<conversion::Error> setVisibility(const conversion::Convertible& value); + optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value); virtual StyleProperty getProperty(const std::string&) const = 0; virtual Value serialize() const; @@ -142,9 +141,13 @@ public: protected: virtual Mutable<Impl> mutableBaseImpl() const = 0; void serializeProperty(Value&, const StyleProperty&, const char* propertyName, bool isPaint) const; - + virtual optional<conversion::Error> setPropertyInternal(const std::string& name, + const conversion::Convertible& value) = 0; LayerObserver* observer; mapbox::base::WeakPtrFactory<Layer> weakFactory {this}; + +private: + optional<conversion::Error> setVisibility(const conversion::Convertible& value); }; } // namespace style diff --git a/include/mbgl/style/layers/background_layer.hpp b/include/mbgl/style/layers/background_layer.hpp index 7f48618346..9fdfd3ac92 100644 --- a/include/mbgl/style/layers/background_layer.hpp +++ b/include/mbgl/style/layers/background_layer.hpp @@ -20,12 +20,6 @@ public: BackgroundLayer(const std::string& layerID); ~BackgroundLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Paint properties static PropertyValue<Color> getDefaultBackgroundColor(); @@ -56,6 +50,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/circle_layer.hpp b/include/mbgl/style/layers/circle_layer.hpp index 1ad16cd033..dd5b674002 100644 --- a/include/mbgl/style/layers/circle_layer.hpp +++ b/include/mbgl/style/layers/circle_layer.hpp @@ -20,12 +20,6 @@ public: CircleLayer(const std::string& layerID, const std::string& sourceID); ~CircleLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Paint properties static PropertyValue<float> getDefaultCircleBlur(); @@ -104,6 +98,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/fill_extrusion_layer.hpp b/include/mbgl/style/layers/fill_extrusion_layer.hpp index ef692e5708..ca33c6c3f8 100644 --- a/include/mbgl/style/layers/fill_extrusion_layer.hpp +++ b/include/mbgl/style/layers/fill_extrusion_layer.hpp @@ -20,12 +20,6 @@ public: FillExtrusionLayer(const std::string& layerID, const std::string& sourceID); ~FillExtrusionLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Paint properties static PropertyValue<float> getDefaultFillExtrusionBase(); @@ -86,6 +80,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/fill_layer.hpp b/include/mbgl/style/layers/fill_layer.hpp index 174758a78e..4a1f09cca0 100644 --- a/include/mbgl/style/layers/fill_layer.hpp +++ b/include/mbgl/style/layers/fill_layer.hpp @@ -20,12 +20,6 @@ public: FillLayer(const std::string& layerID, const std::string& sourceID); ~FillLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Layout properties static PropertyValue<float> getDefaultFillSortKey(); @@ -86,6 +80,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/heatmap_layer.hpp b/include/mbgl/style/layers/heatmap_layer.hpp index 0b740c470b..588aaa81df 100644 --- a/include/mbgl/style/layers/heatmap_layer.hpp +++ b/include/mbgl/style/layers/heatmap_layer.hpp @@ -21,12 +21,6 @@ public: HeatmapLayer(const std::string& layerID, const std::string& sourceID); ~HeatmapLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Paint properties static ColorRampPropertyValue getDefaultHeatmapColor(); @@ -69,6 +63,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/hillshade_layer.hpp b/include/mbgl/style/layers/hillshade_layer.hpp index 184e7c390d..c501e80b8d 100644 --- a/include/mbgl/style/layers/hillshade_layer.hpp +++ b/include/mbgl/style/layers/hillshade_layer.hpp @@ -20,12 +20,6 @@ public: HillshadeLayer(const std::string& layerID, const std::string& sourceID); ~HillshadeLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Paint properties static PropertyValue<Color> getDefaultHillshadeAccentColor(); @@ -74,6 +68,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/layer.hpp.ejs b/include/mbgl/style/layers/layer.hpp.ejs index aecbe25601..9cdd74737a 100644 --- a/include/mbgl/style/layers/layer.hpp.ejs +++ b/include/mbgl/style/layers/layer.hpp.ejs @@ -36,12 +36,6 @@ public: <% } -%> ~<%- camelize(type) %>Layer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - <% if (layoutProperties.length) { -%> // Layout properties @@ -72,6 +66,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/line_layer.hpp b/include/mbgl/style/layers/line_layer.hpp index cef18d9fa8..2186f16669 100644 --- a/include/mbgl/style/layers/line_layer.hpp +++ b/include/mbgl/style/layers/line_layer.hpp @@ -23,12 +23,6 @@ public: LineLayer(const std::string& layerID, const std::string& sourceID); ~LineLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Layout properties static PropertyValue<LineCapType> getDefaultLineCap(); @@ -129,6 +123,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/raster_layer.hpp b/include/mbgl/style/layers/raster_layer.hpp index b1aa3a65b9..df82c93660 100644 --- a/include/mbgl/style/layers/raster_layer.hpp +++ b/include/mbgl/style/layers/raster_layer.hpp @@ -20,12 +20,6 @@ public: RasterLayer(const std::string& layerID, const std::string& sourceID); ~RasterLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Paint properties static PropertyValue<float> getDefaultRasterBrightnessMax(); @@ -86,6 +80,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/include/mbgl/style/layers/symbol_layer.hpp b/include/mbgl/style/layers/symbol_layer.hpp index 2cffd2294a..40d16dedf3 100644 --- a/include/mbgl/style/layers/symbol_layer.hpp +++ b/include/mbgl/style/layers/symbol_layer.hpp @@ -22,12 +22,6 @@ public: SymbolLayer(const std::string& layerID, const std::string& sourceID); ~SymbolLayer() final; - // Dynamic properties - optional<conversion::Error> setProperty(const std::string& name, const conversion::Convertible& value) final; - - StyleProperty getProperty(const std::string& name) const final; - Value serialize() const final; - // Layout properties static PropertyValue<bool> getDefaultIconAllowOverlap(); @@ -290,6 +284,12 @@ public: std::unique_ptr<Layer> cloneRef(const std::string& id) const final; protected: + // Dynamic properties + optional<conversion::Error> setPropertyInternal(const std::string& name, const conversion::Convertible& value) final; + + StyleProperty getProperty(const std::string& name) const final; + Value serialize() const final; + Mutable<Layer::Impl> mutableBaseImpl() const final; }; diff --git a/src/mbgl/gl/custom_layer.cpp b/src/mbgl/gl/custom_layer.cpp index 456467e904..bb87868d78 100644 --- a/src/mbgl/gl/custom_layer.cpp +++ b/src/mbgl/gl/custom_layer.cpp @@ -38,7 +38,7 @@ std::unique_ptr<Layer> CustomLayer::cloneRef(const std::string&) const { using namespace conversion; -optional<Error> CustomLayer::setProperty(const std::string&, const Convertible&) { +optional<Error> CustomLayer::setPropertyInternal(const std::string&, const Convertible&) { return Error { "layer doesn't support this property" }; } diff --git a/src/mbgl/style/layer.cpp b/src/mbgl/style/layer.cpp index 3183d84ab5..efbc91434f 100644 --- a/src/mbgl/style/layer.cpp +++ b/src/mbgl/style/layer.cpp @@ -143,6 +143,13 @@ void Layer::setObserver(LayerObserver* observer_) { observer = observer_ ? observer_ : &nullObserver; } +optional<conversion::Error> Layer::setProperty(const std::string& name, const conversion::Convertible& value) { + optional<conversion::Error> error = setPropertyInternal(name, value); + if (!error) return error; // Successfully set by the derived class implementation. + if (name == "visibility") return setVisibility(value); + return error; // Must be Error{"layer doesn't support this property"}. +} + optional<conversion::Error> Layer::setVisibility(const conversion::Convertible& value) { using namespace conversion; diff --git a/src/mbgl/style/layers/background_layer.cpp b/src/mbgl/style/layers/background_layer.cpp index 0b7f0afe4f..d3dd02f8a8 100644 --- a/src/mbgl/style/layers/background_layer.cpp +++ b/src/mbgl/style/layers/background_layer.cpp @@ -211,12 +211,9 @@ Value BackgroundLayer::serialize() const { return result; } -optional<Error> BackgroundLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> BackgroundLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp index ca2f93306f..959f9447b0 100644 --- a/src/mbgl/style/layers/circle_layer.cpp +++ b/src/mbgl/style/layers/circle_layer.cpp @@ -491,12 +491,9 @@ Value CircleLayer::serialize() const { return result; } -optional<Error> CircleLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> CircleLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/fill_extrusion_layer.cpp b/src/mbgl/style/layers/fill_extrusion_layer.cpp index c9819f66f1..b9f4e4fa6d 100644 --- a/src/mbgl/style/layers/fill_extrusion_layer.cpp +++ b/src/mbgl/style/layers/fill_extrusion_layer.cpp @@ -386,12 +386,9 @@ Value FillExtrusionLayer::serialize() const { return result; } -optional<Error> FillExtrusionLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> FillExtrusionLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp index 914a23d96b..b6cc1eb50a 100644 --- a/src/mbgl/style/layers/fill_layer.cpp +++ b/src/mbgl/style/layers/fill_layer.cpp @@ -371,12 +371,9 @@ Value FillLayer::serialize() const { return result; } -optional<Error> FillLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> FillLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/heatmap_layer.cpp b/src/mbgl/style/layers/heatmap_layer.cpp index bfac173d63..54add7203f 100644 --- a/src/mbgl/style/layers/heatmap_layer.cpp +++ b/src/mbgl/style/layers/heatmap_layer.cpp @@ -283,12 +283,9 @@ Value HeatmapLayer::serialize() const { return result; } -optional<Error> HeatmapLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> HeatmapLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/hillshade_layer.cpp b/src/mbgl/style/layers/hillshade_layer.cpp index bfbd3d1d14..04c793575a 100644 --- a/src/mbgl/style/layers/hillshade_layer.cpp +++ b/src/mbgl/style/layers/hillshade_layer.cpp @@ -316,12 +316,9 @@ Value HillshadeLayer::serialize() const { return result; } -optional<Error> HillshadeLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> HillshadeLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs index a17b9e803c..bfdcd6e054 100644 --- a/src/mbgl/style/layers/layer.cpp.ejs +++ b/src/mbgl/style/layers/layer.cpp.ejs @@ -271,12 +271,9 @@ Value <%- camelize(type) %>Layer::serialize() const { return result; } -optional<Error> <%- camelize(type) %>Layer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> <%- camelize(type) %>Layer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp index 69c0af0958..94ec582931 100644 --- a/src/mbgl/style/layers/line_layer.cpp +++ b/src/mbgl/style/layers/line_layer.cpp @@ -588,12 +588,9 @@ Value LineLayer::serialize() const { return result; } -optional<Error> LineLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> LineLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/raster_layer.cpp b/src/mbgl/style/layers/raster_layer.cpp index 3222eebd73..66ad873882 100644 --- a/src/mbgl/style/layers/raster_layer.cpp +++ b/src/mbgl/style/layers/raster_layer.cpp @@ -386,12 +386,9 @@ Value RasterLayer::serialize() const { return result; } -optional<Error> RasterLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> RasterLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); diff --git a/src/mbgl/style/layers/symbol_layer.cpp b/src/mbgl/style/layers/symbol_layer.cpp index 7154bffff2..70f731f30b 100644 --- a/src/mbgl/style/layers/symbol_layer.cpp +++ b/src/mbgl/style/layers/symbol_layer.cpp @@ -1376,12 +1376,9 @@ Value SymbolLayer::serialize() const { return result; } -optional<Error> SymbolLayer::setProperty(const std::string& name, const Convertible& value) { +optional<Error> SymbolLayer::setPropertyInternal(const std::string& name, const Convertible& value) { const auto it = layerProperties.find(name.c_str()); - if (it == layerProperties.end()) { - if (name == "visibility") return setVisibility(value); - return Error{"layer doesn't support this property"}; - } + if (it == layerProperties.end()) return Error{"layer doesn't support this property"}; auto property = static_cast<Property>(it->second); |