summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
Diffstat (limited to 'platform')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java16
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java20
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java16
-rw-r--r--platform/android/src/style/layers/fill_extrusion_layer.cpp8
-rw-r--r--platform/android/src/style/layers/fill_extrusion_layer.hpp2
-rw-r--r--platform/darwin/scripts/style-spec-cocoa-conventions-v8.json3
-rw-r--r--platform/darwin/src/MGLFillExtrusionStyleLayer.h27
-rw-r--r--platform/darwin/src/MGLFillExtrusionStyleLayer.mm25
-rw-r--r--platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm45
-rw-r--r--platform/ios/docs/guides/For Style Authors.md1
-rw-r--r--platform/macos/docs/guides/For Style Authors.md1
11 files changed, 162 insertions, 2 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java
index fada0c483c..286a6e7ee4 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/FillExtrusionLayer.java
@@ -370,6 +370,18 @@ public class FillExtrusionLayer extends Layer {
nativeSetFillExtrusionBaseTransition(options.getDuration(), options.getDelay());
}
+ /**
+ * Get the FillExtrusionVerticalGradient property
+ *
+ * @return property wrapper value around Boolean
+ */
+ @NonNull
+ @SuppressWarnings("unchecked")
+ public PropertyValue<Boolean> getFillExtrusionVerticalGradient() {
+ checkThread();
+ return (PropertyValue<Boolean>) new PropertyValue("fill-extrusion-vertical-gradient", nativeGetFillExtrusionVerticalGradient());
+ }
+
@NonNull
@Keep
private native Object nativeGetFillExtrusionOpacity();
@@ -440,6 +452,10 @@ public class FillExtrusionLayer extends Layer {
@Keep
private native void nativeSetFillExtrusionBaseTransition(long duration, long delay);
+ @NonNull
+ @Keep
+ private native Object nativeGetFillExtrusionVerticalGradient();
+
@Override
@Keep
protected native void finalize() throws Throwable;
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java
index ace5be3a82..51edca3002 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/PropertyFactory.java
@@ -1245,6 +1245,26 @@ public class PropertyFactory {
}
/**
+ * Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.
+ *
+ * @param value a Boolean value
+ * @return property wrapper around Boolean
+ */
+ public static PropertyValue<Boolean> fillExtrusionVerticalGradient(Boolean value) {
+ return new PaintPropertyValue<>("fill-extrusion-vertical-gradient", value);
+ }
+
+ /**
+ * Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.
+ *
+ * @param expression an expression statement
+ * @return property wrapper around an expression statement
+ */
+ public static PropertyValue<Expression> fillExtrusionVerticalGradient(Expression expression) {
+ return new PaintPropertyValue<>("fill-extrusion-vertical-gradient", expression);
+ }
+
+ /**
* The opacity at which the image will be drawn.
*
* @param value a Float value
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java
index 7ff8039e1a..1f0eb25291 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java
@@ -401,4 +401,20 @@ public class FillExtrusionLayerTest extends BaseActivityTest {
assertEquals(layer.getFillExtrusionBase().getExpression(), expression);
});
}
+
+ @Test
+ public void testFillExtrusionVerticalGradientAsConstant() {
+ validateTestSetup();
+ setupLayer();
+ Timber.i("fill-extrusion-vertical-gradient");
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ assertNotNull(layer);
+ assertNull(layer.getFillExtrusionVerticalGradient().getValue());
+
+ // Set and Get
+ Boolean propertyValue = true;
+ layer.setProperties(fillExtrusionVerticalGradient(propertyValue));
+ assertEquals(layer.getFillExtrusionVerticalGradient().getValue(), propertyValue);
+ });
+ }
}
diff --git a/platform/android/src/style/layers/fill_extrusion_layer.cpp b/platform/android/src/style/layers/fill_extrusion_layer.cpp
index 7767a900d0..ddfbd71544 100644
--- a/platform/android/src/style/layers/fill_extrusion_layer.cpp
+++ b/platform/android/src/style/layers/fill_extrusion_layer.cpp
@@ -154,6 +154,11 @@ namespace android {
toFillExtrusionLayer(layer).setFillExtrusionBaseTransition(options);
}
+ jni::Local<jni::Object<>> FillExtrusionLayer::getFillExtrusionVerticalGradient(jni::JNIEnv& env) {
+ using namespace mbgl::android::conversion;
+ return std::move(*convert<jni::Local<jni::Object<>>>(env, toFillExtrusionLayer(layer).getFillExtrusionVerticalGradient()));
+ }
+
// FillExtrusionJavaLayerPeerFactory
@@ -207,7 +212,8 @@ namespace android {
METHOD(&FillExtrusionLayer::getFillExtrusionHeight, "nativeGetFillExtrusionHeight"),
METHOD(&FillExtrusionLayer::getFillExtrusionBaseTransition, "nativeGetFillExtrusionBaseTransition"),
METHOD(&FillExtrusionLayer::setFillExtrusionBaseTransition, "nativeSetFillExtrusionBaseTransition"),
- METHOD(&FillExtrusionLayer::getFillExtrusionBase, "nativeGetFillExtrusionBase"));
+ METHOD(&FillExtrusionLayer::getFillExtrusionBase, "nativeGetFillExtrusionBase"),
+ METHOD(&FillExtrusionLayer::getFillExtrusionVerticalGradient, "nativeGetFillExtrusionVerticalGradient"));
}
} // namespace android
diff --git a/platform/android/src/style/layers/fill_extrusion_layer.hpp b/platform/android/src/style/layers/fill_extrusion_layer.hpp
index fe7204985c..2d41a189a9 100644
--- a/platform/android/src/style/layers/fill_extrusion_layer.hpp
+++ b/platform/android/src/style/layers/fill_extrusion_layer.hpp
@@ -51,6 +51,8 @@ public:
void setFillExtrusionBaseTransition(jni::JNIEnv&, jlong duration, jlong delay);
jni::Local<jni::Object<TransitionOptions>> getFillExtrusionBaseTransition(jni::JNIEnv&);
+ jni::Local<jni::Object<jni::ObjectTag>> getFillExtrusionVerticalGradient(jni::JNIEnv&);
+
}; // class FillExtrusionLayer
class FillExtrusionJavaLayerPeerFactory final : public JavaLayerPeerFactory, public mbgl::FillExtrusionLayerFactory {
diff --git a/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json b/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json
index dfc7d76a3c..ce313ddbb9 100644
--- a/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json
+++ b/platform/darwin/scripts/style-spec-cocoa-conventions-v8.json
@@ -32,7 +32,8 @@
},
"paint_fill-extrusion": {
"fill-extrusion-translate": "fill-extrusion-translation",
- "fill-extrusion-translate-anchor": "fill-extrusion-translation-anchor"
+ "fill-extrusion-translate-anchor": "fill-extrusion-translation-anchor",
+ "fill-extrusion-vertical-gradient": "fill-extrusion-has-vertical-gradient"
},
"paint_raster": {
"raster-brightness-min": "minimum-raster-brightness",
diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.h b/platform/darwin/src/MGLFillExtrusionStyleLayer.h
index 6e807c1b44..98eb6b3c20 100644
--- a/platform/darwin/src/MGLFillExtrusionStyleLayer.h
+++ b/platform/darwin/src/MGLFillExtrusionStyleLayer.h
@@ -164,6 +164,33 @@ MGL_EXPORT
@property (nonatomic) MGLTransition fillExtrusionColorTransition;
/**
+ Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If
+ true, sides will be shaded slightly darker farther down.
+
+ The default value of this property is an expression that evaluates to `YES`.
+ Set this property to `nil` to reset it to the default value.
+
+ This attribute corresponds to the <a
+ href="https://www.mapbox.com/mapbox-gl-style-spec/#paint-fill-extrusion-vertical-gradient"><code>fill-extrusion-vertical-gradient</code></a>
+ layout property in the Mapbox Style Specification.
+
+ You can set this property to an expression containing any of the following:
+
+ * Constant Boolean values
+ * Predefined functions, including mathematical and string operators
+ * Conditional expressions
+ * Variable assignments and references to assigned variables
+ * Step functions applied to the `$zoomLevel` variable
+
+ This property does not support applying interpolation functions to the
+ `$zoomLevel` variable or applying interpolation or step functions to feature
+ attributes.
+ */
+@property (nonatomic, null_resettable) NSExpression *fillExtrusionHasVerticalGradient;
+
+@property (nonatomic, null_resettable) NSExpression *fillExtrusionVerticalGradient __attribute__((unavailable("Use fillExtrusionHasVerticalGradient instead.")));
+
+/**
The height with which to extrude this layer.
This property is measured in meters.
diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm
index 03676a4ed5..e4e9c707ea 100644
--- a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm
+++ b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm
@@ -156,6 +156,31 @@ namespace mbgl {
return transition;
}
+- (void)setFillExtrusionHasVerticalGradient:(NSExpression *)fillExtrusionHasVerticalGradient {
+ MGLAssertStyleLayerIsValid();
+ MGLLogDebug(@"Setting fillExtrusionHasVerticalGradient: %@", fillExtrusionHasVerticalGradient);
+
+ auto mbglValue = MGLStyleValueTransformer<bool, NSNumber *>().toPropertyValue<mbgl::style::PropertyValue<bool>>(fillExtrusionHasVerticalGradient, false);
+ self.rawLayer->setFillExtrusionVerticalGradient(mbglValue);
+}
+
+- (NSExpression *)fillExtrusionHasVerticalGradient {
+ MGLAssertStyleLayerIsValid();
+
+ auto propertyValue = self.rawLayer->getFillExtrusionVerticalGradient();
+ if (propertyValue.isUndefined()) {
+ propertyValue = self.rawLayer->getDefaultFillExtrusionVerticalGradient();
+ }
+ return MGLStyleValueTransformer<bool, NSNumber *>().toExpression(propertyValue);
+}
+
+- (void)setFillExtrusionVerticalGradient:(NSExpression *)fillExtrusionVerticalGradient {
+}
+
+- (NSExpression *)fillExtrusionVerticalGradient {
+ return self.fillExtrusionHasVerticalGradient;
+}
+
- (void)setFillExtrusionHeight:(NSExpression *)fillExtrusionHeight {
MGLAssertStyleLayerIsValid();
MGLLogDebug(@"Setting fillExtrusionHeight: %@", fillExtrusionHeight);
diff --git a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm
index ecfa2134a0..357ee888bc 100644
--- a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm
+++ b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm
@@ -205,6 +205,50 @@
XCTAssertEqual(fillExtrusionColorTransition.duration, transitionTest.duration);
}
+ // fill-extrusion-vertical-gradient
+ {
+ XCTAssertTrue(rawLayer->getFillExtrusionVerticalGradient().isUndefined(),
+ @"fill-extrusion-vertical-gradient should be unset initially.");
+ NSExpression *defaultExpression = layer.fillExtrusionHasVerticalGradient;
+
+ NSExpression *constantExpression = [NSExpression expressionWithFormat:@"false"];
+ layer.fillExtrusionHasVerticalGradient = constantExpression;
+ mbgl::style::PropertyValue<bool> propertyValue = { false };
+ XCTAssertEqual(rawLayer->getFillExtrusionVerticalGradient(), propertyValue,
+ @"Setting fillExtrusionHasVerticalGradient to a constant value expression should update fill-extrusion-vertical-gradient.");
+ XCTAssertEqualObjects(layer.fillExtrusionHasVerticalGradient, constantExpression,
+ @"fillExtrusionHasVerticalGradient should round-trip constant value expressions.");
+
+ constantExpression = [NSExpression expressionWithFormat:@"false"];
+ NSExpression *functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:($zoomLevel, %@, %@)", constantExpression, @{@18: constantExpression}];
+ layer.fillExtrusionHasVerticalGradient = functionExpression;
+
+ {
+ using namespace mbgl::style::expression::dsl;
+ propertyValue = mbgl::style::PropertyExpression<bool>(
+ step(zoom(), literal(false), 18.0, literal(false))
+ );
+ }
+
+ XCTAssertEqual(rawLayer->getFillExtrusionVerticalGradient(), propertyValue,
+ @"Setting fillExtrusionHasVerticalGradient to a camera expression should update fill-extrusion-vertical-gradient.");
+ XCTAssertEqualObjects(layer.fillExtrusionHasVerticalGradient, functionExpression,
+ @"fillExtrusionHasVerticalGradient should round-trip camera expressions.");
+
+
+ layer.fillExtrusionHasVerticalGradient = nil;
+ XCTAssertTrue(rawLayer->getFillExtrusionVerticalGradient().isUndefined(),
+ @"Unsetting fillExtrusionHasVerticalGradient should return fill-extrusion-vertical-gradient to the default value.");
+ XCTAssertEqualObjects(layer.fillExtrusionHasVerticalGradient, defaultExpression,
+ @"fillExtrusionHasVerticalGradient should return the default value after being unset.");
+
+ functionExpression = [NSExpression expressionForKeyPath:@"bogus"];
+ XCTAssertThrowsSpecificNamed(layer.fillExtrusionHasVerticalGradient = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
+ functionExpression = [NSExpression expressionWithFormat:@"mgl_step:from:stops:(bogus, %@, %@)", constantExpression, @{@18: constantExpression}];
+ functionExpression = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", @{@10: functionExpression}];
+ XCTAssertThrowsSpecificNamed(layer.fillExtrusionHasVerticalGradient = functionExpression, NSException, NSInvalidArgumentException, @"MGLFillExtrusionLayer should raise an exception if a camera-data expression is applied to a property that does not support key paths to feature attributes.");
+ }
+
// fill-extrusion-height
{
XCTAssertTrue(rawLayer->getFillExtrusionHeight().isUndefined(),
@@ -481,6 +525,7 @@
- (void)testPropertyNames {
[self testPropertyName:@"fill-extrusion-base" isBoolean:NO];
[self testPropertyName:@"fill-extrusion-color" isBoolean:NO];
+ [self testPropertyName:@"fill-extrusion-has-vertical-gradient" isBoolean:YES];
[self testPropertyName:@"fill-extrusion-height" isBoolean:NO];
[self testPropertyName:@"fill-extrusion-opacity" isBoolean:NO];
[self testPropertyName:@"fill-extrusion-pattern" isBoolean:NO];
diff --git a/platform/ios/docs/guides/For Style Authors.md b/platform/ios/docs/guides/For Style Authors.md
index 23766e696a..72f326cc17 100644
--- a/platform/ios/docs/guides/For Style Authors.md
+++ b/platform/ios/docs/guides/For Style Authors.md
@@ -226,6 +226,7 @@ In style JSON | In Objective-C | In Swift
In style JSON | In Objective-C | In Swift
--------------|----------------|---------
+`fill-extrusion-vertical-gradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient`
`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation`
`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor`
diff --git a/platform/macos/docs/guides/For Style Authors.md b/platform/macos/docs/guides/For Style Authors.md
index 5c34c857b2..fdba68879c 100644
--- a/platform/macos/docs/guides/For Style Authors.md
+++ b/platform/macos/docs/guides/For Style Authors.md
@@ -213,6 +213,7 @@ In style JSON | In Objective-C | In Swift
In style JSON | In Objective-C | In Swift
--------------|----------------|---------
+`fill-extrusion-vertical-gradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient` | `MGLFillExtrusionStyleLayer.fillExtrusionHasVerticalGradient`
`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation`
`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor`