summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-12-08 12:09:21 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-12-09 09:35:21 -0800
commit3b2a4216a2e3929a557dbddd0d239758641c285f (patch)
treefc30966e6d1253e040b6092f1c53eb2fd22632e7 /src
parent4a2f53e6e51b4759cacd89790db99783bf211343 (diff)
downloadqtlocation-mapboxgl-3b2a4216a2e3929a557dbddd0d239758641c285f.tar.gz
[core] Implement circle-stroke properties
Also includes stubs for fill-extrusion layer, because most of the code was auto-generated.
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/programs/circle_program.hpp6
-rw-r--r--src/mbgl/renderer/painter_circle.cpp3
-rw-r--r--src/mbgl/style/layers/circle_layer.cpp45
-rw-r--r--src/mbgl/style/layers/circle_layer_properties.hpp17
-rw-r--r--src/mbgl/style/layers/fill_extrusion_layer.cpp171
-rw-r--r--src/mbgl/style/layers/fill_extrusion_layer_impl.cpp19
-rw-r--r--src/mbgl/style/layers/fill_extrusion_layer_impl.hpp24
-rw-r--r--src/mbgl/style/layers/fill_extrusion_layer_properties.cpp9
-rw-r--r--src/mbgl/style/layers/fill_extrusion_layer_properties.hpp51
-rw-r--r--src/mbgl/style/layers/layer.cpp.ejs4
-rw-r--r--src/mbgl/style/layers/layer_properties.cpp.ejs2
-rw-r--r--src/mbgl/style/style.cpp1
12 files changed, 348 insertions, 4 deletions
diff --git a/src/mbgl/programs/circle_program.hpp b/src/mbgl/programs/circle_program.hpp
index 6b713bb41c..c9aea1d137 100644
--- a/src/mbgl/programs/circle_program.hpp
+++ b/src/mbgl/programs/circle_program.hpp
@@ -10,6 +10,9 @@ namespace mbgl {
namespace uniforms {
MBGL_DEFINE_UNIFORM_SCALAR(float, u_radius);
+MBGL_DEFINE_UNIFORM_SCALAR(Color, u_stroke_color);
+MBGL_DEFINE_UNIFORM_SCALAR(float, u_stroke_width);
+MBGL_DEFINE_UNIFORM_SCALAR(float, u_stroke_opacity);
MBGL_DEFINE_UNIFORM_SCALAR(bool, u_scale_with_map);
} // namespace uniforms
@@ -26,6 +29,9 @@ class CircleProgram : public Program<
uniforms::u_color,
uniforms::u_radius,
uniforms::u_blur,
+ uniforms::u_stroke_color,
+ uniforms::u_stroke_width,
+ uniforms::u_stroke_opacity,
uniforms::u_scale_with_map,
uniforms::u_extrude_scale>>
{
diff --git a/src/mbgl/renderer/painter_circle.cpp b/src/mbgl/renderer/painter_circle.cpp
index 0767a50943..9385b7b1a3 100644
--- a/src/mbgl/renderer/painter_circle.cpp
+++ b/src/mbgl/renderer/painter_circle.cpp
@@ -41,6 +41,9 @@ void Painter::renderCircle(PaintParameters& parameters,
uniforms::u_color::Value{ properties.get<CircleColor>() },
uniforms::u_radius::Value{ properties.get<CircleRadius>() },
uniforms::u_blur::Value{ properties.get<CircleBlur>() },
+ uniforms::u_stroke_color::Value{ properties.get<CircleStrokeColor>() },
+ uniforms::u_stroke_width::Value{ properties.get<CircleStrokeWidth>() },
+ uniforms::u_stroke_opacity::Value{ properties.get<CircleStrokeOpacity>() },
uniforms::u_scale_with_map::Value{ scaleWithMap },
uniforms::u_extrude_scale::Value{ scaleWithMap
? std::array<float, 2> {{
diff --git a/src/mbgl/style/layers/circle_layer.cpp b/src/mbgl/style/layers/circle_layer.cpp
index ce01a12ff2..e3a506e895 100644
--- a/src/mbgl/style/layers/circle_layer.cpp
+++ b/src/mbgl/style/layers/circle_layer.cpp
@@ -167,5 +167,50 @@ void CircleLayer::setCirclePitchScale(PropertyValue<CirclePitchScaleType> value,
impl->observer->onLayerPaintPropertyChanged(*this);
}
+PropertyValue<float> CircleLayer::getDefaultCircleStrokeWidth() {
+ return { 0 };
+}
+
+PropertyValue<float> CircleLayer::getCircleStrokeWidth(const optional<std::string>& klass) const {
+ return impl->paint.get<CircleStrokeWidth>(klass);
+}
+
+void CircleLayer::setCircleStrokeWidth(PropertyValue<float> value, const optional<std::string>& klass) {
+ if (value == getCircleStrokeWidth(klass))
+ return;
+ impl->paint.set<CircleStrokeWidth>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<Color> CircleLayer::getDefaultCircleStrokeColor() {
+ return { Color::black() };
+}
+
+PropertyValue<Color> CircleLayer::getCircleStrokeColor(const optional<std::string>& klass) const {
+ return impl->paint.get<CircleStrokeColor>(klass);
+}
+
+void CircleLayer::setCircleStrokeColor(PropertyValue<Color> value, const optional<std::string>& klass) {
+ if (value == getCircleStrokeColor(klass))
+ return;
+ impl->paint.set<CircleStrokeColor>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<float> CircleLayer::getDefaultCircleStrokeOpacity() {
+ return { 1 };
+}
+
+PropertyValue<float> CircleLayer::getCircleStrokeOpacity(const optional<std::string>& klass) const {
+ return impl->paint.get<CircleStrokeOpacity>(klass);
+}
+
+void CircleLayer::setCircleStrokeOpacity(PropertyValue<float> value, const optional<std::string>& klass) {
+ if (value == getCircleStrokeOpacity(klass))
+ return;
+ impl->paint.set<CircleStrokeOpacity>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
} // namespace style
} // namespace mbgl
diff --git a/src/mbgl/style/layers/circle_layer_properties.hpp b/src/mbgl/style/layers/circle_layer_properties.hpp
index b7f279de4b..ea36b31949 100644
--- a/src/mbgl/style/layers/circle_layer_properties.hpp
+++ b/src/mbgl/style/layers/circle_layer_properties.hpp
@@ -37,6 +37,18 @@ struct CirclePitchScale : PaintProperty<CirclePitchScaleType> {
static CirclePitchScaleType defaultValue() { return CirclePitchScaleType::Map; }
};
+struct CircleStrokeWidth : PaintProperty<float> {
+ static float defaultValue() { return 0; }
+};
+
+struct CircleStrokeColor : PaintProperty<Color> {
+ static Color defaultValue() { return Color::black(); }
+};
+
+struct CircleStrokeOpacity : PaintProperty<float> {
+ static float defaultValue() { return 1; }
+};
+
class CirclePaintProperties : public PaintProperties<
CircleRadius,
CircleColor,
@@ -44,7 +56,10 @@ class CirclePaintProperties : public PaintProperties<
CircleOpacity,
CircleTranslate,
CircleTranslateAnchor,
- CirclePitchScale
+ CirclePitchScale,
+ CircleStrokeWidth,
+ CircleStrokeColor,
+ CircleStrokeOpacity
> {};
} // namespace style
diff --git a/src/mbgl/style/layers/fill_extrusion_layer.cpp b/src/mbgl/style/layers/fill_extrusion_layer.cpp
new file mode 100644
index 0000000000..64efb1dd6a
--- /dev/null
+++ b/src/mbgl/style/layers/fill_extrusion_layer.cpp
@@ -0,0 +1,171 @@
+// This file is generated. Edit scripts/generate-style-code.js, then run `make style-code`.
+
+#include <mbgl/style/layers/fill_extrusion_layer.hpp>
+#include <mbgl/style/layers/fill_extrusion_layer_impl.hpp>
+
+namespace mbgl {
+namespace style {
+
+FillExtrusionLayer::FillExtrusionLayer(const std::string& layerID, const std::string& sourceID)
+ : Layer(Type::FillExtrusion, std::make_unique<Impl>())
+ , impl(static_cast<Impl*>(baseImpl.get())) {
+ impl->id = layerID;
+ impl->source = sourceID;
+}
+
+FillExtrusionLayer::FillExtrusionLayer(const Impl& other)
+ : Layer(Type::FillExtrusion, std::make_unique<Impl>(other))
+ , impl(static_cast<Impl*>(baseImpl.get())) {
+}
+
+FillExtrusionLayer::~FillExtrusionLayer() = default;
+
+std::unique_ptr<Layer> FillExtrusionLayer::Impl::clone() const {
+ return std::make_unique<FillExtrusionLayer>(*this);
+}
+
+std::unique_ptr<Layer> FillExtrusionLayer::Impl::cloneRef(const std::string& id_) const {
+ auto result = std::make_unique<FillExtrusionLayer>(*this);
+ result->impl->id = id_;
+ result->impl->ref = this->id;
+ result->impl->paint = FillExtrusionPaintProperties();
+ return std::move(result);
+}
+
+// Source
+
+const std::string& FillExtrusionLayer::getSourceID() const {
+ return impl->source;
+}
+
+void FillExtrusionLayer::setSourceLayer(const std::string& sourceLayer) {
+ impl->sourceLayer = sourceLayer;
+}
+
+const std::string& FillExtrusionLayer::getSourceLayer() const {
+ return impl->sourceLayer;
+}
+
+// Filter
+
+void FillExtrusionLayer::setFilter(const Filter& filter) {
+ impl->filter = filter;
+ impl->observer->onLayerFilterChanged(*this);
+}
+
+const Filter& FillExtrusionLayer::getFilter() const {
+ return impl->filter;
+}
+
+// Layout properties
+
+
+// Paint properties
+
+PropertyValue<float> FillExtrusionLayer::getDefaultFillExtrusionOpacity() {
+ return { 1 };
+}
+
+PropertyValue<float> FillExtrusionLayer::getFillExtrusionOpacity(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionOpacity>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionOpacity(PropertyValue<float> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionOpacity(klass))
+ return;
+ impl->paint.set<FillExtrusionOpacity>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<Color> FillExtrusionLayer::getDefaultFillExtrusionColor() {
+ return { Color::black() };
+}
+
+PropertyValue<Color> FillExtrusionLayer::getFillExtrusionColor(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionColor>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionColor(PropertyValue<Color> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionColor(klass))
+ return;
+ impl->paint.set<FillExtrusionColor>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<std::array<float, 2>> FillExtrusionLayer::getDefaultFillExtrusionTranslate() {
+ return { {{ 0, 0 }} };
+}
+
+PropertyValue<std::array<float, 2>> FillExtrusionLayer::getFillExtrusionTranslate(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionTranslate>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionTranslate(PropertyValue<std::array<float, 2>> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionTranslate(klass))
+ return;
+ impl->paint.set<FillExtrusionTranslate>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<TranslateAnchorType> FillExtrusionLayer::getDefaultFillExtrusionTranslateAnchor() {
+ return { TranslateAnchorType::Map };
+}
+
+PropertyValue<TranslateAnchorType> FillExtrusionLayer::getFillExtrusionTranslateAnchor(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionTranslateAnchor>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionTranslateAnchor(PropertyValue<TranslateAnchorType> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionTranslateAnchor(klass))
+ return;
+ impl->paint.set<FillExtrusionTranslateAnchor>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<std::string> FillExtrusionLayer::getDefaultFillExtrusionPattern() {
+ return { "" };
+}
+
+PropertyValue<std::string> FillExtrusionLayer::getFillExtrusionPattern(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionPattern>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionPattern(PropertyValue<std::string> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionPattern(klass))
+ return;
+ impl->paint.set<FillExtrusionPattern>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<float> FillExtrusionLayer::getDefaultFillExtrusionHeight() {
+ return { 0 };
+}
+
+PropertyValue<float> FillExtrusionLayer::getFillExtrusionHeight(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionHeight>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionHeight(PropertyValue<float> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionHeight(klass))
+ return;
+ impl->paint.set<FillExtrusionHeight>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+PropertyValue<float> FillExtrusionLayer::getDefaultFillExtrusionBase() {
+ return { 0 };
+}
+
+PropertyValue<float> FillExtrusionLayer::getFillExtrusionBase(const optional<std::string>& klass) const {
+ return impl->paint.get<FillExtrusionBase>(klass);
+}
+
+void FillExtrusionLayer::setFillExtrusionBase(PropertyValue<float> value, const optional<std::string>& klass) {
+ if (value == getFillExtrusionBase(klass))
+ return;
+ impl->paint.set<FillExtrusionBase>(value, klass);
+ impl->observer->onLayerPaintPropertyChanged(*this);
+}
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/layers/fill_extrusion_layer_impl.cpp b/src/mbgl/style/layers/fill_extrusion_layer_impl.cpp
new file mode 100644
index 0000000000..239f7754d0
--- /dev/null
+++ b/src/mbgl/style/layers/fill_extrusion_layer_impl.cpp
@@ -0,0 +1,19 @@
+#include <mbgl/style/layers/fill_extrusion_layer_impl.hpp>
+#include <mbgl/renderer/bucket.hpp>
+
+namespace mbgl {
+namespace style {
+
+void FillExtrusionLayer::Impl::cascade(const CascadeParameters&) {
+}
+
+bool FillExtrusionLayer::Impl::evaluate(const PropertyEvaluationParameters&) {
+ return false;
+}
+
+std::unique_ptr<Bucket> FillExtrusionLayer::Impl::createBucket(BucketParameters&) const {
+ return nullptr;
+}
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/layers/fill_extrusion_layer_impl.hpp b/src/mbgl/style/layers/fill_extrusion_layer_impl.hpp
new file mode 100644
index 0000000000..79ae02dd5b
--- /dev/null
+++ b/src/mbgl/style/layers/fill_extrusion_layer_impl.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <mbgl/style/layer_impl.hpp>
+#include <mbgl/style/layers/fill_extrusion_layer.hpp>
+#include <mbgl/style/layers/fill_extrusion_layer_properties.hpp>
+
+namespace mbgl {
+namespace style {
+
+class FillExtrusionLayer::Impl : public Layer::Impl {
+public:
+ std::unique_ptr<Layer> clone() const override;
+ std::unique_ptr<Layer> cloneRef(const std::string& id) const override;
+
+ void cascade(const CascadeParameters&) override;
+ bool evaluate(const PropertyEvaluationParameters&) override;
+
+ std::unique_ptr<Bucket> createBucket(BucketParameters&) const override;
+
+ FillExtrusionPaintProperties paint;
+};
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/layers/fill_extrusion_layer_properties.cpp b/src/mbgl/style/layers/fill_extrusion_layer_properties.cpp
new file mode 100644
index 0000000000..59572bd3ab
--- /dev/null
+++ b/src/mbgl/style/layers/fill_extrusion_layer_properties.cpp
@@ -0,0 +1,9 @@
+// This file is generated. Edit scripts/generate-style-code.js, then run `make style-code`.
+
+#include <mbgl/style/layers/fill_extrusion_layer_properties.hpp>
+
+namespace mbgl {
+namespace style {
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/layers/fill_extrusion_layer_properties.hpp b/src/mbgl/style/layers/fill_extrusion_layer_properties.hpp
new file mode 100644
index 0000000000..a2d01199a5
--- /dev/null
+++ b/src/mbgl/style/layers/fill_extrusion_layer_properties.hpp
@@ -0,0 +1,51 @@
+// This file is generated. Edit scripts/generate-style-code.js, then run `make style-code`.
+
+#pragma once
+
+#include <mbgl/style/types.hpp>
+#include <mbgl/style/layout_property.hpp>
+#include <mbgl/style/paint_property.hpp>
+
+namespace mbgl {
+namespace style {
+
+struct FillExtrusionOpacity : PaintProperty<float> {
+ static float defaultValue() { return 1; }
+};
+
+struct FillExtrusionColor : PaintProperty<Color> {
+ static Color defaultValue() { return Color::black(); }
+};
+
+struct FillExtrusionTranslate : PaintProperty<std::array<float, 2>> {
+ static std::array<float, 2> defaultValue() { return {{ 0, 0 }}; }
+};
+
+struct FillExtrusionTranslateAnchor : PaintProperty<TranslateAnchorType> {
+ static TranslateAnchorType defaultValue() { return TranslateAnchorType::Map; }
+};
+
+struct FillExtrusionPattern : CrossFadedPaintProperty<std::string> {
+ static std::string defaultValue() { return ""; }
+};
+
+struct FillExtrusionHeight : PaintProperty<float> {
+ static float defaultValue() { return 0; }
+};
+
+struct FillExtrusionBase : PaintProperty<float> {
+ static float defaultValue() { return 0; }
+};
+
+class FillExtrusionPaintProperties : public PaintProperties<
+ FillExtrusionOpacity,
+ FillExtrusionColor,
+ FillExtrusionTranslate,
+ FillExtrusionTranslateAnchor,
+ FillExtrusionPattern,
+ FillExtrusionHeight,
+ FillExtrusionBase
+> {};
+
+} // namespace style
+} // namespace mbgl
diff --git a/src/mbgl/style/layers/layer.cpp.ejs b/src/mbgl/style/layers/layer.cpp.ejs
index dcc78bafe5..5fe78519ec 100644
--- a/src/mbgl/style/layers/layer.cpp.ejs
+++ b/src/mbgl/style/layers/layer.cpp.ejs
@@ -5,8 +5,8 @@
-%>
// This file is generated. Edit scripts/generate-style-code.js, then run `make style-code`.
-#include <mbgl/style/layers/<%- type %>_layer.hpp>
-#include <mbgl/style/layers/<%- type %>_layer_impl.hpp>
+#include <mbgl/style/layers/<%- type.replace('-', '_') %>_layer.hpp>
+#include <mbgl/style/layers/<%- type.replace('-', '_') %>_layer_impl.hpp>
namespace mbgl {
namespace style {
diff --git a/src/mbgl/style/layers/layer_properties.cpp.ejs b/src/mbgl/style/layers/layer_properties.cpp.ejs
index 3b287decc0..e5523e5439 100644
--- a/src/mbgl/style/layers/layer_properties.cpp.ejs
+++ b/src/mbgl/style/layers/layer_properties.cpp.ejs
@@ -5,7 +5,7 @@
-%>
// This file is generated. Edit scripts/generate-style-code.js, then run `make style-code`.
-#include <mbgl/style/layers/<%- type %>_layer_properties.hpp>
+#include <mbgl/style/layers/<%- type.replace('-', '_') %>_layer_properties.hpp>
namespace mbgl {
namespace style {
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index f16e8f1856..b1cf174bdb 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -8,6 +8,7 @@
#include <mbgl/style/layers/background_layer.hpp>
#include <mbgl/style/layers/background_layer_impl.hpp>
#include <mbgl/style/layers/fill_layer.hpp>
+#include <mbgl/style/layers/fill_extrusion_layer.hpp>
#include <mbgl/style/layers/line_layer.hpp>
#include <mbgl/style/layers/circle_layer.hpp>
#include <mbgl/style/layers/raster_layer.hpp>