Merge "Pass custom fallback info to minikin"

This commit is contained in:
TreeHugger Robot
2018-11-07 09:01:42 +00:00
committed by Android (Google) Code Review
4 changed files with 13 additions and 9 deletions

View File

@@ -83,7 +83,8 @@ static jlong FontFamily_create(jlong builderPtr) {
return 0;
}
std::shared_ptr<minikin::FontFamily> family = std::make_shared<minikin::FontFamily>(
builder->langId, builder->variant, std::move(builder->fonts));
builder->langId, builder->variant, std::move(builder->fonts),
true /* isCustomFallback */);
if (family->getCoverage().length() == 0) {
return 0;
}

View File

@@ -57,7 +57,7 @@ static void FontFamily_Builder_addFont(jlong builderPtr, jlong fontPtr) {
// Regular JNI
static jlong FontFamily_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr,
jstring langTags, jint variant) {
jstring langTags, jint variant, jboolean isCustomFallback) {
std::unique_ptr<NativeFamilyBuilder> builder(toBuilder(builderPtr));
uint32_t localeId;
if (langTags == nullptr) {
@@ -67,7 +67,8 @@ static jlong FontFamily_Builder_build(JNIEnv* env, jobject clazz, jlong builderP
localeId = minikin::registerLocaleList(str.c_str());
}
std::shared_ptr<minikin::FontFamily> family = std::make_shared<minikin::FontFamily>(
localeId, static_cast<minikin::FamilyVariant>(variant), std::move(builder->fonts));
localeId, static_cast<minikin::FamilyVariant>(variant), std::move(builder->fonts),
isCustomFallback);
if (family->getCoverage().length() == 0) {
// No coverage means minikin rejected given font for some reasons.
jniThrowException(env, "java/lang/IllegalArgumentException",
@@ -87,7 +88,7 @@ static jlong FontFamily_Builder_GetReleaseFunc() {
static const JNINativeMethod gFontFamilyBuilderMethods[] = {
{ "nInitBuilder", "()J", (void*) FontFamily_Builder_initBuilder },
{ "nAddFont", "(JJ)V", (void*) FontFamily_Builder_addFont },
{ "nBuild", "(JLjava/lang/String;I)J", (void*) FontFamily_Builder_build },
{ "nBuild", "(JLjava/lang/String;IZ)J", (void*) FontFamily_Builder_build },
{ "nGetReleaseNativeFamily", "()J", (void*) FontFamily_Builder_GetReleaseFunc },
};

View File

@@ -108,16 +108,17 @@ public final class FontFamily {
* @return a font family
*/
public @NonNull FontFamily build() {
return build("", FontConfig.Family.VARIANT_DEFAULT);
return build("", FontConfig.Family.VARIANT_DEFAULT, true /* isCustomFallback */);
}
/** @hide */
public @NonNull FontFamily build(@NonNull String langTags, int variant) {
public @NonNull FontFamily build(@NonNull String langTags, int variant,
boolean isCustomFallback) {
final long builderPtr = nInitBuilder();
for (int i = 0; i < mFonts.size(); ++i) {
nAddFont(builderPtr, mFonts.get(i).getNativePtr());
}
final long ptr = nBuild(builderPtr, langTags, variant);
final long ptr = nBuild(builderPtr, langTags, variant, isCustomFallback);
final FontFamily family = new FontFamily(mFonts, ptr);
sFamilyRegistory.registerNativeAllocation(family, ptr);
return family;
@@ -130,7 +131,8 @@ public final class FontFamily {
private static native long nInitBuilder();
@CriticalNative
private static native void nAddFont(long builderPtr, long fontPtr);
private static native long nBuild(long builderPtr, String langTags, int variant);
private static native long nBuild(long builderPtr, String langTags, int variant,
boolean isCustomFallback);
@CriticalNative
private static native long nGetReleaseNativeFamily();
}

View File

@@ -208,7 +208,7 @@ public final class SystemFonts {
b.addFont(font);
}
}
return b == null ? null : b.build(languageTags, variant);
return b == null ? null : b.build(languageTags, variant, false /* isCustomFallback */);
}
private static void appendNamedFamily(@NonNull FontConfig.Family xmlFamily,