FTFactory.java: Fonts loaded by Pango are never registered and always return <null>
Mario Torre
neugens at redhat.com
Thu Mar 3 15:36:58 UTC 2016
On Thu, Mar 3, 2016 at 2:48 PM, Maurice <info at cuhka.com> wrote:
> 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
Pointer to functions make me blind too, but If I'm not reading it
wrong, I think this is not a commented code call, it's meant to tell
what the code below it does (apparently, it made blind also the
author!):
FcConfigAppFontAddFile is dloaded into fp, so this totally
incomprehensible line:
((jboolean (*)(jlong, const char *))fp)(arg0, text);
it's just casting fp to a function that returns a jboolean and takes a
jlong and a const char array as argument, hence it becomes again:
(jboolean)FcConfigAppFontAddFile(arg0, text);
Cheers,
Mario
More information about the openjfx-dev
mailing list