< prev index next >

modules/javafx.graphics/src/main/native-font/coretext.c

Print this page
rev 10066 : 8088205: [Mac] WebView renders icons instead of letters on some sites
rev 9951 : 8161705: Rename directories under modules to exactly match the module names
Reviewed-by: kcr, vadim

@@ -362,23 +362,10 @@
 fail:
     if (arg1 && lparg1) (*env)->ReleaseCharArrayElements(env, arg1, lparg1, 0);
     return rc;
 }
 
-JNIEXPORT jlong JNICALL OS_NATIVE(CTFontCreateWithName)
-    (JNIEnv *env, jclass that, jlong arg0, jdouble arg1, jobject arg2)
-{
-    CGAffineTransform _arg2, *lparg2=NULL;
-    jlong rc = 0;
-    if (arg2) if ((lparg2 = getCGAffineTransformFields(env, arg2, &_arg2)) == NULL) goto fail;
-    rc = (jlong)CTFontCreateWithName((CFStringRef)arg0, (CGFloat)arg1, (CGAffineTransform*)lparg2);
-fail:
-    /* In only */
-//    if (arg2 && lparg2) setCGAffineTransformFields(env, arg2, lparg2);
-    return rc;
-}
-
 JNIEXPORT void JNICALL OS_NATIVE(CFRelease)
     (JNIEnv *env, jclass that, jlong arg0)
 {
     CFRelease((CFTypeRef)arg0);
 }

@@ -677,10 +664,36 @@
     CFStringGetCharacters(stringRef, CFRangeMake(0, length), buffer);
     CFRelease(stringRef);
     return (*env)->NewString(env, (jchar *)buffer, length);
 }
 
+JNIEXPORT jlong JNICALL OS_NATIVE(CTFontCreate)
+    (JNIEnv *env, jclass that, jlong fileName, jlong psName, jdouble size, jobject matrix)
+{
+    CGAffineTransform transform, *transformPtr = NULL;
+    CTFontRef fontRef = NULL;
+
+    if (matrix) if ((transformPtr = getCGAffineTransformFields(env, matrix, &transform)) == NULL) goto fail;
+
+    CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)fileName, kCFURLPOSIXPathStyle, false);
+    CGDataProviderRef dataProvider = CGDataProviderCreateWithURL(url);
+    CGFontRef cgFont = CGFontCreateWithDataProvider(dataProvider);
+    if (cgFont) {
+        fontRef = CTFontCreateWithGraphicsFont(cgFont, (CGFloat)size, (CGAffineTransform*)transformPtr, 0);
+        CFRelease(cgFont);
+    } else {
+        // TTC files are supported by CGFontCreateWithDataProvider, fallback to CTFontCreateWithName.
+        fontRef = CTFontCreateWithName((CFStringRef)psName, (CGFloat)size, (CGAffineTransform*)transformPtr);
+    }
+    CFRelease(dataProvider);
+    CFRelease(url);
+fail:
+    /* In only */
+//    if (arg2 && lparg2) setCGAffineTransformFields(env, arg2, lparg2);
+    return (jlong)fontRef;
+}
+
 JNIEXPORT jbyteArray JNICALL OS_NATIVE(CGBitmapContextGetData)
     (JNIEnv *env, jclass that, jlong arg0, jint dstWidth, jint dstHeight, jint bpp)
 {
     jbyteArray result = NULL;
     if (dstWidth < 0) return NULL;
< prev index next >