From c2dc873cf9c026e964d1d73a2c8301d21509da6e Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 24 Sep 2019 23:06:05 +0300 Subject: [core] Introduce Layer::getPaintProperty() generic getter --- include/mbgl/style/conversion_impl.hpp | 35 +++- include/mbgl/style/layer.hpp | 18 +- include/mbgl/style/layers/background_layer.hpp | 2 + include/mbgl/style/layers/circle_layer.hpp | 2 + include/mbgl/style/layers/custom_layer.hpp | 2 +- include/mbgl/style/layers/fill_extrusion_layer.hpp | 2 + include/mbgl/style/layers/fill_layer.hpp | 2 + include/mbgl/style/layers/heatmap_layer.hpp | 2 + include/mbgl/style/layers/hillshade_layer.hpp | 2 + include/mbgl/style/layers/layer.hpp.ejs | 2 + include/mbgl/style/layers/line_layer.hpp | 2 + include/mbgl/style/layers/raster_layer.hpp | 2 + include/mbgl/style/layers/symbol_layer.hpp | 2 + src/mbgl/style/layers/background_layer.cpp | 66 ++++--- src/mbgl/style/layers/circle_layer.cpp | 162 +++++++++++------ src/mbgl/style/layers/custom_layer.cpp | 4 + src/mbgl/style/layers/fill_extrusion_layer.cpp | 126 ++++++++----- src/mbgl/style/layers/fill_layer.cpp | 114 ++++++++---- src/mbgl/style/layers/heatmap_layer.cpp | 90 +++++++--- src/mbgl/style/layers/hillshade_layer.cpp | 102 +++++++---- src/mbgl/style/layers/layer.cpp.ejs | 44 +++-- src/mbgl/style/layers/line_layer.cpp | 162 +++++++++++------ src/mbgl/style/layers/raster_layer.cpp | 126 ++++++++----- src/mbgl/style/layers/symbol_layer.cpp | 198 ++++++++++++++------- src/mbgl/util/color.cpp | 5 +- 25 files changed, 887 insertions(+), 387 deletions(-) diff --git a/include/mbgl/style/conversion_impl.hpp b/include/mbgl/style/conversion_impl.hpp index 7ac4ec649b..866eff9eb5 100644 --- a/include/mbgl/style/conversion_impl.hpp +++ b/include/mbgl/style/conversion_impl.hpp @@ -2,7 +2,9 @@ #include #include +#include #include +#include #include #include #include @@ -10,6 +12,7 @@ #include #include +#include #include #include @@ -313,6 +316,18 @@ struct ValueFactory { static Value make(const ColorRampPropertyValue& value) { return value.getExpression().serialize(); } }; +template <> +struct ValueFactory { + static Value make(const TransitionOptions& value) { + return mapbox::base::ValueArray{ + {std::chrono::duration_cast(value.duration.value_or(mbgl::Duration::zero())) + .count(), + std::chrono::duration_cast(value.delay.value_or(mbgl::Duration::zero())) + .count(), + value.enablePlacementTransitions}}; + } +}; + template <> struct ValueFactory { static Value make(const Color& color) { return color.toObject(); } @@ -334,10 +349,22 @@ Value makeValue(T&& arg) { } template -Value makeValue(const PropertyValue& value) { - return value.match([](const Undefined&) -> Value { return {}; }, - [](const T& t) -> Value { return makeValue(t); }, - [](const PropertyExpression& fn) { return fn.getExpression().serialize(); }); +LayerProperty makeLayerProperty(const PropertyValue& value) { + return value.match([](const Undefined&) -> LayerProperty { return {}; }, + [](const T& t) -> LayerProperty { + return {makeValue(t), LayerProperty::Kind::Constant}; + }, + [](const PropertyExpression& fn) -> LayerProperty { + return {fn.getExpression().serialize(), LayerProperty::Kind::Expression}; + }); +} + +inline LayerProperty makeLayerProperty(const TransitionOptions& value) { + return {makeValue(value), LayerProperty::Kind::Transition}; +} + +inline LayerProperty makeLayerProperty(const ColorRampPropertyValue& value) { + return {makeValue(value), LayerProperty::Kind::Expression}; } } // namespace conversion diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index 35577411eb..646bad898c 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -1,9 +1,10 @@ #pragma once +#include +#include +#include #include #include -#include -#include #include #include @@ -65,6 +66,14 @@ struct LayerTypeInfo { const enum class TileKind : uint8_t { Geometry, Raster, RasterDEM, NotRequired } tileKind; }; +struct LayerProperty { + enum class Kind : uint8_t { Undefined, Constant, Expression, Transition }; + LayerProperty(Value value_, Kind kind_) : value(std::move(value_)), kind(kind_) {} + LayerProperty() = default; + const Value value; + const Kind kind = Kind::Undefined; +}; + /** * The runtime representation of a [layer](https://www.mapbox.com/mapbox-gl-style-spec/#layers) from the Mapbox Style * Specification. @@ -110,9 +119,12 @@ public: // Dynamic properties virtual optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) = 0; - virtual optional setPaintProperty(const std::string& name, const conversion::Convertible& value) = 0; + virtual optional setPaintProperty(const std::string& name, + const conversion::Convertible& value) = 0; optional setVisibility(const conversion::Convertible& value); + virtual LayerProperty getPaintProperty(const std::string&) const = 0; + // Private implementation // TODO : We should not have public mutable data members. class Impl; diff --git a/include/mbgl/style/layers/background_layer.hpp b/include/mbgl/style/layers/background_layer.hpp index 4a73ae4a0b..8caade26b0 100644 --- a/include/mbgl/style/layers/background_layer.hpp +++ b/include/mbgl/style/layers/background_layer.hpp @@ -24,6 +24,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static PropertyValue getDefaultBackgroundColor(); diff --git a/include/mbgl/style/layers/circle_layer.hpp b/include/mbgl/style/layers/circle_layer.hpp index f171805806..be4fe5cee4 100644 --- a/include/mbgl/style/layers/circle_layer.hpp +++ b/include/mbgl/style/layers/circle_layer.hpp @@ -24,6 +24,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static PropertyValue getDefaultCircleBlur(); diff --git a/include/mbgl/style/layers/custom_layer.hpp b/include/mbgl/style/layers/custom_layer.hpp index 4ae59dfae3..9ae68c4fff 100644 --- a/include/mbgl/style/layers/custom_layer.hpp +++ b/include/mbgl/style/layers/custom_layer.hpp @@ -71,7 +71,7 @@ public: // Dynamic properties optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; - + LayerProperty getPaintProperty(const std::string&) const final; // Private implementation class Impl; diff --git a/include/mbgl/style/layers/fill_extrusion_layer.hpp b/include/mbgl/style/layers/fill_extrusion_layer.hpp index 2e89032ae7..63ccf369d4 100644 --- a/include/mbgl/style/layers/fill_extrusion_layer.hpp +++ b/include/mbgl/style/layers/fill_extrusion_layer.hpp @@ -24,6 +24,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static PropertyValue getDefaultFillExtrusionBase(); diff --git a/include/mbgl/style/layers/fill_layer.hpp b/include/mbgl/style/layers/fill_layer.hpp index 0c4369de4c..acf60cec0d 100644 --- a/include/mbgl/style/layers/fill_layer.hpp +++ b/include/mbgl/style/layers/fill_layer.hpp @@ -24,6 +24,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static PropertyValue getDefaultFillAntialias(); diff --git a/include/mbgl/style/layers/heatmap_layer.hpp b/include/mbgl/style/layers/heatmap_layer.hpp index 2023d8c21e..7eb7bb8edd 100644 --- a/include/mbgl/style/layers/heatmap_layer.hpp +++ b/include/mbgl/style/layers/heatmap_layer.hpp @@ -25,6 +25,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static ColorRampPropertyValue getDefaultHeatmapColor(); diff --git a/include/mbgl/style/layers/hillshade_layer.hpp b/include/mbgl/style/layers/hillshade_layer.hpp index f6b04a0062..7c8f6fa573 100644 --- a/include/mbgl/style/layers/hillshade_layer.hpp +++ b/include/mbgl/style/layers/hillshade_layer.hpp @@ -24,6 +24,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static PropertyValue getDefaultHillshadeAccentColor(); diff --git a/include/mbgl/style/layers/layer.hpp.ejs b/include/mbgl/style/layers/layer.hpp.ejs index 638db5fe4b..f678adeda7 100644 --- a/include/mbgl/style/layers/layer.hpp.ejs +++ b/include/mbgl/style/layers/layer.hpp.ejs @@ -40,6 +40,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + <% if (layoutProperties.length) { -%> // Layout properties diff --git a/include/mbgl/style/layers/line_layer.hpp b/include/mbgl/style/layers/line_layer.hpp index 8f1d51295c..a1c69e9475 100644 --- a/include/mbgl/style/layers/line_layer.hpp +++ b/include/mbgl/style/layers/line_layer.hpp @@ -27,6 +27,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Layout properties static PropertyValue getDefaultLineCap(); diff --git a/include/mbgl/style/layers/raster_layer.hpp b/include/mbgl/style/layers/raster_layer.hpp index ba2ea45428..e516e1a0fc 100644 --- a/include/mbgl/style/layers/raster_layer.hpp +++ b/include/mbgl/style/layers/raster_layer.hpp @@ -24,6 +24,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Paint properties static PropertyValue getDefaultRasterBrightnessMax(); diff --git a/include/mbgl/style/layers/symbol_layer.hpp b/include/mbgl/style/layers/symbol_layer.hpp index b60e991f49..578d7d1701 100644 --- a/include/mbgl/style/layers/symbol_layer.hpp +++ b/include/mbgl/style/layers/symbol_layer.hpp @@ -26,6 +26,8 @@ public: optional setLayoutProperty(const std::string& name, const conversion::Convertible& value) final; optional setPaintProperty(const std::string& name, const conversion::Convertible& value) final; + LayerProperty getPaintProperty(const std::string& name) const final; + // Layout properties static PropertyValue getDefaultIconAllowOverlap(); diff --git a/src/mbgl/style/layers/background_layer.cpp b/src/mbgl/style/layers/background_layer.cpp index 7a186a3354..4c37022e70 100644 --- a/src/mbgl/style/layers/background_layer.cpp +++ b/src/mbgl/style/layers/background_layer.cpp @@ -148,27 +148,30 @@ TransitionOptions BackgroundLayer::getBackgroundPatternTransition() const { using namespace conversion; +namespace { + +enum class Property { + BackgroundColor, + BackgroundOpacity, + BackgroundPattern, + BackgroundColorTransition, + BackgroundOpacityTransition, + BackgroundPatternTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"background-color", mbgl::underlying_type(Property::BackgroundColor)}, + {"background-opacity", mbgl::underlying_type(Property::BackgroundOpacity)}, + {"background-pattern", mbgl::underlying_type(Property::BackgroundPattern)}, + {"background-color-transition", mbgl::underlying_type(Property::BackgroundColorTransition)}, + {"background-opacity-transition", mbgl::underlying_type(Property::BackgroundOpacityTransition)}, + {"background-pattern-transition", mbgl::underlying_type(Property::BackgroundPatternTransition)}}); + +} // namespace + optional BackgroundLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - BackgroundColor, - BackgroundOpacity, - BackgroundPattern, - BackgroundColorTransition, - BackgroundOpacityTransition, - BackgroundPatternTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "background-color", mbgl::underlying_type(Property::BackgroundColor) }, - { "background-opacity", mbgl::underlying_type(Property::BackgroundOpacity) }, - { "background-pattern", mbgl::underlying_type(Property::BackgroundPattern) }, - { "background-color-transition", mbgl::underlying_type(Property::BackgroundColorTransition) }, - { "background-opacity-transition", mbgl::underlying_type(Property::BackgroundOpacityTransition) }, - { "background-pattern-transition", mbgl::underlying_type(Property::BackgroundPatternTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -237,6 +240,29 @@ optional BackgroundLayer::setPaintProperty(const std::string& name, const return Error { "layer doesn't support this property" }; } +LayerProperty BackgroundLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::BackgroundColor: + return conversion::makeLayerProperty(getBackgroundColor()); + case Property::BackgroundOpacity: + return conversion::makeLayerProperty(getBackgroundOpacity()); + case Property::BackgroundPattern: + return conversion::makeLayerProperty(getBackgroundPattern()); + case Property::BackgroundColorTransition: + return conversion::makeLayerProperty(getBackgroundColorTransition()); + case Property::BackgroundOpacityTransition: + return conversion::makeLayerProperty(getBackgroundOpacityTransition()); + case Property::BackgroundPatternTransition: + return conversion::makeLayerProperty(getBackgroundPatternTransition()); + } + return {}; +} + optional BackgroundLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp index 2f68bcccf3..3fec7fd677 100644 --- a/src/mbgl/style/layers/circle_layer.cpp +++ b/src/mbgl/style/layers/circle_layer.cpp @@ -364,59 +364,62 @@ TransitionOptions CircleLayer::getCircleTranslateAnchorTransition() const { using namespace conversion; +namespace { + +enum class Property { + CircleBlur, + CircleColor, + CircleOpacity, + CirclePitchAlignment, + CirclePitchScale, + CircleRadius, + CircleStrokeColor, + CircleStrokeOpacity, + CircleStrokeWidth, + CircleTranslate, + CircleTranslateAnchor, + CircleBlurTransition, + CircleColorTransition, + CircleOpacityTransition, + CirclePitchAlignmentTransition, + CirclePitchScaleTransition, + CircleRadiusTransition, + CircleStrokeColorTransition, + CircleStrokeOpacityTransition, + CircleStrokeWidthTransition, + CircleTranslateTransition, + CircleTranslateAnchorTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"circle-blur", mbgl::underlying_type(Property::CircleBlur)}, + {"circle-color", mbgl::underlying_type(Property::CircleColor)}, + {"circle-opacity", mbgl::underlying_type(Property::CircleOpacity)}, + {"circle-pitch-alignment", mbgl::underlying_type(Property::CirclePitchAlignment)}, + {"circle-pitch-scale", mbgl::underlying_type(Property::CirclePitchScale)}, + {"circle-radius", mbgl::underlying_type(Property::CircleRadius)}, + {"circle-stroke-color", mbgl::underlying_type(Property::CircleStrokeColor)}, + {"circle-stroke-opacity", mbgl::underlying_type(Property::CircleStrokeOpacity)}, + {"circle-stroke-width", mbgl::underlying_type(Property::CircleStrokeWidth)}, + {"circle-translate", mbgl::underlying_type(Property::CircleTranslate)}, + {"circle-translate-anchor", mbgl::underlying_type(Property::CircleTranslateAnchor)}, + {"circle-blur-transition", mbgl::underlying_type(Property::CircleBlurTransition)}, + {"circle-color-transition", mbgl::underlying_type(Property::CircleColorTransition)}, + {"circle-opacity-transition", mbgl::underlying_type(Property::CircleOpacityTransition)}, + {"circle-pitch-alignment-transition", mbgl::underlying_type(Property::CirclePitchAlignmentTransition)}, + {"circle-pitch-scale-transition", mbgl::underlying_type(Property::CirclePitchScaleTransition)}, + {"circle-radius-transition", mbgl::underlying_type(Property::CircleRadiusTransition)}, + {"circle-stroke-color-transition", mbgl::underlying_type(Property::CircleStrokeColorTransition)}, + {"circle-stroke-opacity-transition", mbgl::underlying_type(Property::CircleStrokeOpacityTransition)}, + {"circle-stroke-width-transition", mbgl::underlying_type(Property::CircleStrokeWidthTransition)}, + {"circle-translate-transition", mbgl::underlying_type(Property::CircleTranslateTransition)}, + {"circle-translate-anchor-transition", mbgl::underlying_type(Property::CircleTranslateAnchorTransition)}}); + +} // namespace + optional CircleLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - CircleBlur, - CircleColor, - CircleOpacity, - CirclePitchAlignment, - CirclePitchScale, - CircleRadius, - CircleStrokeColor, - CircleStrokeOpacity, - CircleStrokeWidth, - CircleTranslate, - CircleTranslateAnchor, - CircleBlurTransition, - CircleColorTransition, - CircleOpacityTransition, - CirclePitchAlignmentTransition, - CirclePitchScaleTransition, - CircleRadiusTransition, - CircleStrokeColorTransition, - CircleStrokeOpacityTransition, - CircleStrokeWidthTransition, - CircleTranslateTransition, - CircleTranslateAnchorTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "circle-blur", mbgl::underlying_type(Property::CircleBlur) }, - { "circle-color", mbgl::underlying_type(Property::CircleColor) }, - { "circle-opacity", mbgl::underlying_type(Property::CircleOpacity) }, - { "circle-pitch-alignment", mbgl::underlying_type(Property::CirclePitchAlignment) }, - { "circle-pitch-scale", mbgl::underlying_type(Property::CirclePitchScale) }, - { "circle-radius", mbgl::underlying_type(Property::CircleRadius) }, - { "circle-stroke-color", mbgl::underlying_type(Property::CircleStrokeColor) }, - { "circle-stroke-opacity", mbgl::underlying_type(Property::CircleStrokeOpacity) }, - { "circle-stroke-width", mbgl::underlying_type(Property::CircleStrokeWidth) }, - { "circle-translate", mbgl::underlying_type(Property::CircleTranslate) }, - { "circle-translate-anchor", mbgl::underlying_type(Property::CircleTranslateAnchor) }, - { "circle-blur-transition", mbgl::underlying_type(Property::CircleBlurTransition) }, - { "circle-color-transition", mbgl::underlying_type(Property::CircleColorTransition) }, - { "circle-opacity-transition", mbgl::underlying_type(Property::CircleOpacityTransition) }, - { "circle-pitch-alignment-transition", mbgl::underlying_type(Property::CirclePitchAlignmentTransition) }, - { "circle-pitch-scale-transition", mbgl::underlying_type(Property::CirclePitchScaleTransition) }, - { "circle-radius-transition", mbgl::underlying_type(Property::CircleRadiusTransition) }, - { "circle-stroke-color-transition", mbgl::underlying_type(Property::CircleStrokeColorTransition) }, - { "circle-stroke-opacity-transition", mbgl::underlying_type(Property::CircleStrokeOpacityTransition) }, - { "circle-stroke-width-transition", mbgl::underlying_type(Property::CircleStrokeWidthTransition) }, - { "circle-translate-transition", mbgl::underlying_type(Property::CircleTranslateTransition) }, - { "circle-translate-anchor-transition", mbgl::underlying_type(Property::CircleTranslateAnchorTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -590,6 +593,61 @@ optional CircleLayer::setPaintProperty(const std::string& name, const Con return Error { "layer doesn't support this property" }; } +LayerProperty CircleLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::CircleBlur: + return conversion::makeLayerProperty(getCircleBlur()); + case Property::CircleColor: + return conversion::makeLayerProperty(getCircleColor()); + case Property::CircleOpacity: + return conversion::makeLayerProperty(getCircleOpacity()); + case Property::CirclePitchAlignment: + return conversion::makeLayerProperty(getCirclePitchAlignment()); + case Property::CirclePitchScale: + return conversion::makeLayerProperty(getCirclePitchScale()); + case Property::CircleRadius: + return conversion::makeLayerProperty(getCircleRadius()); + case Property::CircleStrokeColor: + return conversion::makeLayerProperty(getCircleStrokeColor()); + case Property::CircleStrokeOpacity: + return conversion::makeLayerProperty(getCircleStrokeOpacity()); + case Property::CircleStrokeWidth: + return conversion::makeLayerProperty(getCircleStrokeWidth()); + case Property::CircleTranslate: + return conversion::makeLayerProperty(getCircleTranslate()); + case Property::CircleTranslateAnchor: + return conversion::makeLayerProperty(getCircleTranslateAnchor()); + case Property::CircleBlurTransition: + return conversion::makeLayerProperty(getCircleBlurTransition()); + case Property::CircleColorTransition: + return conversion::makeLayerProperty(getCircleColorTransition()); + case Property::CircleOpacityTransition: + return conversion::makeLayerProperty(getCircleOpacityTransition()); + case Property::CirclePitchAlignmentTransition: + return conversion::makeLayerProperty(getCirclePitchAlignmentTransition()); + case Property::CirclePitchScaleTransition: + return conversion::makeLayerProperty(getCirclePitchScaleTransition()); + case Property::CircleRadiusTransition: + return conversion::makeLayerProperty(getCircleRadiusTransition()); + case Property::CircleStrokeColorTransition: + return conversion::makeLayerProperty(getCircleStrokeColorTransition()); + case Property::CircleStrokeOpacityTransition: + return conversion::makeLayerProperty(getCircleStrokeOpacityTransition()); + case Property::CircleStrokeWidthTransition: + return conversion::makeLayerProperty(getCircleStrokeWidthTransition()); + case Property::CircleTranslateTransition: + return conversion::makeLayerProperty(getCircleTranslateTransition()); + case Property::CircleTranslateAnchorTransition: + return conversion::makeLayerProperty(getCircleTranslateAnchorTransition()); + } + return {}; +} + optional CircleLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/custom_layer.cpp b/src/mbgl/style/layers/custom_layer.cpp index 8b9e17ea25..f96cc682e5 100644 --- a/src/mbgl/style/layers/custom_layer.cpp +++ b/src/mbgl/style/layers/custom_layer.cpp @@ -47,6 +47,10 @@ optional CustomLayer::setLayoutProperty(const std::string&, const Convert return Error { "layer doesn't support this property" }; } +LayerProperty CustomLayer::getPaintProperty(const std::string&) const { + return {}; +} + Mutable CustomLayer::mutableBaseImpl() const { return staticMutableCast(mutableImpl()); } diff --git a/src/mbgl/style/layers/fill_extrusion_layer.cpp b/src/mbgl/style/layers/fill_extrusion_layer.cpp index 2686f7d044..43183255a1 100644 --- a/src/mbgl/style/layers/fill_extrusion_layer.cpp +++ b/src/mbgl/style/layers/fill_extrusion_layer.cpp @@ -283,47 +283,50 @@ TransitionOptions FillExtrusionLayer::getFillExtrusionVerticalGradientTransition using namespace conversion; +namespace { + +enum class Property { + FillExtrusionBase, + FillExtrusionColor, + FillExtrusionHeight, + FillExtrusionOpacity, + FillExtrusionPattern, + FillExtrusionTranslate, + FillExtrusionTranslateAnchor, + FillExtrusionVerticalGradient, + FillExtrusionBaseTransition, + FillExtrusionColorTransition, + FillExtrusionHeightTransition, + FillExtrusionOpacityTransition, + FillExtrusionPatternTransition, + FillExtrusionTranslateTransition, + FillExtrusionTranslateAnchorTransition, + FillExtrusionVerticalGradientTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"fill-extrusion-base", mbgl::underlying_type(Property::FillExtrusionBase)}, + {"fill-extrusion-color", mbgl::underlying_type(Property::FillExtrusionColor)}, + {"fill-extrusion-height", mbgl::underlying_type(Property::FillExtrusionHeight)}, + {"fill-extrusion-opacity", mbgl::underlying_type(Property::FillExtrusionOpacity)}, + {"fill-extrusion-pattern", mbgl::underlying_type(Property::FillExtrusionPattern)}, + {"fill-extrusion-translate", mbgl::underlying_type(Property::FillExtrusionTranslate)}, + {"fill-extrusion-translate-anchor", mbgl::underlying_type(Property::FillExtrusionTranslateAnchor)}, + {"fill-extrusion-vertical-gradient", mbgl::underlying_type(Property::FillExtrusionVerticalGradient)}, + {"fill-extrusion-base-transition", mbgl::underlying_type(Property::FillExtrusionBaseTransition)}, + {"fill-extrusion-color-transition", mbgl::underlying_type(Property::FillExtrusionColorTransition)}, + {"fill-extrusion-height-transition", mbgl::underlying_type(Property::FillExtrusionHeightTransition)}, + {"fill-extrusion-opacity-transition", mbgl::underlying_type(Property::FillExtrusionOpacityTransition)}, + {"fill-extrusion-pattern-transition", mbgl::underlying_type(Property::FillExtrusionPatternTransition)}, + {"fill-extrusion-translate-transition", mbgl::underlying_type(Property::FillExtrusionTranslateTransition)}, + {"fill-extrusion-translate-anchor-transition", mbgl::underlying_type(Property::FillExtrusionTranslateAnchorTransition)}, + {"fill-extrusion-vertical-gradient-transition", mbgl::underlying_type(Property::FillExtrusionVerticalGradientTransition)}}); + +} // namespace + optional FillExtrusionLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - FillExtrusionBase, - FillExtrusionColor, - FillExtrusionHeight, - FillExtrusionOpacity, - FillExtrusionPattern, - FillExtrusionTranslate, - FillExtrusionTranslateAnchor, - FillExtrusionVerticalGradient, - FillExtrusionBaseTransition, - FillExtrusionColorTransition, - FillExtrusionHeightTransition, - FillExtrusionOpacityTransition, - FillExtrusionPatternTransition, - FillExtrusionTranslateTransition, - FillExtrusionTranslateAnchorTransition, - FillExtrusionVerticalGradientTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "fill-extrusion-base", mbgl::underlying_type(Property::FillExtrusionBase) }, - { "fill-extrusion-color", mbgl::underlying_type(Property::FillExtrusionColor) }, - { "fill-extrusion-height", mbgl::underlying_type(Property::FillExtrusionHeight) }, - { "fill-extrusion-opacity", mbgl::underlying_type(Property::FillExtrusionOpacity) }, - { "fill-extrusion-pattern", mbgl::underlying_type(Property::FillExtrusionPattern) }, - { "fill-extrusion-translate", mbgl::underlying_type(Property::FillExtrusionTranslate) }, - { "fill-extrusion-translate-anchor", mbgl::underlying_type(Property::FillExtrusionTranslateAnchor) }, - { "fill-extrusion-vertical-gradient", mbgl::underlying_type(Property::FillExtrusionVerticalGradient) }, - { "fill-extrusion-base-transition", mbgl::underlying_type(Property::FillExtrusionBaseTransition) }, - { "fill-extrusion-color-transition", mbgl::underlying_type(Property::FillExtrusionColorTransition) }, - { "fill-extrusion-height-transition", mbgl::underlying_type(Property::FillExtrusionHeightTransition) }, - { "fill-extrusion-opacity-transition", mbgl::underlying_type(Property::FillExtrusionOpacityTransition) }, - { "fill-extrusion-pattern-transition", mbgl::underlying_type(Property::FillExtrusionPatternTransition) }, - { "fill-extrusion-translate-transition", mbgl::underlying_type(Property::FillExtrusionTranslateTransition) }, - { "fill-extrusion-translate-anchor-transition", mbgl::underlying_type(Property::FillExtrusionTranslateAnchorTransition) }, - { "fill-extrusion-vertical-gradient-transition", mbgl::underlying_type(Property::FillExtrusionVerticalGradientTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -472,6 +475,49 @@ optional FillExtrusionLayer::setPaintProperty(const std::string& name, co return Error { "layer doesn't support this property" }; } +LayerProperty FillExtrusionLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::FillExtrusionBase: + return conversion::makeLayerProperty(getFillExtrusionBase()); + case Property::FillExtrusionColor: + return conversion::makeLayerProperty(getFillExtrusionColor()); + case Property::FillExtrusionHeight: + return conversion::makeLayerProperty(getFillExtrusionHeight()); + case Property::FillExtrusionOpacity: + return conversion::makeLayerProperty(getFillExtrusionOpacity()); + case Property::FillExtrusionPattern: + return conversion::makeLayerProperty(getFillExtrusionPattern()); + case Property::FillExtrusionTranslate: + return conversion::makeLayerProperty(getFillExtrusionTranslate()); + case Property::FillExtrusionTranslateAnchor: + return conversion::makeLayerProperty(getFillExtrusionTranslateAnchor()); + case Property::FillExtrusionVerticalGradient: + return conversion::makeLayerProperty(getFillExtrusionVerticalGradient()); + case Property::FillExtrusionBaseTransition: + return conversion::makeLayerProperty(getFillExtrusionBaseTransition()); + case Property::FillExtrusionColorTransition: + return conversion::makeLayerProperty(getFillExtrusionColorTransition()); + case Property::FillExtrusionHeightTransition: + return conversion::makeLayerProperty(getFillExtrusionHeightTransition()); + case Property::FillExtrusionOpacityTransition: + return conversion::makeLayerProperty(getFillExtrusionOpacityTransition()); + case Property::FillExtrusionPatternTransition: + return conversion::makeLayerProperty(getFillExtrusionPatternTransition()); + case Property::FillExtrusionTranslateTransition: + return conversion::makeLayerProperty(getFillExtrusionTranslateTransition()); + case Property::FillExtrusionTranslateAnchorTransition: + return conversion::makeLayerProperty(getFillExtrusionTranslateAnchorTransition()); + case Property::FillExtrusionVerticalGradientTransition: + return conversion::makeLayerProperty(getFillExtrusionVerticalGradientTransition()); + } + return {}; +} + optional FillExtrusionLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/fill_layer.cpp b/src/mbgl/style/layers/fill_layer.cpp index 52f2b166b3..9afc99d1d3 100644 --- a/src/mbgl/style/layers/fill_layer.cpp +++ b/src/mbgl/style/layers/fill_layer.cpp @@ -256,43 +256,46 @@ TransitionOptions FillLayer::getFillTranslateAnchorTransition() const { using namespace conversion; +namespace { + +enum class Property { + FillAntialias, + FillColor, + FillOpacity, + FillOutlineColor, + FillPattern, + FillTranslate, + FillTranslateAnchor, + FillAntialiasTransition, + FillColorTransition, + FillOpacityTransition, + FillOutlineColorTransition, + FillPatternTransition, + FillTranslateTransition, + FillTranslateAnchorTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"fill-antialias", mbgl::underlying_type(Property::FillAntialias)}, + {"fill-color", mbgl::underlying_type(Property::FillColor)}, + {"fill-opacity", mbgl::underlying_type(Property::FillOpacity)}, + {"fill-outline-color", mbgl::underlying_type(Property::FillOutlineColor)}, + {"fill-pattern", mbgl::underlying_type(Property::FillPattern)}, + {"fill-translate", mbgl::underlying_type(Property::FillTranslate)}, + {"fill-translate-anchor", mbgl::underlying_type(Property::FillTranslateAnchor)}, + {"fill-antialias-transition", mbgl::underlying_type(Property::FillAntialiasTransition)}, + {"fill-color-transition", mbgl::underlying_type(Property::FillColorTransition)}, + {"fill-opacity-transition", mbgl::underlying_type(Property::FillOpacityTransition)}, + {"fill-outline-color-transition", mbgl::underlying_type(Property::FillOutlineColorTransition)}, + {"fill-pattern-transition", mbgl::underlying_type(Property::FillPatternTransition)}, + {"fill-translate-transition", mbgl::underlying_type(Property::FillTranslateTransition)}, + {"fill-translate-anchor-transition", mbgl::underlying_type(Property::FillTranslateAnchorTransition)}}); + +} // namespace + optional FillLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - FillAntialias, - FillColor, - FillOpacity, - FillOutlineColor, - FillPattern, - FillTranslate, - FillTranslateAnchor, - FillAntialiasTransition, - FillColorTransition, - FillOpacityTransition, - FillOutlineColorTransition, - FillPatternTransition, - FillTranslateTransition, - FillTranslateAnchorTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "fill-antialias", mbgl::underlying_type(Property::FillAntialias) }, - { "fill-color", mbgl::underlying_type(Property::FillColor) }, - { "fill-opacity", mbgl::underlying_type(Property::FillOpacity) }, - { "fill-outline-color", mbgl::underlying_type(Property::FillOutlineColor) }, - { "fill-pattern", mbgl::underlying_type(Property::FillPattern) }, - { "fill-translate", mbgl::underlying_type(Property::FillTranslate) }, - { "fill-translate-anchor", mbgl::underlying_type(Property::FillTranslateAnchor) }, - { "fill-antialias-transition", mbgl::underlying_type(Property::FillAntialiasTransition) }, - { "fill-color-transition", mbgl::underlying_type(Property::FillColorTransition) }, - { "fill-opacity-transition", mbgl::underlying_type(Property::FillOpacityTransition) }, - { "fill-outline-color-transition", mbgl::underlying_type(Property::FillOutlineColorTransition) }, - { "fill-pattern-transition", mbgl::underlying_type(Property::FillPatternTransition) }, - { "fill-translate-transition", mbgl::underlying_type(Property::FillTranslateTransition) }, - { "fill-translate-anchor-transition", mbgl::underlying_type(Property::FillTranslateAnchorTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -424,6 +427,45 @@ optional FillLayer::setPaintProperty(const std::string& name, const Conve return Error { "layer doesn't support this property" }; } +LayerProperty FillLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::FillAntialias: + return conversion::makeLayerProperty(getFillAntialias()); + case Property::FillColor: + return conversion::makeLayerProperty(getFillColor()); + case Property::FillOpacity: + return conversion::makeLayerProperty(getFillOpacity()); + case Property::FillOutlineColor: + return conversion::makeLayerProperty(getFillOutlineColor()); + case Property::FillPattern: + return conversion::makeLayerProperty(getFillPattern()); + case Property::FillTranslate: + return conversion::makeLayerProperty(getFillTranslate()); + case Property::FillTranslateAnchor: + return conversion::makeLayerProperty(getFillTranslateAnchor()); + case Property::FillAntialiasTransition: + return conversion::makeLayerProperty(getFillAntialiasTransition()); + case Property::FillColorTransition: + return conversion::makeLayerProperty(getFillColorTransition()); + case Property::FillOpacityTransition: + return conversion::makeLayerProperty(getFillOpacityTransition()); + case Property::FillOutlineColorTransition: + return conversion::makeLayerProperty(getFillOutlineColorTransition()); + case Property::FillPatternTransition: + return conversion::makeLayerProperty(getFillPatternTransition()); + case Property::FillTranslateTransition: + return conversion::makeLayerProperty(getFillTranslateTransition()); + case Property::FillTranslateAnchorTransition: + return conversion::makeLayerProperty(getFillTranslateAnchorTransition()); + } + return {}; +} + optional FillLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/heatmap_layer.cpp b/src/mbgl/style/layers/heatmap_layer.cpp index 86bb2d6de1..417e828a1d 100644 --- a/src/mbgl/style/layers/heatmap_layer.cpp +++ b/src/mbgl/style/layers/heatmap_layer.cpp @@ -204,35 +204,38 @@ TransitionOptions HeatmapLayer::getHeatmapWeightTransition() const { using namespace conversion; +namespace { + +enum class Property { + HeatmapColor, + HeatmapIntensity, + HeatmapOpacity, + HeatmapRadius, + HeatmapWeight, + HeatmapColorTransition, + HeatmapIntensityTransition, + HeatmapOpacityTransition, + HeatmapRadiusTransition, + HeatmapWeightTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"heatmap-color", mbgl::underlying_type(Property::HeatmapColor)}, + {"heatmap-intensity", mbgl::underlying_type(Property::HeatmapIntensity)}, + {"heatmap-opacity", mbgl::underlying_type(Property::HeatmapOpacity)}, + {"heatmap-radius", mbgl::underlying_type(Property::HeatmapRadius)}, + {"heatmap-weight", mbgl::underlying_type(Property::HeatmapWeight)}, + {"heatmap-color-transition", mbgl::underlying_type(Property::HeatmapColorTransition)}, + {"heatmap-intensity-transition", mbgl::underlying_type(Property::HeatmapIntensityTransition)}, + {"heatmap-opacity-transition", mbgl::underlying_type(Property::HeatmapOpacityTransition)}, + {"heatmap-radius-transition", mbgl::underlying_type(Property::HeatmapRadiusTransition)}, + {"heatmap-weight-transition", mbgl::underlying_type(Property::HeatmapWeightTransition)}}); + +} // namespace + optional HeatmapLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - HeatmapColor, - HeatmapIntensity, - HeatmapOpacity, - HeatmapRadius, - HeatmapWeight, - HeatmapColorTransition, - HeatmapIntensityTransition, - HeatmapOpacityTransition, - HeatmapRadiusTransition, - HeatmapWeightTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "heatmap-color", mbgl::underlying_type(Property::HeatmapColor) }, - { "heatmap-intensity", mbgl::underlying_type(Property::HeatmapIntensity) }, - { "heatmap-opacity", mbgl::underlying_type(Property::HeatmapOpacity) }, - { "heatmap-radius", mbgl::underlying_type(Property::HeatmapRadius) }, - { "heatmap-weight", mbgl::underlying_type(Property::HeatmapWeight) }, - { "heatmap-color-transition", mbgl::underlying_type(Property::HeatmapColorTransition) }, - { "heatmap-intensity-transition", mbgl::underlying_type(Property::HeatmapIntensityTransition) }, - { "heatmap-opacity-transition", mbgl::underlying_type(Property::HeatmapOpacityTransition) }, - { "heatmap-radius-transition", mbgl::underlying_type(Property::HeatmapRadiusTransition) }, - { "heatmap-weight-transition", mbgl::underlying_type(Property::HeatmapWeightTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -325,6 +328,37 @@ optional HeatmapLayer::setPaintProperty(const std::string& name, const Co return Error { "layer doesn't support this property" }; } +LayerProperty HeatmapLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::HeatmapColor: + return conversion::makeLayerProperty(getHeatmapColor()); + case Property::HeatmapIntensity: + return conversion::makeLayerProperty(getHeatmapIntensity()); + case Property::HeatmapOpacity: + return conversion::makeLayerProperty(getHeatmapOpacity()); + case Property::HeatmapRadius: + return conversion::makeLayerProperty(getHeatmapRadius()); + case Property::HeatmapWeight: + return conversion::makeLayerProperty(getHeatmapWeight()); + case Property::HeatmapColorTransition: + return conversion::makeLayerProperty(getHeatmapColorTransition()); + case Property::HeatmapIntensityTransition: + return conversion::makeLayerProperty(getHeatmapIntensityTransition()); + case Property::HeatmapOpacityTransition: + return conversion::makeLayerProperty(getHeatmapOpacityTransition()); + case Property::HeatmapRadiusTransition: + return conversion::makeLayerProperty(getHeatmapRadiusTransition()); + case Property::HeatmapWeightTransition: + return conversion::makeLayerProperty(getHeatmapWeightTransition()); + } + return {}; +} + optional HeatmapLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/hillshade_layer.cpp b/src/mbgl/style/layers/hillshade_layer.cpp index 710efe5844..60ef4d33f1 100644 --- a/src/mbgl/style/layers/hillshade_layer.cpp +++ b/src/mbgl/style/layers/hillshade_layer.cpp @@ -229,39 +229,42 @@ TransitionOptions HillshadeLayer::getHillshadeShadowColorTransition() const { using namespace conversion; +namespace { + +enum class Property { + HillshadeAccentColor, + HillshadeExaggeration, + HillshadeHighlightColor, + HillshadeIlluminationAnchor, + HillshadeIlluminationDirection, + HillshadeShadowColor, + HillshadeAccentColorTransition, + HillshadeExaggerationTransition, + HillshadeHighlightColorTransition, + HillshadeIlluminationAnchorTransition, + HillshadeIlluminationDirectionTransition, + HillshadeShadowColorTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"hillshade-accent-color", mbgl::underlying_type(Property::HillshadeAccentColor)}, + {"hillshade-exaggeration", mbgl::underlying_type(Property::HillshadeExaggeration)}, + {"hillshade-highlight-color", mbgl::underlying_type(Property::HillshadeHighlightColor)}, + {"hillshade-illumination-anchor", mbgl::underlying_type(Property::HillshadeIlluminationAnchor)}, + {"hillshade-illumination-direction", mbgl::underlying_type(Property::HillshadeIlluminationDirection)}, + {"hillshade-shadow-color", mbgl::underlying_type(Property::HillshadeShadowColor)}, + {"hillshade-accent-color-transition", mbgl::underlying_type(Property::HillshadeAccentColorTransition)}, + {"hillshade-exaggeration-transition", mbgl::underlying_type(Property::HillshadeExaggerationTransition)}, + {"hillshade-highlight-color-transition", mbgl::underlying_type(Property::HillshadeHighlightColorTransition)}, + {"hillshade-illumination-anchor-transition", mbgl::underlying_type(Property::HillshadeIlluminationAnchorTransition)}, + {"hillshade-illumination-direction-transition", mbgl::underlying_type(Property::HillshadeIlluminationDirectionTransition)}, + {"hillshade-shadow-color-transition", mbgl::underlying_type(Property::HillshadeShadowColorTransition)}}); + +} // namespace + optional HillshadeLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - HillshadeAccentColor, - HillshadeExaggeration, - HillshadeHighlightColor, - HillshadeIlluminationAnchor, - HillshadeIlluminationDirection, - HillshadeShadowColor, - HillshadeAccentColorTransition, - HillshadeExaggerationTransition, - HillshadeHighlightColorTransition, - HillshadeIlluminationAnchorTransition, - HillshadeIlluminationDirectionTransition, - HillshadeShadowColorTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "hillshade-accent-color", mbgl::underlying_type(Property::HillshadeAccentColor) }, - { "hillshade-exaggeration", mbgl::underlying_type(Property::HillshadeExaggeration) }, - { "hillshade-highlight-color", mbgl::underlying_type(Property::HillshadeHighlightColor) }, - { "hillshade-illumination-anchor", mbgl::underlying_type(Property::HillshadeIlluminationAnchor) }, - { "hillshade-illumination-direction", mbgl::underlying_type(Property::HillshadeIlluminationDirection) }, - { "hillshade-shadow-color", mbgl::underlying_type(Property::HillshadeShadowColor) }, - { "hillshade-accent-color-transition", mbgl::underlying_type(Property::HillshadeAccentColorTransition) }, - { "hillshade-exaggeration-transition", mbgl::underlying_type(Property::HillshadeExaggerationTransition) }, - { "hillshade-highlight-color-transition", mbgl::underlying_type(Property::HillshadeHighlightColorTransition) }, - { "hillshade-illumination-anchor-transition", mbgl::underlying_type(Property::HillshadeIlluminationAnchorTransition) }, - { "hillshade-illumination-direction-transition", mbgl::underlying_type(Property::HillshadeIlluminationDirectionTransition) }, - { "hillshade-shadow-color-transition", mbgl::underlying_type(Property::HillshadeShadowColorTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -364,6 +367,41 @@ optional HillshadeLayer::setPaintProperty(const std::string& name, const return Error { "layer doesn't support this property" }; } +LayerProperty HillshadeLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::HillshadeAccentColor: + return conversion::makeLayerProperty(getHillshadeAccentColor()); + case Property::HillshadeExaggeration: + return conversion::makeLayerProperty(getHillshadeExaggeration()); + case Property::HillshadeHighlightColor: + return conversion::makeLayerProperty(getHillshadeHighlightColor()); + case Property::HillshadeIlluminationAnchor: + return conversion::makeLayerProperty(getHillshadeIlluminationAnchor()); + case Property::HillshadeIlluminationDirection: + return conversion::makeLayerProperty(getHillshadeIlluminationDirection()); + case Property::HillshadeShadowColor: + return conversion::makeLayerProperty(getHillshadeShadowColor()); + case Property::HillshadeAccentColorTransition: + return conversion::makeLayerProperty(getHillshadeAccentColorTransition()); + case Property::HillshadeExaggerationTransition: + return conversion::makeLayerProperty(getHillshadeExaggerationTransition()); + case Property::HillshadeHighlightColorTransition: + return conversion::makeLayerProperty(getHillshadeHighlightColorTransition()); + case Property::HillshadeIlluminationAnchorTransition: + return conversion::makeLayerProperty(getHillshadeIlluminationAnchorTransition()); + case Property::HillshadeIlluminationDirectionTransition: + return conversion::makeLayerProperty(getHillshadeIlluminationDirectionTransition()); + case Property::HillshadeShadowColorTransition: + return conversion::makeLayerProperty(getHillshadeShadowColorTransition()); + } + return {}; +} + optional HillshadeLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs index 0cd9a82d75..04d4a81dce 100644 --- a/src/mbgl/style/layers/layer.cpp.ejs +++ b/src/mbgl/style/layers/layer.cpp.ejs @@ -190,23 +190,26 @@ TransitionOptions <%- camelize(type) %>Layer::get<%- camelize(property.name) %>T using namespace conversion; -optional <%- camelize(type) %>Layer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { +namespace { + +enum class Property { <% for (const property of paintProperties) { -%> - <%- camelize(property.name) %>, + <%- camelize(property.name) %>, <% } -%> <% for (const property of paintProperties) { -%> - <%- camelize(property.name) %>Transition, + <%- camelize(property.name) %>Transition, <% } -%> - }; +}; - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - <%- paintProperties.map(p => `{ "${p.name}", mbgl::underlying_type(Property::${camelize(p.name)}) }`).join(',\n ') %>, - <%- paintProperties.map(p => `{ "${p.name}-transition", mbgl::underlying_type(Property::${camelize(p.name)}Transition) }`).join(',\n ') %> - }); +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {<%- paintProperties.map(p => `{"${p.name}", mbgl::underlying_type(Property::${camelize(p.name)})}`).join(',\n ') %>, + <%- paintProperties.map(p => `{"${p.name}-transition", mbgl::underlying_type(Property::${camelize(p.name)}Transition)}`).join(',\n ') %>}); - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { +} // namespace + +optional <%- camelize(type) %>Layer::setPaintProperty(const std::string& name, const Convertible& value) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -258,6 +261,25 @@ optional <%- camelize(type) %>Layer::setPaintProperty(const std::string& return Error { "layer doesn't support this property" }; } +LayerProperty <%- camelize(type) %>Layer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { +<% for (const property of paintProperties) { -%> + case Property::<%- camelize(property.name) %>: + return conversion::makeLayerProperty(get<%- camelize(property.name) %>()); +<% } -%> +<% for (const property of paintProperties) { -%> + case Property::<%- camelize(property.name) %>Transition: + return conversion::makeLayerProperty(get<%- camelize(property.name) %>Transition()); +<% } -%> + } + return {}; +} + optional <%- camelize(type) %>Layer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp index bd29f7f6fd..491cfd48a0 100644 --- a/src/mbgl/style/layers/line_layer.cpp +++ b/src/mbgl/style/layers/line_layer.cpp @@ -430,59 +430,62 @@ TransitionOptions LineLayer::getLineWidthTransition() const { using namespace conversion; -optional LineLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - LineBlur, - LineColor, - LineDasharray, - LineGapWidth, - LineGradient, - LineOffset, - LineOpacity, - LinePattern, - LineTranslate, - LineTranslateAnchor, - LineWidth, - LineBlurTransition, - LineColorTransition, - LineDasharrayTransition, - LineGapWidthTransition, - LineGradientTransition, - LineOffsetTransition, - LineOpacityTransition, - LinePatternTransition, - LineTranslateTransition, - LineTranslateAnchorTransition, - LineWidthTransition, - }; +namespace { + +enum class Property { + LineBlur, + LineColor, + LineDasharray, + LineGapWidth, + LineGradient, + LineOffset, + LineOpacity, + LinePattern, + LineTranslate, + LineTranslateAnchor, + LineWidth, + LineBlurTransition, + LineColorTransition, + LineDasharrayTransition, + LineGapWidthTransition, + LineGradientTransition, + LineOffsetTransition, + LineOpacityTransition, + LinePatternTransition, + LineTranslateTransition, + LineTranslateAnchorTransition, + LineWidthTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"line-blur", mbgl::underlying_type(Property::LineBlur)}, + {"line-color", mbgl::underlying_type(Property::LineColor)}, + {"line-dasharray", mbgl::underlying_type(Property::LineDasharray)}, + {"line-gap-width", mbgl::underlying_type(Property::LineGapWidth)}, + {"line-gradient", mbgl::underlying_type(Property::LineGradient)}, + {"line-offset", mbgl::underlying_type(Property::LineOffset)}, + {"line-opacity", mbgl::underlying_type(Property::LineOpacity)}, + {"line-pattern", mbgl::underlying_type(Property::LinePattern)}, + {"line-translate", mbgl::underlying_type(Property::LineTranslate)}, + {"line-translate-anchor", mbgl::underlying_type(Property::LineTranslateAnchor)}, + {"line-width", mbgl::underlying_type(Property::LineWidth)}, + {"line-blur-transition", mbgl::underlying_type(Property::LineBlurTransition)}, + {"line-color-transition", mbgl::underlying_type(Property::LineColorTransition)}, + {"line-dasharray-transition", mbgl::underlying_type(Property::LineDasharrayTransition)}, + {"line-gap-width-transition", mbgl::underlying_type(Property::LineGapWidthTransition)}, + {"line-gradient-transition", mbgl::underlying_type(Property::LineGradientTransition)}, + {"line-offset-transition", mbgl::underlying_type(Property::LineOffsetTransition)}, + {"line-opacity-transition", mbgl::underlying_type(Property::LineOpacityTransition)}, + {"line-pattern-transition", mbgl::underlying_type(Property::LinePatternTransition)}, + {"line-translate-transition", mbgl::underlying_type(Property::LineTranslateTransition)}, + {"line-translate-anchor-transition", mbgl::underlying_type(Property::LineTranslateAnchorTransition)}, + {"line-width-transition", mbgl::underlying_type(Property::LineWidthTransition)}}); + +} // namespace - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "line-blur", mbgl::underlying_type(Property::LineBlur) }, - { "line-color", mbgl::underlying_type(Property::LineColor) }, - { "line-dasharray", mbgl::underlying_type(Property::LineDasharray) }, - { "line-gap-width", mbgl::underlying_type(Property::LineGapWidth) }, - { "line-gradient", mbgl::underlying_type(Property::LineGradient) }, - { "line-offset", mbgl::underlying_type(Property::LineOffset) }, - { "line-opacity", mbgl::underlying_type(Property::LineOpacity) }, - { "line-pattern", mbgl::underlying_type(Property::LinePattern) }, - { "line-translate", mbgl::underlying_type(Property::LineTranslate) }, - { "line-translate-anchor", mbgl::underlying_type(Property::LineTranslateAnchor) }, - { "line-width", mbgl::underlying_type(Property::LineWidth) }, - { "line-blur-transition", mbgl::underlying_type(Property::LineBlurTransition) }, - { "line-color-transition", mbgl::underlying_type(Property::LineColorTransition) }, - { "line-dasharray-transition", mbgl::underlying_type(Property::LineDasharrayTransition) }, - { "line-gap-width-transition", mbgl::underlying_type(Property::LineGapWidthTransition) }, - { "line-gradient-transition", mbgl::underlying_type(Property::LineGradientTransition) }, - { "line-offset-transition", mbgl::underlying_type(Property::LineOffsetTransition) }, - { "line-opacity-transition", mbgl::underlying_type(Property::LineOpacityTransition) }, - { "line-pattern-transition", mbgl::underlying_type(Property::LinePatternTransition) }, - { "line-translate-transition", mbgl::underlying_type(Property::LineTranslateTransition) }, - { "line-translate-anchor-transition", mbgl::underlying_type(Property::LineTranslateAnchorTransition) }, - { "line-width-transition", mbgl::underlying_type(Property::LineWidthTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { +optional LineLayer::setPaintProperty(const std::string& name, const Convertible& value) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -661,6 +664,61 @@ optional LineLayer::setPaintProperty(const std::string& name, const Conve return Error { "layer doesn't support this property" }; } +LayerProperty LineLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::LineBlur: + return conversion::makeLayerProperty(getLineBlur()); + case Property::LineColor: + return conversion::makeLayerProperty(getLineColor()); + case Property::LineDasharray: + return conversion::makeLayerProperty(getLineDasharray()); + case Property::LineGapWidth: + return conversion::makeLayerProperty(getLineGapWidth()); + case Property::LineGradient: + return conversion::makeLayerProperty(getLineGradient()); + case Property::LineOffset: + return conversion::makeLayerProperty(getLineOffset()); + case Property::LineOpacity: + return conversion::makeLayerProperty(getLineOpacity()); + case Property::LinePattern: + return conversion::makeLayerProperty(getLinePattern()); + case Property::LineTranslate: + return conversion::makeLayerProperty(getLineTranslate()); + case Property::LineTranslateAnchor: + return conversion::makeLayerProperty(getLineTranslateAnchor()); + case Property::LineWidth: + return conversion::makeLayerProperty(getLineWidth()); + case Property::LineBlurTransition: + return conversion::makeLayerProperty(getLineBlurTransition()); + case Property::LineColorTransition: + return conversion::makeLayerProperty(getLineColorTransition()); + case Property::LineDasharrayTransition: + return conversion::makeLayerProperty(getLineDasharrayTransition()); + case Property::LineGapWidthTransition: + return conversion::makeLayerProperty(getLineGapWidthTransition()); + case Property::LineGradientTransition: + return conversion::makeLayerProperty(getLineGradientTransition()); + case Property::LineOffsetTransition: + return conversion::makeLayerProperty(getLineOffsetTransition()); + case Property::LineOpacityTransition: + return conversion::makeLayerProperty(getLineOpacityTransition()); + case Property::LinePatternTransition: + return conversion::makeLayerProperty(getLinePatternTransition()); + case Property::LineTranslateTransition: + return conversion::makeLayerProperty(getLineTranslateTransition()); + case Property::LineTranslateAnchorTransition: + return conversion::makeLayerProperty(getLineTranslateAnchorTransition()); + case Property::LineWidthTransition: + return conversion::makeLayerProperty(getLineWidthTransition()); + } + return {}; +} + optional LineLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/raster_layer.cpp b/src/mbgl/style/layers/raster_layer.cpp index fde1df838d..d10ba0ae8e 100644 --- a/src/mbgl/style/layers/raster_layer.cpp +++ b/src/mbgl/style/layers/raster_layer.cpp @@ -283,47 +283,50 @@ TransitionOptions RasterLayer::getRasterSaturationTransition() const { using namespace conversion; +namespace { + +enum class Property { + RasterBrightnessMax, + RasterBrightnessMin, + RasterContrast, + RasterFadeDuration, + RasterHueRotate, + RasterOpacity, + RasterResampling, + RasterSaturation, + RasterBrightnessMaxTransition, + RasterBrightnessMinTransition, + RasterContrastTransition, + RasterFadeDurationTransition, + RasterHueRotateTransition, + RasterOpacityTransition, + RasterResamplingTransition, + RasterSaturationTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"raster-brightness-max", mbgl::underlying_type(Property::RasterBrightnessMax)}, + {"raster-brightness-min", mbgl::underlying_type(Property::RasterBrightnessMin)}, + {"raster-contrast", mbgl::underlying_type(Property::RasterContrast)}, + {"raster-fade-duration", mbgl::underlying_type(Property::RasterFadeDuration)}, + {"raster-hue-rotate", mbgl::underlying_type(Property::RasterHueRotate)}, + {"raster-opacity", mbgl::underlying_type(Property::RasterOpacity)}, + {"raster-resampling", mbgl::underlying_type(Property::RasterResampling)}, + {"raster-saturation", mbgl::underlying_type(Property::RasterSaturation)}, + {"raster-brightness-max-transition", mbgl::underlying_type(Property::RasterBrightnessMaxTransition)}, + {"raster-brightness-min-transition", mbgl::underlying_type(Property::RasterBrightnessMinTransition)}, + {"raster-contrast-transition", mbgl::underlying_type(Property::RasterContrastTransition)}, + {"raster-fade-duration-transition", mbgl::underlying_type(Property::RasterFadeDurationTransition)}, + {"raster-hue-rotate-transition", mbgl::underlying_type(Property::RasterHueRotateTransition)}, + {"raster-opacity-transition", mbgl::underlying_type(Property::RasterOpacityTransition)}, + {"raster-resampling-transition", mbgl::underlying_type(Property::RasterResamplingTransition)}, + {"raster-saturation-transition", mbgl::underlying_type(Property::RasterSaturationTransition)}}); + +} // namespace + optional RasterLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - RasterBrightnessMax, - RasterBrightnessMin, - RasterContrast, - RasterFadeDuration, - RasterHueRotate, - RasterOpacity, - RasterResampling, - RasterSaturation, - RasterBrightnessMaxTransition, - RasterBrightnessMinTransition, - RasterContrastTransition, - RasterFadeDurationTransition, - RasterHueRotateTransition, - RasterOpacityTransition, - RasterResamplingTransition, - RasterSaturationTransition, - }; - - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "raster-brightness-max", mbgl::underlying_type(Property::RasterBrightnessMax) }, - { "raster-brightness-min", mbgl::underlying_type(Property::RasterBrightnessMin) }, - { "raster-contrast", mbgl::underlying_type(Property::RasterContrast) }, - { "raster-fade-duration", mbgl::underlying_type(Property::RasterFadeDuration) }, - { "raster-hue-rotate", mbgl::underlying_type(Property::RasterHueRotate) }, - { "raster-opacity", mbgl::underlying_type(Property::RasterOpacity) }, - { "raster-resampling", mbgl::underlying_type(Property::RasterResampling) }, - { "raster-saturation", mbgl::underlying_type(Property::RasterSaturation) }, - { "raster-brightness-max-transition", mbgl::underlying_type(Property::RasterBrightnessMaxTransition) }, - { "raster-brightness-min-transition", mbgl::underlying_type(Property::RasterBrightnessMinTransition) }, - { "raster-contrast-transition", mbgl::underlying_type(Property::RasterContrastTransition) }, - { "raster-fade-duration-transition", mbgl::underlying_type(Property::RasterFadeDurationTransition) }, - { "raster-hue-rotate-transition", mbgl::underlying_type(Property::RasterHueRotateTransition) }, - { "raster-opacity-transition", mbgl::underlying_type(Property::RasterOpacityTransition) }, - { "raster-resampling-transition", mbgl::underlying_type(Property::RasterResamplingTransition) }, - { "raster-saturation-transition", mbgl::underlying_type(Property::RasterSaturationTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -437,6 +440,49 @@ optional RasterLayer::setPaintProperty(const std::string& name, const Con return Error { "layer doesn't support this property" }; } +LayerProperty RasterLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::RasterBrightnessMax: + return conversion::makeLayerProperty(getRasterBrightnessMax()); + case Property::RasterBrightnessMin: + return conversion::makeLayerProperty(getRasterBrightnessMin()); + case Property::RasterContrast: + return conversion::makeLayerProperty(getRasterContrast()); + case Property::RasterFadeDuration: + return conversion::makeLayerProperty(getRasterFadeDuration()); + case Property::RasterHueRotate: + return conversion::makeLayerProperty(getRasterHueRotate()); + case Property::RasterOpacity: + return conversion::makeLayerProperty(getRasterOpacity()); + case Property::RasterResampling: + return conversion::makeLayerProperty(getRasterResampling()); + case Property::RasterSaturation: + return conversion::makeLayerProperty(getRasterSaturation()); + case Property::RasterBrightnessMaxTransition: + return conversion::makeLayerProperty(getRasterBrightnessMaxTransition()); + case Property::RasterBrightnessMinTransition: + return conversion::makeLayerProperty(getRasterBrightnessMinTransition()); + case Property::RasterContrastTransition: + return conversion::makeLayerProperty(getRasterContrastTransition()); + case Property::RasterFadeDurationTransition: + return conversion::makeLayerProperty(getRasterFadeDurationTransition()); + case Property::RasterHueRotateTransition: + return conversion::makeLayerProperty(getRasterHueRotateTransition()); + case Property::RasterOpacityTransition: + return conversion::makeLayerProperty(getRasterOpacityTransition()); + case Property::RasterResamplingTransition: + return conversion::makeLayerProperty(getRasterResamplingTransition()); + case Property::RasterSaturationTransition: + return conversion::makeLayerProperty(getRasterSaturationTransition()); + } + return {}; +} + optional RasterLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/style/layers/symbol_layer.cpp b/src/mbgl/style/layers/symbol_layer.cpp index af5daa4dc0..b36c02e558 100644 --- a/src/mbgl/style/layers/symbol_layer.cpp +++ b/src/mbgl/style/layers/symbol_layer.cpp @@ -1102,71 +1102,74 @@ TransitionOptions SymbolLayer::getTextTranslateAnchorTransition() const { using namespace conversion; -optional SymbolLayer::setPaintProperty(const std::string& name, const Convertible& value) { - enum class Property { - IconColor, - IconHaloBlur, - IconHaloColor, - IconHaloWidth, - IconOpacity, - IconTranslate, - IconTranslateAnchor, - TextColor, - TextHaloBlur, - TextHaloColor, - TextHaloWidth, - TextOpacity, - TextTranslate, - TextTranslateAnchor, - IconColorTransition, - IconHaloBlurTransition, - IconHaloColorTransition, - IconHaloWidthTransition, - IconOpacityTransition, - IconTranslateTransition, - IconTranslateAnchorTransition, - TextColorTransition, - TextHaloBlurTransition, - TextHaloColorTransition, - TextHaloWidthTransition, - TextOpacityTransition, - TextTranslateTransition, - TextTranslateAnchorTransition, - }; +namespace { + +enum class Property { + IconColor, + IconHaloBlur, + IconHaloColor, + IconHaloWidth, + IconOpacity, + IconTranslate, + IconTranslateAnchor, + TextColor, + TextHaloBlur, + TextHaloColor, + TextHaloWidth, + TextOpacity, + TextTranslate, + TextTranslateAnchor, + IconColorTransition, + IconHaloBlurTransition, + IconHaloColorTransition, + IconHaloWidthTransition, + IconOpacityTransition, + IconTranslateTransition, + IconTranslateAnchorTransition, + TextColorTransition, + TextHaloBlurTransition, + TextHaloColorTransition, + TextHaloWidthTransition, + TextOpacityTransition, + TextTranslateTransition, + TextTranslateAnchorTransition, +}; + +MAPBOX_ETERNAL_CONSTEXPR const auto paintProperties = mapbox::eternal::hash_map( + {{"icon-color", mbgl::underlying_type(Property::IconColor)}, + {"icon-halo-blur", mbgl::underlying_type(Property::IconHaloBlur)}, + {"icon-halo-color", mbgl::underlying_type(Property::IconHaloColor)}, + {"icon-halo-width", mbgl::underlying_type(Property::IconHaloWidth)}, + {"icon-opacity", mbgl::underlying_type(Property::IconOpacity)}, + {"icon-translate", mbgl::underlying_type(Property::IconTranslate)}, + {"icon-translate-anchor", mbgl::underlying_type(Property::IconTranslateAnchor)}, + {"text-color", mbgl::underlying_type(Property::TextColor)}, + {"text-halo-blur", mbgl::underlying_type(Property::TextHaloBlur)}, + {"text-halo-color", mbgl::underlying_type(Property::TextHaloColor)}, + {"text-halo-width", mbgl::underlying_type(Property::TextHaloWidth)}, + {"text-opacity", mbgl::underlying_type(Property::TextOpacity)}, + {"text-translate", mbgl::underlying_type(Property::TextTranslate)}, + {"text-translate-anchor", mbgl::underlying_type(Property::TextTranslateAnchor)}, + {"icon-color-transition", mbgl::underlying_type(Property::IconColorTransition)}, + {"icon-halo-blur-transition", mbgl::underlying_type(Property::IconHaloBlurTransition)}, + {"icon-halo-color-transition", mbgl::underlying_type(Property::IconHaloColorTransition)}, + {"icon-halo-width-transition", mbgl::underlying_type(Property::IconHaloWidthTransition)}, + {"icon-opacity-transition", mbgl::underlying_type(Property::IconOpacityTransition)}, + {"icon-translate-transition", mbgl::underlying_type(Property::IconTranslateTransition)}, + {"icon-translate-anchor-transition", mbgl::underlying_type(Property::IconTranslateAnchorTransition)}, + {"text-color-transition", mbgl::underlying_type(Property::TextColorTransition)}, + {"text-halo-blur-transition", mbgl::underlying_type(Property::TextHaloBlurTransition)}, + {"text-halo-color-transition", mbgl::underlying_type(Property::TextHaloColorTransition)}, + {"text-halo-width-transition", mbgl::underlying_type(Property::TextHaloWidthTransition)}, + {"text-opacity-transition", mbgl::underlying_type(Property::TextOpacityTransition)}, + {"text-translate-transition", mbgl::underlying_type(Property::TextTranslateTransition)}, + {"text-translate-anchor-transition", mbgl::underlying_type(Property::TextTranslateAnchorTransition)}}); + +} // namespace - MAPBOX_ETERNAL_CONSTEXPR const auto properties = mapbox::eternal::hash_map({ - { "icon-color", mbgl::underlying_type(Property::IconColor) }, - { "icon-halo-blur", mbgl::underlying_type(Property::IconHaloBlur) }, - { "icon-halo-color", mbgl::underlying_type(Property::IconHaloColor) }, - { "icon-halo-width", mbgl::underlying_type(Property::IconHaloWidth) }, - { "icon-opacity", mbgl::underlying_type(Property::IconOpacity) }, - { "icon-translate", mbgl::underlying_type(Property::IconTranslate) }, - { "icon-translate-anchor", mbgl::underlying_type(Property::IconTranslateAnchor) }, - { "text-color", mbgl::underlying_type(Property::TextColor) }, - { "text-halo-blur", mbgl::underlying_type(Property::TextHaloBlur) }, - { "text-halo-color", mbgl::underlying_type(Property::TextHaloColor) }, - { "text-halo-width", mbgl::underlying_type(Property::TextHaloWidth) }, - { "text-opacity", mbgl::underlying_type(Property::TextOpacity) }, - { "text-translate", mbgl::underlying_type(Property::TextTranslate) }, - { "text-translate-anchor", mbgl::underlying_type(Property::TextTranslateAnchor) }, - { "icon-color-transition", mbgl::underlying_type(Property::IconColorTransition) }, - { "icon-halo-blur-transition", mbgl::underlying_type(Property::IconHaloBlurTransition) }, - { "icon-halo-color-transition", mbgl::underlying_type(Property::IconHaloColorTransition) }, - { "icon-halo-width-transition", mbgl::underlying_type(Property::IconHaloWidthTransition) }, - { "icon-opacity-transition", mbgl::underlying_type(Property::IconOpacityTransition) }, - { "icon-translate-transition", mbgl::underlying_type(Property::IconTranslateTransition) }, - { "icon-translate-anchor-transition", mbgl::underlying_type(Property::IconTranslateAnchorTransition) }, - { "text-color-transition", mbgl::underlying_type(Property::TextColorTransition) }, - { "text-halo-blur-transition", mbgl::underlying_type(Property::TextHaloBlurTransition) }, - { "text-halo-color-transition", mbgl::underlying_type(Property::TextHaloColorTransition) }, - { "text-halo-width-transition", mbgl::underlying_type(Property::TextHaloWidthTransition) }, - { "text-opacity-transition", mbgl::underlying_type(Property::TextOpacityTransition) }, - { "text-translate-transition", mbgl::underlying_type(Property::TextTranslateTransition) }, - { "text-translate-anchor-transition", mbgl::underlying_type(Property::TextTranslateAnchorTransition) } - }); - - const auto it = properties.find(name.c_str()); - if (it == properties.end()) { +optional SymbolLayer::setPaintProperty(const std::string& name, const Convertible& value) { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { return Error { "layer doesn't support this property" }; } @@ -1360,6 +1363,73 @@ optional SymbolLayer::setPaintProperty(const std::string& name, const Con return Error { "layer doesn't support this property" }; } +LayerProperty SymbolLayer::getPaintProperty(const std::string& name) const { + const auto it = paintProperties.find(name.c_str()); + if (it == paintProperties.end()) { + return {}; + } + + switch (static_cast(it->second)) { + case Property::IconColor: + return conversion::makeLayerProperty(getIconColor()); + case Property::IconHaloBlur: + return conversion::makeLayerProperty(getIconHaloBlur()); + case Property::IconHaloColor: + return conversion::makeLayerProperty(getIconHaloColor()); + case Property::IconHaloWidth: + return conversion::makeLayerProperty(getIconHaloWidth()); + case Property::IconOpacity: + return conversion::makeLayerProperty(getIconOpacity()); + case Property::IconTranslate: + return conversion::makeLayerProperty(getIconTranslate()); + case Property::IconTranslateAnchor: + return conversion::makeLayerProperty(getIconTranslateAnchor()); + case Property::TextColor: + return conversion::makeLayerProperty(getTextColor()); + case Property::TextHaloBlur: + return conversion::makeLayerProperty(getTextHaloBlur()); + case Property::TextHaloColor: + return conversion::makeLayerProperty(getTextHaloColor()); + case Property::TextHaloWidth: + return conversion::makeLayerProperty(getTextHaloWidth()); + case Property::TextOpacity: + return conversion::makeLayerProperty(getTextOpacity()); + case Property::TextTranslate: + return conversion::makeLayerProperty(getTextTranslate()); + case Property::TextTranslateAnchor: + return conversion::makeLayerProperty(getTextTranslateAnchor()); + case Property::IconColorTransition: + return conversion::makeLayerProperty(getIconColorTransition()); + case Property::IconHaloBlurTransition: + return conversion::makeLayerProperty(getIconHaloBlurTransition()); + case Property::IconHaloColorTransition: + return conversion::makeLayerProperty(getIconHaloColorTransition()); + case Property::IconHaloWidthTransition: + return conversion::makeLayerProperty(getIconHaloWidthTransition()); + case Property::IconOpacityTransition: + return conversion::makeLayerProperty(getIconOpacityTransition()); + case Property::IconTranslateTransition: + return conversion::makeLayerProperty(getIconTranslateTransition()); + case Property::IconTranslateAnchorTransition: + return conversion::makeLayerProperty(getIconTranslateAnchorTransition()); + case Property::TextColorTransition: + return conversion::makeLayerProperty(getTextColorTransition()); + case Property::TextHaloBlurTransition: + return conversion::makeLayerProperty(getTextHaloBlurTransition()); + case Property::TextHaloColorTransition: + return conversion::makeLayerProperty(getTextHaloColorTransition()); + case Property::TextHaloWidthTransition: + return conversion::makeLayerProperty(getTextHaloWidthTransition()); + case Property::TextOpacityTransition: + return conversion::makeLayerProperty(getTextOpacityTransition()); + case Property::TextTranslateTransition: + return conversion::makeLayerProperty(getTextTranslateTransition()); + case Property::TextTranslateAnchorTransition: + return conversion::makeLayerProperty(getTextTranslateAnchorTransition()); + } + return {}; +} + optional SymbolLayer::setLayoutProperty(const std::string& name, const Convertible& value) { if (name == "visibility") { return Layer::setVisibility(value); diff --git a/src/mbgl/util/color.cpp b/src/mbgl/util/color.cpp index 8a880e8760..44f815e8b8 100644 --- a/src/mbgl/util/color.cpp +++ b/src/mbgl/util/color.cpp @@ -45,10 +45,7 @@ std::array Color::toArray() const { } mbgl::Value Color::toObject() const { - return mapbox::base::ValueObject{{"r", double(r)}, - {"g", double(g)}, - {"b", double(b)}, - {"a", double(a)}}; + return mapbox::base::ValueObject{{"r", double(r)}, {"g", double(g)}, {"b", double(b)}, {"a", double(a)}}; } } // namespace mbgl -- cgit v1.2.1