diff options
author | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-06-18 14:43:13 +0300 |
---|---|---|
committer | Alexander Shalamov <alexander.shalamov@mapbox.com> | 2019-08-13 13:32:56 +0300 |
commit | dad43ba8fcd04698230fefa9c6af93931f6c10f3 (patch) | |
tree | 3af84d15a40193e5f23870dd56135324e233e670 /platform | |
parent | e9ca844d666619886141d7dd8ef943e86f4f55e4 (diff) | |
download | qtlocation-mapboxgl-dad43ba8fcd04698230fefa9c6af93931f6c10f3.tar.gz |
[android] Android bindings for new 'text-writing-mode' layout property
Diffstat (limited to 'platform')
7 files changed, 88 insertions, 1 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java index 8ffcf6ddb8..52ed6c23ae 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java @@ -669,6 +669,27 @@ public final class Property { @Retention(RetentionPolicy.SOURCE) public @interface ANCHOR {} + // TEXT_WRITING_MODE: The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant. + + /** + * If a text's language supports horizontal writing mode, symbols with point placement would be laid out horizontally. + */ + public static final String TEXT_WRITING_MODE_HORIZONTAL = "horizontal"; + /** + * If a text's language supports vertical writing mode, symbols with point placement would be laid out vertically. + */ + public static final String TEXT_WRITING_MODE_VERTICAL = "vertical"; + + /** + * The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant. + */ + @StringDef({ + TEXT_WRITING_MODE_HORIZONTAL, + TEXT_WRITING_MODE_VERTICAL, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface TEXT_WRITING_MODE {} + private Property() { } 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 3f2771a307..82085b171c 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 @@ -2376,6 +2376,26 @@ public class PropertyFactory { } /** + * The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant. + * + * @param value a String[] value + * @return property wrapper around String[] + */ + public static PropertyValue<String[]> textWritingMode(String[] value) { + return new LayoutPropertyValue<>("text-writing-mode", value); + } + + /** + * The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant. + * + * @param value a String[] value + * @return property wrapper around String[] + */ + public static PropertyValue<Expression> textWritingMode(Expression value) { + return new LayoutPropertyValue<>("text-writing-mode", value); + } + + /** * Rotates the text clockwise. * * @param value a Float value diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java index 1d8bad7e8e..5ab47def4e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/SymbolLayer.java @@ -530,6 +530,18 @@ public class SymbolLayer extends Layer { } /** + * Get the TextWritingMode property + * + * @return property wrapper value around String[] + */ + @NonNull + @SuppressWarnings("unchecked") + public PropertyValue<String[]> getTextWritingMode() { + checkThread(); + return (PropertyValue<String[]>) new PropertyValue("text-writing-mode", nativeGetTextWritingMode()); + } + + /** * Get the TextRotate property * * @return property wrapper value around Float @@ -1243,6 +1255,10 @@ public class SymbolLayer extends Layer { @NonNull @Keep + private native Object nativeGetTextWritingMode(); + + @NonNull + @Keep private native Object nativeGetTextRotate(); @NonNull diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java index 60e305d607..c65e37019b 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java @@ -670,6 +670,19 @@ public class SymbolLayerTest extends BaseLayerTest { @Test @UiThreadTest + public void testTextWritingModeAsConstant() { + Timber.i("text-writing-mode"); + assertNotNull(layer); + assertNull(layer.getTextWritingMode().getValue()); + + // Set and Get + String[] propertyValue = new String[0]; + layer.setProperties(textWritingMode(propertyValue)); + assertEquals(layer.getTextWritingMode().getValue(), propertyValue); + } + + @Test + @UiThreadTest public void testTextRotateAsConstant() { Timber.i("text-rotate"); assertNotNull(layer); diff --git a/platform/android/scripts/generate-style-code.js b/platform/android/scripts/generate-style-code.js index 8c34113de1..fa814f89af 100755 --- a/platform/android/scripts/generate-style-code.js +++ b/platform/android/scripts/generate-style-code.js @@ -49,10 +49,19 @@ var layers = Object.keys(spec.layer.type.values).map((type) => { }); // Process all layer properties +const uniqueArrayEnum = (prop, enums) => { + if (prop.value !== 'enum') return false; + const enumsEqual = (val1, val2) => val1.length === val1.length && val1.every((val, i) => val === val2[i]); + return enums.filter(e => enumsEqual(Object.keys(prop.values).sort(), Object.keys(e.values).sort())).length == 0; +}; + const layoutProperties = _(layers).map('layoutProperties').flatten().value(); const paintProperties = _(layers).map('paintProperties').flatten().value(); const allProperties = _(layoutProperties).union(paintProperties).union(lightProperties).value(); -const enumProperties = _(allProperties).filter({'type': 'enum'}).value(); +let allEnumProperties = _(allProperties).filter({'type': 'enum'}).value(); +const uniqueArrayEnumProperties = _(allProperties).filter({'type': 'array'}).filter(prop => uniqueArrayEnum(prop, allEnumProperties)).value(); +const enumProperties = _(allEnumProperties).union(uniqueArrayEnumProperties).value(); + global.propertyType = function propertyType(property) { switch (property.type) { diff --git a/platform/android/src/style/layers/symbol_layer.cpp b/platform/android/src/style/layers/symbol_layer.cpp index fb06255913..53b35a9a13 100644 --- a/platform/android/src/style/layers/symbol_layer.cpp +++ b/platform/android/src/style/layers/symbol_layer.cpp @@ -201,6 +201,11 @@ namespace android { return std::move(*convert<jni::Local<jni::Object<>>>(env, toSymbolLayer(layer).getTextMaxAngle())); } + jni::Local<jni::Object<>> SymbolLayer::getTextWritingMode(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + return std::move(*convert<jni::Local<jni::Object<>>>(env, toSymbolLayer(layer).getTextWritingMode())); + } + jni::Local<jni::Object<>> SymbolLayer::getTextRotate(jni::JNIEnv& env) { using namespace mbgl::android::conversion; return std::move(*convert<jni::Local<jni::Object<>>>(env, toSymbolLayer(layer).getTextRotate())); @@ -534,6 +539,7 @@ namespace android { METHOD(&SymbolLayer::getTextVariableAnchor, "nativeGetTextVariableAnchor"), METHOD(&SymbolLayer::getTextAnchor, "nativeGetTextAnchor"), METHOD(&SymbolLayer::getTextMaxAngle, "nativeGetTextMaxAngle"), + METHOD(&SymbolLayer::getTextWritingMode, "nativeGetTextWritingMode"), METHOD(&SymbolLayer::getTextRotate, "nativeGetTextRotate"), METHOD(&SymbolLayer::getTextPadding, "nativeGetTextPadding"), METHOD(&SymbolLayer::getTextKeepUpright, "nativeGetTextKeepUpright"), diff --git a/platform/android/src/style/layers/symbol_layer.hpp b/platform/android/src/style/layers/symbol_layer.hpp index d2ced89191..9e494e678a 100644 --- a/platform/android/src/style/layers/symbol_layer.hpp +++ b/platform/android/src/style/layers/symbol_layer.hpp @@ -90,6 +90,8 @@ public: jni::Local<jni::Object<jni::ObjectTag>> getTextMaxAngle(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextWritingMode(jni::JNIEnv&); + jni::Local<jni::Object<jni::ObjectTag>> getTextRotate(jni::JNIEnv&); jni::Local<jni::Object<jni::ObjectTag>> getTextPadding(jni::JNIEnv&); |