diff options
| -rw-r--r-- | graphics/java/android/graphics/Typeface.java | 28 | ||||
| -rw-r--r-- | graphics/java/android/graphics/fonts/SystemFonts.java | 13 | ||||
| -rw-r--r-- | libs/hwui/jni/Typeface.cpp | 26 |
3 files changed, 33 insertions, 34 deletions
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 5743df5216be..9fb4ed59e81f 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -808,18 +808,16 @@ public class Typeface { */ public @NonNull Typeface build() { final int userFallbackSize = mFamilies.size(); - final FontFamily[] fallback = SystemFonts.getSystemFallback(mFallbackName); - final long[] ptrArray = new long[fallback.length + userFallbackSize]; + final Typeface fallbackTypeface = getSystemDefaultTypeface(mFallbackName); + final long[] ptrArray = new long[userFallbackSize]; for (int i = 0; i < userFallbackSize; ++i) { ptrArray[i] = mFamilies.get(i).getNativePtr(); } - for (int i = 0; i < fallback.length; ++i) { - ptrArray[i + userFallbackSize] = fallback[i].getNativePtr(); - } final int weight = mStyle == null ? 400 : mStyle.getWeight(); final int italic = (mStyle == null || mStyle.getSlant() == FontStyle.FONT_SLANT_UPRIGHT) ? 0 : 1; - return new Typeface(nativeCreateFromArray(ptrArray, weight, italic)); + return new Typeface(nativeCreateFromArray( + ptrArray, fallbackTypeface.native_instance, weight, italic)); } } @@ -1056,7 +1054,8 @@ public class Typeface { ptrArray[i] = families[i].mNativePtr; } return new Typeface(nativeCreateFromArray( - ptrArray, RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); + ptrArray, 0, RESOLVE_BY_FONT_TABLE, + RESOLVE_BY_FONT_TABLE)); } /** @@ -1069,7 +1068,7 @@ public class Typeface { for (int i = 0; i < families.length; ++i) { ptrArray[i] = families[i].getNativePtr(); } - return new Typeface(nativeCreateFromArray(ptrArray, + return new Typeface(nativeCreateFromArray(ptrArray, 0, RESOLVE_BY_FONT_TABLE, RESOLVE_BY_FONT_TABLE)); } @@ -1104,15 +1103,13 @@ public class Typeface { @Deprecated private static Typeface createFromFamiliesWithDefault(android.graphics.FontFamily[] families, String fallbackName, int weight, int italic) { - android.graphics.fonts.FontFamily[] fallback = SystemFonts.getSystemFallback(fallbackName); - long[] ptrArray = new long[families.length + fallback.length]; + final Typeface fallbackTypeface = getSystemDefaultTypeface(fallbackName); + long[] ptrArray = new long[families.length]; for (int i = 0; i < families.length; i++) { ptrArray[i] = families[i].mNativePtr; } - for (int i = 0; i < fallback.length; i++) { - ptrArray[i + families.length] = fallback[i].getNativePtr(); - } - return new Typeface(nativeCreateFromArray(ptrArray, weight, italic)); + return new Typeface(nativeCreateFromArray( + ptrArray, fallbackTypeface.native_instance, weight, italic)); } // don't allow clients to call this directly @@ -1350,7 +1347,8 @@ public class Typeface { @UnsupportedAppUsage private static native long nativeCreateWeightAlias(long native_instance, int weight); @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) - private static native long nativeCreateFromArray(long[] familyArray, int weight, int italic); + private static native long nativeCreateFromArray( + long[] familyArray, long fallbackTypeface, int weight, int italic); private static native int[] nativeGetSupportedAxes(long native_instance); @CriticalNative diff --git a/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java index 95a8417b6f7f..95c470634518 100644 --- a/graphics/java/android/graphics/fonts/SystemFonts.java +++ b/graphics/java/android/graphics/fonts/SystemFonts.java @@ -67,19 +67,6 @@ public final class SystemFonts { } /** - * Returns fallback list for the given family name. - * - * If no fallback found for the given family name, returns fallback for the default family. - * - * @param familyName family name, e.g. "serif" - * @hide - */ - public static @NonNull FontFamily[] getSystemFallback(@Nullable String familyName) { - final FontFamily[] families = sSystemFallbackMap.get(familyName); - return families == null ? sSystemFallbackMap.get(DEFAULT_FAMILY) : families; - } - - /** * Returns raw system fallback map. * * This method is intended to be used only by Typeface static initializer. diff --git a/libs/hwui/jni/Typeface.cpp b/libs/hwui/jni/Typeface.cpp index b88ffa6e79b8..9e5b1fb17c01 100644 --- a/libs/hwui/jni/Typeface.cpp +++ b/libs/hwui/jni/Typeface.cpp @@ -94,13 +94,27 @@ static jint Typeface_getWeight(CRITICAL_JNI_PARAMS_COMMA jlong faceHandle) { } static jlong Typeface_createFromArray(JNIEnv *env, jobject, jlongArray familyArray, - int weight, int italic) { + jlong fallbackPtr, int weight, int italic) { ScopedLongArrayRO families(env, familyArray); std::vector<std::shared_ptr<minikin::FontFamily>> familyVec; - familyVec.reserve(families.size()); - for (size_t i = 0; i < families.size(); i++) { - FontFamilyWrapper* family = reinterpret_cast<FontFamilyWrapper*>(families[i]); - familyVec.emplace_back(family->family); + Typeface* typeface = (fallbackPtr == 0) ? nullptr : toTypeface(fallbackPtr); + if (typeface != nullptr) { + const std::vector<std::shared_ptr<minikin::FontFamily>>& fallbackFamilies = + toTypeface(fallbackPtr)->fFontCollection->getFamilies(); + familyVec.reserve(families.size() + fallbackFamilies.size()); + for (size_t i = 0; i < families.size(); i++) { + FontFamilyWrapper* family = reinterpret_cast<FontFamilyWrapper*>(families[i]); + familyVec.emplace_back(family->family); + } + for (size_t i = 0; i < fallbackFamilies.size(); i++) { + familyVec.emplace_back(fallbackFamilies[i]); + } + } else { + familyVec.reserve(families.size()); + for (size_t i = 0; i < families.size(); i++) { + FontFamilyWrapper* family = reinterpret_cast<FontFamilyWrapper*>(families[i]); + familyVec.emplace_back(family->family); + } } return toJLong(Typeface::createFromFamilies(std::move(familyVec), weight, italic)); } @@ -243,7 +257,7 @@ static const JNINativeMethod gTypefaceMethods[] = { { "nativeGetReleaseFunc", "()J", (void*)Typeface_getReleaseFunc }, { "nativeGetStyle", "(J)I", (void*)Typeface_getStyle }, { "nativeGetWeight", "(J)I", (void*)Typeface_getWeight }, - { "nativeCreateFromArray", "([JII)J", + { "nativeCreateFromArray", "([JJII)J", (void*)Typeface_createFromArray }, { "nativeSetDefault", "(J)V", (void*)Typeface_setDefault }, { "nativeGetSupportedAxes", "(J)[I", (void*)Typeface_getSupportedAxes }, |