Merge "Remove SystemFonts#getSystemFallback and use Typeface instead for fallback"

This commit is contained in:
TreeHugger Robot
2020-11-20 20:54:27 +00:00
committed by Android (Google) Code Review
3 changed files with 33 additions and 34 deletions

View File

@@ -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

View File

@@ -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.
*

View File

@@ -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 },