Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[core] Move generic setProperty() parts to the base Layer class
Browse files Browse the repository at this point in the history
  • Loading branch information
pozdnyakov committed Mar 19, 2020
1 parent 6989ee6 commit 2fa0dbe
Show file tree
Hide file tree
Showing 24 changed files with 100 additions and 124 deletions.
16 changes: 6 additions & 10 deletions include/mbgl/gl/custom_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,21 +66,17 @@ class CustomLayer : public Layer {
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;
};

Expand Down
9 changes: 6 additions & 3 deletions include/mbgl/style/layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ class Layer {
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;
Expand Down Expand Up @@ -142,9 +141,13 @@ class Layer {
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
Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/background_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class BackgroundLayer : public Layer {
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();
Expand Down Expand Up @@ -56,6 +50,12 @@ class BackgroundLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/circle_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class CircleLayer : public Layer {
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();
Expand Down Expand Up @@ -104,6 +98,12 @@ class CircleLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/fill_extrusion_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class FillExtrusionLayer : public Layer {
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();
Expand Down Expand Up @@ -86,6 +80,12 @@ class FillExtrusionLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/fill_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class FillLayer : public Layer {
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();
Expand Down Expand Up @@ -86,6 +80,12 @@ class FillLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/heatmap_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ class HeatmapLayer : public Layer {
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();
Expand Down Expand Up @@ -69,6 +63,12 @@ class HeatmapLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/hillshade_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class HillshadeLayer : public Layer {
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();
Expand Down Expand Up @@ -74,6 +68,12 @@ class HillshadeLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/layer.hpp.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
};
Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/line_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,6 @@ class LineLayer : public Layer {
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();
Expand Down Expand Up @@ -129,6 +123,12 @@ class LineLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/raster_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,6 @@ class RasterLayer : public Layer {
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();
Expand Down Expand Up @@ -86,6 +80,12 @@ class RasterLayer : public Layer {
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;
};

Expand Down
12 changes: 6 additions & 6 deletions include/mbgl/style/layers/symbol_layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,6 @@ class SymbolLayer : public Layer {
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();
Expand Down Expand Up @@ -290,6 +284,12 @@ class SymbolLayer : public Layer {
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;
};

Expand Down
2 changes: 1 addition & 1 deletion src/mbgl/gl/custom_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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" };
}

Expand Down
7 changes: 7 additions & 0 deletions src/mbgl/style/layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
7 changes: 2 additions & 5 deletions src/mbgl/style/layers/background_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
7 changes: 2 additions & 5 deletions src/mbgl/style/layers/circle_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
7 changes: 2 additions & 5 deletions src/mbgl/style/layers/fill_extrusion_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
7 changes: 2 additions & 5 deletions src/mbgl/style/layers/fill_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
Loading

0 comments on commit 2fa0dbe

Please sign in to comment.