summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/java/android/graphics/Typeface.java28
-rw-r--r--graphics/java/android/graphics/fonts/SystemFonts.java13
-rw-r--r--libs/hwui/jni/Typeface.cpp26
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 },