diff options
Diffstat (limited to 'include/mbgl/style')
-rw-r--r-- | include/mbgl/style/conversion/function.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/style/conversion/make_property_setters.hpp | 13 | ||||
-rw-r--r-- | include/mbgl/style/conversion/make_property_setters.hpp.ejs | 2 | ||||
-rw-r--r-- | include/mbgl/style/function.hpp | 31 | ||||
-rw-r--r-- | include/mbgl/style/layer.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/style/layers/circle_layer.hpp | 12 | ||||
-rw-r--r-- | include/mbgl/style/layers/fill_extrusion_layer.hpp | 72 | ||||
-rw-r--r-- | include/mbgl/style/property_value.hpp | 24 | ||||
-rw-r--r-- | include/mbgl/style/transition_options.hpp | 14 |
9 files changed, 145 insertions, 31 deletions
diff --git a/include/mbgl/style/conversion/function.hpp b/include/mbgl/style/conversion/function.hpp index f14b5089be..6a0b67618f 100644 --- a/include/mbgl/style/conversion/function.hpp +++ b/include/mbgl/style/conversion/function.hpp @@ -25,6 +25,10 @@ struct Converter<Function<T>> { return Error { "function stops must be an array" }; } + if (arrayLength(*stopsValue) == 0) { + return Error { "function must have at least one stop" }; + } + std::vector<std::pair<float, T>> stops; for (std::size_t i = 0; i < arrayLength(*stopsValue); ++i) { const auto& stopValue = arrayMember(*stopsValue, i); diff --git a/include/mbgl/style/conversion/make_property_setters.hpp b/include/mbgl/style/conversion/make_property_setters.hpp index a3ba5e5d5a..e30359937e 100644 --- a/include/mbgl/style/conversion/make_property_setters.hpp +++ b/include/mbgl/style/conversion/make_property_setters.hpp @@ -8,6 +8,7 @@ #include <mbgl/style/layers/line_layer.hpp> #include <mbgl/style/layers/symbol_layer.hpp> #include <mbgl/style/layers/circle_layer.hpp> +#include <mbgl/style/layers/fill_extrusion_layer.hpp> #include <mbgl/style/layers/raster_layer.hpp> #include <mbgl/style/layers/background_layer.hpp> @@ -67,6 +68,7 @@ auto makeLayoutPropertySetters() { + return result; } @@ -115,6 +117,17 @@ auto makePaintPropertySetters() { result["circle-translate"] = makePropertySetter<V>(&CircleLayer::setCircleTranslate); result["circle-translate-anchor"] = makePropertySetter<V>(&CircleLayer::setCircleTranslateAnchor); result["circle-pitch-scale"] = makePropertySetter<V>(&CircleLayer::setCirclePitchScale); + result["circle-stroke-width"] = makePropertySetter<V>(&CircleLayer::setCircleStrokeWidth); + result["circle-stroke-color"] = makePropertySetter<V>(&CircleLayer::setCircleStrokeColor); + result["circle-stroke-opacity"] = makePropertySetter<V>(&CircleLayer::setCircleStrokeOpacity); + + result["fill-extrusion-opacity"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionOpacity); + result["fill-extrusion-color"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionColor); + result["fill-extrusion-translate"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionTranslate); + result["fill-extrusion-translate-anchor"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionTranslateAnchor); + result["fill-extrusion-pattern"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionPattern); + result["fill-extrusion-height"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionHeight); + result["fill-extrusion-base"] = makePropertySetter<V>(&FillExtrusionLayer::setFillExtrusionBase); result["raster-opacity"] = makePropertySetter<V>(&RasterLayer::setRasterOpacity); result["raster-hue-rotate"] = makePropertySetter<V>(&RasterLayer::setRasterHueRotate); diff --git a/include/mbgl/style/conversion/make_property_setters.hpp.ejs b/include/mbgl/style/conversion/make_property_setters.hpp.ejs index 54e3958180..ed8f6e891c 100644 --- a/include/mbgl/style/conversion/make_property_setters.hpp.ejs +++ b/include/mbgl/style/conversion/make_property_setters.hpp.ejs @@ -5,7 +5,7 @@ #include <mbgl/style/conversion/property_setter.hpp> <% for (const layer of locals.layers) { -%> -#include <mbgl/style/layers/<%- layer.type %>_layer.hpp> +#include <mbgl/style/layers/<%- layer.type.replace('-', '_') %>_layer.hpp> <% } -%> #include <unordered_map> diff --git a/include/mbgl/style/function.hpp b/include/mbgl/style/function.hpp index 97e880b280..b023229e4f 100644 --- a/include/mbgl/style/function.hpp +++ b/include/mbgl/style/function.hpp @@ -1,7 +1,8 @@ #pragma once -#include <vector> +#include <cassert> #include <utility> +#include <vector> namespace mbgl { namespace style { @@ -12,28 +13,28 @@ public: using Stop = std::pair<float, T>; using Stops = std::vector<Stop>; - explicit Function(Stops stops_, float base_) - : base(base_), stops(std::move(stops_)) {} + Function(Stops stops_, float base_) + : base(base_), stops(std::move(stops_)) { + assert(stops.size() > 0); + } float getBase() const { return base; } const std::vector<std::pair<float, T>>& getStops() const { return stops; } + T evaluate(float z) const; + + friend bool operator==(const Function& lhs, const Function& rhs) { + return lhs.base == rhs.base && lhs.stops == rhs.stops; + } + + friend bool operator!=(const Function& lhs, const Function& rhs) { + return !(lhs == rhs); + } + private: float base = 1; std::vector<std::pair<float, T>> stops; - - template <class S> friend bool operator==(const Function<S>&, const Function<S>&); }; -template <class T> -bool operator==(const Function<T>& lhs, const Function<T>& rhs) { - return lhs.base == rhs.base && lhs.stops == rhs.stops; -} - -template <class T> -bool operator!=(const Function<T>& lhs, const Function<T>& rhs) { - return !(lhs == rhs); -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/layer.hpp b/include/mbgl/style/layer.hpp index 925629a349..dc02cb09b2 100644 --- a/include/mbgl/style/layer.hpp +++ b/include/mbgl/style/layer.hpp @@ -15,6 +15,7 @@ class SymbolLayer; class RasterLayer; class BackgroundLayer; class CustomLayer; +class FillExtrusionLayer; /** * The runtime representation of a [layer](https://www.mapbox.com/mapbox-gl-style-spec/#layers) from the Mapbox Style @@ -42,6 +43,7 @@ protected: Raster, Background, Custom, + FillExtrusion, }; class Impl; @@ -95,6 +97,8 @@ public: return visitor(*as<BackgroundLayer>()); case Type::Custom: return visitor(*as<CustomLayer>()); + case Type::FillExtrusion: + return visitor(*as<FillExtrusionLayer>()); } } diff --git a/include/mbgl/style/layers/circle_layer.hpp b/include/mbgl/style/layers/circle_layer.hpp index 587f0023e3..5562126c2f 100644 --- a/include/mbgl/style/layers/circle_layer.hpp +++ b/include/mbgl/style/layers/circle_layer.hpp @@ -54,6 +54,18 @@ public: PropertyValue<CirclePitchScaleType> getCirclePitchScale(const optional<std::string>& klass = {}) const; void setCirclePitchScale(PropertyValue<CirclePitchScaleType>, const optional<std::string>& klass = {}); + static PropertyValue<float> getDefaultCircleStrokeWidth(); + PropertyValue<float> getCircleStrokeWidth(const optional<std::string>& klass = {}) const; + void setCircleStrokeWidth(PropertyValue<float>, const optional<std::string>& klass = {}); + + static PropertyValue<Color> getDefaultCircleStrokeColor(); + PropertyValue<Color> getCircleStrokeColor(const optional<std::string>& klass = {}) const; + void setCircleStrokeColor(PropertyValue<Color>, const optional<std::string>& klass = {}); + + static PropertyValue<float> getDefaultCircleStrokeOpacity(); + PropertyValue<float> getCircleStrokeOpacity(const optional<std::string>& klass = {}) const; + void setCircleStrokeOpacity(PropertyValue<float>, const optional<std::string>& klass = {}); + // Private implementation class Impl; diff --git a/include/mbgl/style/layers/fill_extrusion_layer.hpp b/include/mbgl/style/layers/fill_extrusion_layer.hpp new file mode 100644 index 0000000000..08728af309 --- /dev/null +++ b/include/mbgl/style/layers/fill_extrusion_layer.hpp @@ -0,0 +1,72 @@ +// This file is generated. Do not edit. + +#pragma once + +#include <mbgl/style/layer.hpp> +#include <mbgl/style/filter.hpp> +#include <mbgl/style/property_value.hpp> + +#include <mbgl/util/color.hpp> + +namespace mbgl { +namespace style { + +class FillExtrusionLayer : public Layer { +public: + FillExtrusionLayer(const std::string& layerID, const std::string& sourceID); + ~FillExtrusionLayer() final; + + // Source + const std::string& getSourceID() const; + const std::string& getSourceLayer() const; + void setSourceLayer(const std::string& sourceLayer); + + void setFilter(const Filter&); + const Filter& getFilter() const; + + // Paint properties + + static PropertyValue<float> getDefaultFillExtrusionOpacity(); + PropertyValue<float> getFillExtrusionOpacity(const optional<std::string>& klass = {}) const; + void setFillExtrusionOpacity(PropertyValue<float>, const optional<std::string>& klass = {}); + + static PropertyValue<Color> getDefaultFillExtrusionColor(); + PropertyValue<Color> getFillExtrusionColor(const optional<std::string>& klass = {}) const; + void setFillExtrusionColor(PropertyValue<Color>, const optional<std::string>& klass = {}); + + static PropertyValue<std::array<float, 2>> getDefaultFillExtrusionTranslate(); + PropertyValue<std::array<float, 2>> getFillExtrusionTranslate(const optional<std::string>& klass = {}) const; + void setFillExtrusionTranslate(PropertyValue<std::array<float, 2>>, const optional<std::string>& klass = {}); + + static PropertyValue<TranslateAnchorType> getDefaultFillExtrusionTranslateAnchor(); + PropertyValue<TranslateAnchorType> getFillExtrusionTranslateAnchor(const optional<std::string>& klass = {}) const; + void setFillExtrusionTranslateAnchor(PropertyValue<TranslateAnchorType>, const optional<std::string>& klass = {}); + + static PropertyValue<std::string> getDefaultFillExtrusionPattern(); + PropertyValue<std::string> getFillExtrusionPattern(const optional<std::string>& klass = {}) const; + void setFillExtrusionPattern(PropertyValue<std::string>, const optional<std::string>& klass = {}); + + static PropertyValue<float> getDefaultFillExtrusionHeight(); + PropertyValue<float> getFillExtrusionHeight(const optional<std::string>& klass = {}) const; + void setFillExtrusionHeight(PropertyValue<float>, const optional<std::string>& klass = {}); + + static PropertyValue<float> getDefaultFillExtrusionBase(); + PropertyValue<float> getFillExtrusionBase(const optional<std::string>& klass = {}) const; + void setFillExtrusionBase(PropertyValue<float>, const optional<std::string>& klass = {}); + + // Private implementation + + class Impl; + Impl* const impl; + + FillExtrusionLayer(const Impl&); + FillExtrusionLayer(const FillExtrusionLayer&) = delete; +}; + +template <> +inline bool Layer::is<FillExtrusionLayer>() const { + return type == Type::FillExtrusion; +} + +} // namespace style +} // namespace mbgl diff --git a/include/mbgl/style/property_value.hpp b/include/mbgl/style/property_value.hpp index d7e160fdca..83c4b4cf1b 100644 --- a/include/mbgl/style/property_value.hpp +++ b/include/mbgl/style/property_value.hpp @@ -17,7 +17,13 @@ private: using Value = variant<Undefined, T, Function<T>>; Value value; - template <class S> friend bool operator==(const PropertyValue<S>&, const PropertyValue<S>&); + friend bool operator==(const PropertyValue& lhs, const PropertyValue& rhs) { + return lhs.value == rhs.value; + } + + friend bool operator!=(const PropertyValue& lhs, const PropertyValue& rhs) { + return !(lhs == rhs); + } public: PropertyValue() : value() {} @@ -33,21 +39,11 @@ public: explicit operator bool() const { return !isUndefined(); }; - template <typename Visitor> - static auto visit(const PropertyValue<T>& value, Visitor&& visitor) { - return Value::visit(value.value, visitor); + template <typename Evaluator> + auto evaluate(const Evaluator& evaluator) const { + return Value::visit(value, evaluator); } }; -template <class T> -bool operator==(const PropertyValue<T>& lhs, const PropertyValue<T>& rhs) { - return lhs.value == rhs.value; -} - -template <class T> -bool operator!=(const PropertyValue<T>& lhs, const PropertyValue<T>& rhs) { - return !(lhs == rhs); -} - } // namespace style } // namespace mbgl diff --git a/include/mbgl/style/transition_options.hpp b/include/mbgl/style/transition_options.hpp index d7a6633f0c..e2a156e665 100644 --- a/include/mbgl/style/transition_options.hpp +++ b/include/mbgl/style/transition_options.hpp @@ -6,9 +6,21 @@ namespace mbgl { namespace style { -struct TransitionOptions { +class TransitionOptions { +public: optional<Duration> duration = {}; optional<Duration> delay = {}; + + TransitionOptions reverseMerge(const TransitionOptions& defaults) const { + return { + duration ? duration : defaults.duration, + delay ? delay : defaults.delay + }; + } + + explicit operator bool() const { + return duration || delay; + } }; } // namespace style |