summaryrefslogtreecommitdiff
path: root/src/mbgl/style/layers/hillshade_layer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/layers/hillshade_layer.cpp')
-rw-r--r--src/mbgl/style/layers/hillshade_layer.cpp215
1 files changed, 215 insertions, 0 deletions
diff --git a/src/mbgl/style/layers/hillshade_layer.cpp b/src/mbgl/style/layers/hillshade_layer.cpp
index e352ae090c..aed49f6441 100644
--- a/src/mbgl/style/layers/hillshade_layer.cpp
+++ b/src/mbgl/style/layers/hillshade_layer.cpp
@@ -3,6 +3,13 @@
#include <mbgl/style/layers/hillshade_layer.hpp>
#include <mbgl/style/layers/hillshade_layer_impl.hpp>
#include <mbgl/style/layer_observer.hpp>
+#include <mbgl/style/conversion/color_ramp_property_value.hpp>
+#include <mbgl/style/conversion/constant.hpp>
+#include <mbgl/style/conversion/property_value.hpp>
+#include <mbgl/style/conversion/transition_options.hpp>
+#include <mbgl/style/conversion/json.hpp>
+#include <mbgl/style/conversion_impl.hpp>
+#include <mbgl/util/fnv_hash.hpp>
namespace mbgl {
namespace style {
@@ -236,5 +243,213 @@ TransitionOptions HillshadeLayer::getHillshadeAccentColorTransition() const {
return impl().paint.template get<HillshadeAccentColor>().options;
}
+using namespace conversion;
+
+optional<Error> HillshadeLayer::setPaintProperty(const std::string& name, const Convertible& value) {
+ enum class Property {
+ Unknown,
+ HillshadeIlluminationDirection,
+ HillshadeIlluminationAnchor,
+ HillshadeExaggeration,
+ HillshadeShadowColor,
+ HillshadeHighlightColor,
+ HillshadeAccentColor,
+ HillshadeIlluminationDirectionTransition,
+ HillshadeIlluminationAnchorTransition,
+ HillshadeExaggerationTransition,
+ HillshadeShadowColorTransition,
+ HillshadeHighlightColorTransition,
+ HillshadeAccentColorTransition,
+ };
+
+ Property property = Property::Unknown;
+ switch (util::hashFNV1a(name.c_str())) {
+ case util::hashFNV1a("hillshade-illumination-direction"):
+ if (name == "hillshade-illumination-direction") {
+ property = Property::HillshadeIlluminationDirection;
+ }
+ break;
+ case util::hashFNV1a("hillshade-illumination-direction-transition"):
+ if (name == "hillshade-illumination-direction-transition") {
+ property = Property::HillshadeIlluminationDirectionTransition;
+ }
+ break;
+ case util::hashFNV1a("hillshade-illumination-anchor"):
+ if (name == "hillshade-illumination-anchor") {
+ property = Property::HillshadeIlluminationAnchor;
+ }
+ break;
+ case util::hashFNV1a("hillshade-illumination-anchor-transition"):
+ if (name == "hillshade-illumination-anchor-transition") {
+ property = Property::HillshadeIlluminationAnchorTransition;
+ }
+ break;
+ case util::hashFNV1a("hillshade-exaggeration"):
+ if (name == "hillshade-exaggeration") {
+ property = Property::HillshadeExaggeration;
+ }
+ break;
+ case util::hashFNV1a("hillshade-exaggeration-transition"):
+ if (name == "hillshade-exaggeration-transition") {
+ property = Property::HillshadeExaggerationTransition;
+ }
+ break;
+ case util::hashFNV1a("hillshade-shadow-color"):
+ if (name == "hillshade-shadow-color") {
+ property = Property::HillshadeShadowColor;
+ }
+ break;
+ case util::hashFNV1a("hillshade-shadow-color-transition"):
+ if (name == "hillshade-shadow-color-transition") {
+ property = Property::HillshadeShadowColorTransition;
+ }
+ break;
+ case util::hashFNV1a("hillshade-highlight-color"):
+ if (name == "hillshade-highlight-color") {
+ property = Property::HillshadeHighlightColor;
+ }
+ break;
+ case util::hashFNV1a("hillshade-highlight-color-transition"):
+ if (name == "hillshade-highlight-color-transition") {
+ property = Property::HillshadeHighlightColorTransition;
+ }
+ break;
+ case util::hashFNV1a("hillshade-accent-color"):
+ if (name == "hillshade-accent-color") {
+ property = Property::HillshadeAccentColor;
+ }
+ break;
+ case util::hashFNV1a("hillshade-accent-color-transition"):
+ if (name == "hillshade-accent-color-transition") {
+ property = Property::HillshadeAccentColorTransition;
+ }
+ break;
+
+ }
+
+ if (property == Property::Unknown) {
+ return Error { "layer doesn't support this property" };
+ }
+
+
+ if (property == Property::HillshadeIlluminationDirection || property == Property::HillshadeExaggeration) {
+ Error error;
+ optional<PropertyValue<float>> typedValue = convert<PropertyValue<float>>(value, error, false, false);
+ if (!typedValue) {
+ return error;
+ }
+
+ if (property == Property::HillshadeIlluminationDirection) {
+ setHillshadeIlluminationDirection(*typedValue);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeExaggeration) {
+ setHillshadeExaggeration(*typedValue);
+ return nullopt;
+ }
+
+ }
+
+ if (property == Property::HillshadeIlluminationAnchor) {
+ Error error;
+ optional<PropertyValue<HillshadeIlluminationAnchorType>> typedValue = convert<PropertyValue<HillshadeIlluminationAnchorType>>(value, error, false, false);
+ if (!typedValue) {
+ return error;
+ }
+
+ setHillshadeIlluminationAnchor(*typedValue);
+ return nullopt;
+
+ }
+
+ if (property == Property::HillshadeShadowColor || property == Property::HillshadeHighlightColor || property == Property::HillshadeAccentColor) {
+ Error error;
+ optional<PropertyValue<Color>> typedValue = convert<PropertyValue<Color>>(value, error, false, false);
+ if (!typedValue) {
+ return error;
+ }
+
+ if (property == Property::HillshadeShadowColor) {
+ setHillshadeShadowColor(*typedValue);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeHighlightColor) {
+ setHillshadeHighlightColor(*typedValue);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeAccentColor) {
+ setHillshadeAccentColor(*typedValue);
+ return nullopt;
+ }
+
+ }
+
+
+ Error error;
+ optional<TransitionOptions> transition = convert<TransitionOptions>(value, error);
+ if (!transition) {
+ return error;
+ }
+
+ if (property == Property::HillshadeIlluminationDirectionTransition) {
+ setHillshadeIlluminationDirectionTransition(*transition);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeIlluminationAnchorTransition) {
+ setHillshadeIlluminationAnchorTransition(*transition);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeExaggerationTransition) {
+ setHillshadeExaggerationTransition(*transition);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeShadowColorTransition) {
+ setHillshadeShadowColorTransition(*transition);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeHighlightColorTransition) {
+ setHillshadeHighlightColorTransition(*transition);
+ return nullopt;
+ }
+
+ if (property == Property::HillshadeAccentColorTransition) {
+ setHillshadeAccentColorTransition(*transition);
+ return nullopt;
+ }
+
+
+ return Error { "layer doesn't support this property" };
+}
+
+optional<Error> HillshadeLayer::setLayoutProperty(const std::string& name, const Convertible& value) {
+ if (name == "visibility") {
+ return Layer::setVisibility(value);
+ }
+
+ enum class Property {
+ Unknown,
+ };
+
+ Property property = Property::Unknown;
+ switch (util::hashFNV1a(name.c_str())) {
+
+ }
+
+ if (property == Property::Unknown) {
+ return Error { "layer doesn't support this property" };
+ }
+
+
+
+ return Error { "layer doesn't support this property" };
+}
+
} // namespace style
} // namespace mbgl