summaryrefslogtreecommitdiff
path: root/src/mbgl/style
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style')
-rw-r--r--src/mbgl/style/expression/compound_expression.cpp9
-rw-r--r--src/mbgl/style/expression/parsing_context.cpp3
-rw-r--r--src/mbgl/style/layers/line_layer.cpp56
-rw-r--r--src/mbgl/style/layers/line_layer_properties.hpp6
4 files changed, 72 insertions, 2 deletions
diff --git a/src/mbgl/style/expression/compound_expression.cpp b/src/mbgl/style/expression/compound_expression.cpp
index f8c2376cb3..2e823ff43d 100644
--- a/src/mbgl/style/expression/compound_expression.cpp
+++ b/src/mbgl/style/expression/compound_expression.cpp
@@ -352,6 +352,15 @@ std::unordered_map<std::string, CompoundExpressionRegistry::Definition> initiali
return *(params.colorRampParameter);
});
+ define("line-progress", [](const EvaluationContext& params) -> Result<double> {
+ if (!params.colorRampParameter) {
+ return EvaluationError {
+ "The 'line-progress' expression is unavailable in the current evaluation context."
+ };
+ }
+ return *(params.colorRampParameter);
+ });
+
define("has", [](const EvaluationContext& params, const std::string& key) -> Result<bool> {
if (!params.feature) {
return EvaluationError {
diff --git a/src/mbgl/style/expression/parsing_context.cpp b/src/mbgl/style/expression/parsing_context.cpp
index ef17caed33..3fe50aa1e4 100644
--- a/src/mbgl/style/expression/parsing_context.cpp
+++ b/src/mbgl/style/expression/parsing_context.cpp
@@ -69,7 +69,8 @@ bool isConstant(const Expression& expression) {
}
return isFeatureConstant(expression) &&
- isGlobalPropertyConstant(expression, std::array<std::string, 2>{{"zoom", "heatmap-density"}});
+ isGlobalPropertyConstant(expression, std::array<std::string, 2>{{"zoom", "heatmap-density"}}) &&
+ isGlobalPropertyConstant(expression, std::array<std::string, 2>{{"zoom", "line-progress"}});
}
using namespace mbgl::style::conversion;
diff --git a/src/mbgl/style/layers/line_layer.cpp b/src/mbgl/style/layers/line_layer.cpp
index 1b84c2d73e..1ddc690cc7 100644
--- a/src/mbgl/style/layers/line_layer.cpp
+++ b/src/mbgl/style/layers/line_layer.cpp
@@ -438,6 +438,33 @@ TransitionOptions LineLayer::getLinePatternTransition() const {
return impl().paint.template get<LinePattern>().options;
}
+ColorRampPropertyValue LineLayer::getDefaultLineGradient() {
+ return { {} };
+}
+
+ColorRampPropertyValue LineLayer::getLineGradient() const {
+ return impl().paint.template get<LineGradient>().value;
+}
+
+void LineLayer::setLineGradient(ColorRampPropertyValue value) {
+ if (value == getLineGradient())
+ return;
+ auto impl_ = mutableImpl();
+ impl_->paint.template get<LineGradient>().value = value;
+ baseImpl = std::move(impl_);
+ observer->onLayerChanged(*this);
+}
+
+void LineLayer::setLineGradientTransition(const TransitionOptions& options) {
+ auto impl_ = mutableImpl();
+ impl_->paint.template get<LineGradient>().options = options;
+ baseImpl = std::move(impl_);
+}
+
+TransitionOptions LineLayer::getLineGradientTransition() const {
+ return impl().paint.template get<LineGradient>().options;
+}
+
using namespace conversion;
optional<Error> LineLayer::setPaintProperty(const std::string& name, const Convertible& value) {
@@ -453,6 +480,7 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
LineBlur,
LineDasharray,
LinePattern,
+ LineGradient,
LineOpacityTransition,
LineColorTransition,
LineTranslateTransition,
@@ -463,6 +491,7 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
LineBlurTransition,
LineDasharrayTransition,
LinePatternTransition,
+ LineGradientTransition,
};
Property property = Property::Unknown;
@@ -567,6 +596,16 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
property = Property::LinePatternTransition;
}
break;
+ case util::hashFNV1a("line-gradient"):
+ if (name == "line-gradient") {
+ property = Property::LineGradient;
+ }
+ break;
+ case util::hashFNV1a("line-gradient-transition"):
+ if (name == "line-gradient-transition") {
+ property = Property::LineGradientTransition;
+ }
+ break;
}
@@ -669,6 +708,18 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
}
+ if (property == Property::LineGradient) {
+ Error error;
+ optional<ColorRampPropertyValue> typedValue = convert<ColorRampPropertyValue>(value, error, false, false);
+ if (!typedValue) {
+ return error;
+ }
+
+ setLineGradient(*typedValue);
+ return nullopt;
+
+ }
+
Error error;
optional<TransitionOptions> transition = convert<TransitionOptions>(value, error);
@@ -726,6 +777,11 @@ optional<Error> LineLayer::setPaintProperty(const std::string& name, const Conve
return nullopt;
}
+ if (property == Property::LineGradientTransition) {
+ setLineGradientTransition(*transition);
+ return nullopt;
+ }
+
return Error { "layer doesn't support this property" };
}
diff --git a/src/mbgl/style/layers/line_layer_properties.hpp b/src/mbgl/style/layers/line_layer_properties.hpp
index aeaf51698a..5fd349d38b 100644
--- a/src/mbgl/style/layers/line_layer_properties.hpp
+++ b/src/mbgl/style/layers/line_layer_properties.hpp
@@ -72,6 +72,9 @@ struct LinePattern : CrossFadedPaintProperty<std::string> {
static std::string defaultValue() { return ""; }
};
+struct LineGradient : ColorRampProperty {
+};
+
class LineLayoutProperties : public Properties<
LineCap,
LineJoin,
@@ -89,7 +92,8 @@ class LinePaintProperties : public Properties<
LineOffset,
LineBlur,
LineDasharray,
- LinePattern
+ LinePattern,
+ LineGradient
> {};
} // namespace style