From 0bba794e98a6fd8d2da1065c255bbce38a45f754 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Tue, 20 Nov 2018 13:46:26 -0800 Subject: [android] Expose "local ideograph font family" in MapSnapshotter::Options Use local glyph generation in test app's MapSnapshotterActivity. --- .../mapboxsdk/snapshotter/MapSnapshotter.java | 30 ++++++++++++++++++++-- .../activity/snapshot/MapSnapshotterActivity.java | 3 ++- .../android/src/snapshotter/map_snapshotter.cpp | 10 +++++--- .../android/src/snapshotter/map_snapshotter.hpp | 3 ++- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/snapshotter/MapSnapshotter.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/snapshotter/MapSnapshotter.java index a4f1f2e751..93b7dd9260 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/snapshotter/MapSnapshotter.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/snapshotter/MapSnapshotter.java @@ -95,6 +95,7 @@ public class MapSnapshotter { private LatLngBounds region; private CameraPosition cameraPosition; private boolean showLogo = true; + private String localIdeographFontFamily; /** * @param width the width of the image @@ -171,6 +172,22 @@ public class MapSnapshotter { return this; } + /** + * Set the font family for generating glyphs locally for ideographs in the 'CJK Unified Ideographs' + * and 'Hangul Syllables' ranges. + *

+ * The font family argument is passed to {@link android.graphics.Typeface#create(String, int)}. + * Default system fonts are defined in '/system/etc/fonts.xml' + * + * @param fontFamily font family for local ideograph generation. + * @return the mutated {@link Options} + */ + @NonNull + public Options withLocalIdeographFontFamily(String fontFamily) { + this.localIdeographFontFamily = fontFamily; + return this; + } + /** * @return the width of the image */ @@ -214,6 +231,14 @@ public class MapSnapshotter { public CameraPosition getCameraPosition() { return cameraPosition; } + + /** + * @return the font family used for locally generating ideographs + */ + public String getLocalIdeographFontFamily() { + return localIdeographFontFamily; + } + } /** @@ -231,7 +256,7 @@ public class MapSnapshotter { nativeInitialize(this, fileSource, options.pixelRatio, options.width, options.height, options.styleUrl, options.styleJson, options.region, options.cameraPosition, - options.showLogo, programCacheDir); + options.showLogo, programCacheDir, options.localIdeographFontFamily); } /** @@ -513,7 +538,8 @@ public class MapSnapshotter { FileSource fileSource, float pixelRatio, int width, int height, String styleUrl, String styleJson, LatLngBounds region, CameraPosition position, - boolean showLogo, String programCacheDir); + boolean showLogo, String programCacheDir, + String localIdeographFontFamily); @Keep protected native void nativeStart(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java index aadf021a89..9f1e7b9956 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java @@ -68,7 +68,8 @@ public class MapSnapshotterActivity extends AppCompatActivity { .withPixelRatio(1) // Optionally the style - .withStyle((column + row) % 2 == 0 ? Style.MAPBOX_STREETS : Style.DARK); + .withStyle((column + row) % 2 == 0 ? Style.MAPBOX_STREETS : Style.DARK) + .withLocalIdeographFontFamily("sans-serif"); // Optionally the visible region if (row % 2 == 0) { diff --git a/platform/android/src/snapshotter/map_snapshotter.cpp b/platform/android/src/snapshotter/map_snapshotter.cpp index e2e01f4e38..a5f44a1d4c 100644 --- a/platform/android/src/snapshotter/map_snapshotter.cpp +++ b/platform/android/src/snapshotter/map_snapshotter.cpp @@ -24,7 +24,8 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, const jni::Object& region, const jni::Object& position, jni::jboolean _showLogo, - const jni::String& _programCacheDir) + const jni::String& _programCacheDir, + const jni::String& _localIdeographFontFamily) : javaPeer(_env, _obj) , pixelRatio(_pixelRatio) , threadPool(sharedThreadPool()) { @@ -65,7 +66,10 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, pixelRatio, cameraOptions, bounds, - jni::Make(_env, _programCacheDir)); + jni::Make(_env, _programCacheDir), + _localIdeographFontFamily ? + jni::Make(_env, _localIdeographFontFamily) : + optional{}); } @@ -156,7 +160,7 @@ void MapSnapshotter::registerNative(jni::JNIEnv& env) { // Register the peer jni::RegisterNativePeer(env, javaClass, "nativePtr", - jni::MakePeer&, const jni::Object&, jni::jfloat, jni::jint, jni::jint, const jni::String&, const jni::String&, const jni::Object&, const jni::Object&, jni::jboolean, const jni::String&>, + jni::MakePeer&, const jni::Object&, jni::jfloat, jni::jint, jni::jint, const jni::String&, const jni::String&, const jni::Object&, const jni::Object&, jni::jboolean, const jni::String&, const jni::String&>, "nativeInitialize", "finalize", METHOD(&MapSnapshotter::setStyleUrl, "setStyleUrl"), diff --git a/platform/android/src/snapshotter/map_snapshotter.hpp b/platform/android/src/snapshotter/map_snapshotter.hpp index e20acf4f1f..e8c0885ff1 100644 --- a/platform/android/src/snapshotter/map_snapshotter.hpp +++ b/platform/android/src/snapshotter/map_snapshotter.hpp @@ -35,7 +35,8 @@ public: const jni::Object& region, const jni::Object& position, jni::jboolean showLogo, - const jni::String& programCacheDir); + const jni::String& programCacheDir, + const jni::String& localIdeographFontFamily); ~MapSnapshotter(); -- cgit v1.2.1