< 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 >