summaryrefslogtreecommitdiff
path: root/include/mbgl/style
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/style')
-rw-r--r--include/mbgl/style/conversion/function.hpp4
-rw-r--r--include/mbgl/style/conversion/make_property_setters.hpp13
-rw-r--r--include/mbgl/style/conversion/make_property_setters.hpp.ejs2
-rw-r--r--include/mbgl/style/function.hpp31
-rw-r--r--include/mbgl/style/layer.hpp4
-rw-r--r--include/mbgl/style/layers/circle_layer.hpp12
-rw-r--r--include/mbgl/style/layers/fill_extrusion_layer.hpp72
-rw-r--r--include/mbgl/style/property_value.hpp24
-rw-r--r--include/mbgl/style/transition_options.hpp14
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