Merge "Remove SystemFonts#getSystemFallback and use Typeface instead for fallback"
This commit is contained in:
committed by
Android (Google) Code Review
commit
d6b491aafb
@@ -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
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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 },
|
||||
|
||||
Reference in New Issue
Block a user