Loading graphics/java/android/graphics/Typeface.java +13 −15 Original line number Diff line number Diff line Loading @@ -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)); } } Loading Loading @@ -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)); } /** Loading @@ -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)); } Loading Loading @@ -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 Loading Loading @@ -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 Loading graphics/java/android/graphics/fonts/SystemFonts.java +0 −13 Original line number Diff line number Diff line Loading @@ -66,19 +66,6 @@ public final class SystemFonts { return set; } /** * 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. * Loading libs/hwui/jni/Typeface.cpp +20 −6 Original line number Diff line number Diff line Loading @@ -94,14 +94,28 @@ 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; 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)); } Loading Loading @@ -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 }, Loading Loading
graphics/java/android/graphics/Typeface.java +13 −15 Original line number Diff line number Diff line Loading @@ -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)); } } Loading Loading @@ -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)); } /** Loading @@ -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)); } Loading Loading @@ -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 Loading Loading @@ -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 Loading
graphics/java/android/graphics/fonts/SystemFonts.java +0 −13 Original line number Diff line number Diff line Loading @@ -66,19 +66,6 @@ public final class SystemFonts { return set; } /** * 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. * Loading
libs/hwui/jni/Typeface.cpp +20 −6 Original line number Diff line number Diff line Loading @@ -94,14 +94,28 @@ 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; 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)); } Loading Loading @@ -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 }, Loading