FTFactory.java: Fonts loaded by Pango are never registered and always return <null>

Maurice info at cuhka.com
Thu Mar 3 15:43:14 UTC 2016


Hmm....  I think I have to agree with you... you are right. Commenting 
it in didn't give a compiler or linkage error, and it made it work. I'm 
happy at the moment and tired of the debugging process, but I'll give it 
more thought later.

Op 03-03-16 om 16:36 schreef Mario Torre:
> 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