FTFactory.java: Fonts loaded by Pango are never registered and always return <null>
Maurice
info at cuhka.com
Thu Mar 3 13:48:27 UTC 2016
At the moment the embedded environment I'm using is not able to use
downloaded or external supplied fonts. I've traced through the system
and found that it looks like it fails in pango.c FcConfigAppFontAddFile,
at least OSPango.FcConfigAppFontAddFile returns false, thus propagating
a null all the way up.
Checking the pango.c file I noticed something very interesting:
JNIEXPORT jboolean JNICALL OS_NATIVE(FcConfigAppFontAddFile)
(JNIEnv *env, jclass that, jlong arg0, jstring arg1)
{
static void *fp = NULL;
if (!fp) {
void* handle = dlopen(LIB_FONTCONFIG, RTLD_LAZY);
if (handle) fp = dlsym(handle, "FcConfigAppFontAddFile");
}
jboolean rc = 0;
if (arg1) {
const char *text = (*env)->GetStringUTFChars(env, arg1, NULL);
if (text) {
// rc = (jboolean)FcConfigAppFontAddFile(arg0, text);
if (fp) {
rc = (jboolean)((jboolean (*)(jlong, const char
*))fp)(arg0, text);
}
(*env)->ReleaseStringUTFChars(env, arg1, text);
}
}
return rc;
}
Yes, you see it correctly! The line that actually should register the
font with pango is commented out! I removed the comment, but still the
result is false. I then overruled the return code in FTFactory.java
registerEmbeddedFont to be always true after it has called the native
function, and voilà, there are my external fonts.
What a journey.... :-)
Maurice.
More information about the openjfx-dev
mailing list