< prev index next >
src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m
Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54096 : 8259651: [macOS] Replace JNF_COCOA_ENTER/EXIT macros
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion
@@ -21,21 +21,20 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-#import <JavaNativeFoundation/JavaNativeFoundation.h>
-
#import "java_awt_Font.h"
#import "sun_awt_PlatformFont.h"
#import "sun_awt_FontDescriptor.h"
#import "sun_font_CFont.h"
#import "sun_font_CFontManager.h"
#import "AWTFont.h"
#import "AWTStrike.h"
#import "CoreTextSupport.h"
+#import "JNIUtilities.h"
@implementation AWTFont
- (id) initWithFont:(NSFont *)font {
self = [super init];
@@ -120,45 +119,47 @@
NSLog(@"nil font");
#endif
return nil;
}
- static JNF_CLASS_CACHE(jc_Font, "java/awt/Font");
+ DECLARE_CLASS_RETURN(jc_Font, "java/awt/Font", nil);
// obtain the Font2D
- static JNF_MEMBER_CACHE(jm_Font_getFont2D, jc_Font, "getFont2D", "()Lsun/font/Font2D;");
- jobject font2d = JNFCallObjectMethod(env, javaFont, jm_Font_getFont2D);
+ DECLARE_METHOD_RETURN(jm_Font_getFont2D, jc_Font, "getFont2D", "()Lsun/font/Font2D;", nil);
+ jobject font2d = (*env)->CallObjectMethod(env, javaFont, jm_Font_getFont2D);
+ CHECK_EXCEPTION();
if (font2d == NULL) {
#ifdef DEBUG
NSLog(@"nil font2d");
#endif
return nil;
}
// if it's not a CFont, it's likely one of TTF or OTF fonts
// from the Sun rendering loops
- static JNF_CLASS_CACHE(jc_CFont, "sun/font/CFont");
- if (!JNFIsInstanceOf(env, font2d, &jc_CFont)) {
+ DECLARE_CLASS_RETURN(jc_CFont, "sun/font/CFont", nil);
+ if (!(*env)->IsInstanceOf(env, font2d, jc_CFont)) {
#ifdef DEBUG
NSLog(@"font2d !instanceof CFont");
#endif
return nil;
}
- static JNF_MEMBER_CACHE(jm_CFont_getFontStrike, jc_CFont, "getStrike", "(Ljava/awt/Font;)Lsun/font/FontStrike;");
- jobject fontStrike = JNFCallObjectMethod(env, font2d, jm_CFont_getFontStrike, javaFont);
-
- static JNF_CLASS_CACHE(jc_CStrike, "sun/font/CStrike");
- if (!JNFIsInstanceOf(env, fontStrike, &jc_CStrike)) {
+ DECLARE_METHOD_RETURN(jm_CFont_getFontStrike, jc_CFont, "getStrike", "(Ljava/awt/Font;)Lsun/font/FontStrike;", nil);
+ jobject fontStrike = (*env)->CallObjectMethod(env, font2d, jm_CFont_getFontStrike, javaFont);
+ CHECK_EXCEPTION();
+ DECLARE_CLASS_RETURN(jc_CStrike, "sun/font/CStrike", nil);
+ if (!(*env)->IsInstanceOf(env, fontStrike, jc_CStrike)) {
#ifdef DEBUG
NSLog(@"fontStrike !instanceof CStrike");
#endif
return nil;
}
- static JNF_MEMBER_CACHE(jm_CStrike_nativeStrikePtr, jc_CStrike, "getNativeStrikePtr", "()J");
- jlong awtStrikePtr = JNFCallLongMethod(env, fontStrike, jm_CStrike_nativeStrikePtr);
+ DECLARE_METHOD_RETURN(jm_CStrike_nativeStrikePtr, jc_CStrike, "getNativeStrikePtr", "()J", nil);
+ jlong awtStrikePtr = (*env)->CallLongMethod(env, fontStrike, jm_CStrike_nativeStrikePtr);
+ CHECK_EXCEPTION();
if (awtStrikePtr == 0L) {
#ifdef DEBUG
NSLog(@"nil nativeFontPtr from CFont");
#endif
return nil;
@@ -283,111 +284,43 @@
{
return FSPathMakeRef((UInt8 *)[inPath fileSystemRepresentation],
myFSRefPtr, NULL);
}
-// /*
-// * Class: sun_font_CFontManager
-// * Method: loadFileFont
-// * Signature: (Ljava/lang/String;)Lsun/font/Font2D;
-// */
-// JNIEXPORT /* sun.font.CFont */ jobject JNICALL
-// Java_sun_font_CFontManager_loadFileFont
-// (JNIEnv *env, jclass obj, jstring fontpath)
-// {
-// jobject result = NULL;
-//
-// JNF_COCOA_ENTER(env);
-//
-// NSString *nsFilePath = JNFJavaToNSString(env, fontpath);
-// jstring javaFontName = NULL;
-//
-// //
-// // Note: This API uses ATS and can therefore return Carbon error codes.
-// // These codes can be found at:
-// // http://developer.apple.com/techpubs/macosx/Carbon/Files/FileManager/File_Manager/ResultCodes/ResultCodes.html
-// //
-//
-// FSRef iFile;
-// OSStatus status = CreateFSRef(&iFile, nsFilePath);
-//
-// if (status == noErr) {
-// ATSFontContainerRef oContainer;
-// status = ATSFontActivateFromFileReference(&iFile, kATSFontContextLocal,
-// kATSFontFormatUnspecified,
-// NULL,
-// kATSOptionFlagsUseDataFork,
-// &oContainer);
-// if (status == noErr) {
-// ATSFontRef ioArray[1];
-// ItemCount oCount;
-// status = ATSFontFindFromContainer(oContainer,
-// kATSOptionFlagsUseDataFork,
-// 1, ioArray, &oCount);
-//
-// if (status == noErr) {
-// CFStringRef oName;
-// status = ATSFontGetPostScriptName(ioArray[0],
-// kATSOptionFlagsUseDataFork,
-// &oName);
-// if (status == noErr) {
-// javaFontName = JNFNSToJavaString(env, (NSString *)oName);
-// CFRelease(oName);
-// }
-// }
-// }
-// }
-//
-// if (javaFontName != NULL) {
-// // create the CFont!
-// static JNF_CLASS_CACHE(sjc_CFont, "sun/font/CFont");
-// static JNF_CTOR_CACHE(sjf_CFont_ctor,
-// sjc_CFont, "(Ljava/lang/String;)V");
-// result = JNFNewObject(env, sjf_CFont_ctor, javaFontName);
-// }
-//
-// JNF_COCOA_EXIT(env);
-//
-// return result;
-// }
-
/*
* Class: sun_font_CFontManager
* Method: loadNativeFonts
* Signature: ()V
*/
JNIEXPORT void JNICALL
Java_sun_font_CFontManager_loadNativeFonts
(JNIEnv *env, jobject jthis)
{
- static JNF_CLASS_CACHE(jc_CFontManager,
- "sun/font/CFontManager");
- static JNF_MEMBER_CACHE(jm_registerFont, jc_CFontManager,
- "registerFont",
- "(Ljava/lang/String;Ljava/lang/String;)V");
+ DECLARE_CLASS(jc_CFontManager, "sun/font/CFontManager");
+ DECLARE_METHOD(jm_registerFont, jc_CFontManager, "registerFont", "(Ljava/lang/String;Ljava/lang/String;)V");
jint num = 0;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
NSArray *filteredFonts = GetFilteredFonts();
num = (jint)[filteredFonts count];
jint i;
for (i = 0; i < num; i++) {
NSString *fontname = [filteredFonts objectAtIndex:i];
- jobject jFontName = JNFNSToJavaString(env, fontname);
+ jobject jFontName = NSStringToJavaString(env, fontname);
jobject jFontFamilyName =
- JNFNSToJavaString(env, GetFamilyNameForFontName(fontname));
+ NSStringToJavaString(env, GetFamilyNameForFontName(fontname));
- JNFCallVoidMethod(env, jthis,
- jm_registerFont, jFontName, jFontFamilyName);
+ (*env)->CallVoidMethod(env, jthis, jm_registerFont, jFontName, jFontFamilyName);
+ CHECK_EXCEPTION();
(*env)->DeleteLocalRef(env, jFontName);
(*env)->DeleteLocalRef(env, jFontFamilyName);
}
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
}
/*
* Class: Java_sun_font_CFontManager_loadNativeDirFonts
* Method: loadNativeDirFonts
@@ -395,21 +328,21 @@
*/
JNIEXPORT void JNICALL
Java_sun_font_CFontManager_loadNativeDirFonts
(JNIEnv *env, jclass clz, jstring filename)
{
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
- NSString *path = JNFJavaToNSString(env, filename);
+ NSString *path = JavaStringToNSString(env, filename);
NSURL *url = [NSURL fileURLWithPath:(NSString *)path];
bool res = CTFontManagerRegisterFontsForURL((CFURLRef)url, kCTFontManagerScopeProcess, nil);
#ifdef DEBUG
NSLog(@"path is : %@", (NSString*)path);
NSLog(@"url is : %@", (NSString*)url);
printf("res is %d\n", res);
#endif
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
}
#pragma mark --- sun.font.CFont JNI ---
/*
@@ -435,11 +368,11 @@
Java_sun_font_CFont_getTableBytesNative
(JNIEnv *env, jclass clazz,
jlong awtFontPtr, jint jtag)
{
jbyteArray jbytes = NULL;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
CTFontTableTag tag = (CTFontTableTag)jtag;
int i, found = 0;
AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
NSFont* nsFont = awtFont->fFont;
@@ -477,11 +410,11 @@
(*env)->SetByteArrayRegion(env, jbytes, 0,
(jsize)tableLength,
(jbyte*)tableBytes);
CFRelease(table);
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return jbytes;
}
/*
@@ -494,21 +427,21 @@
(JNIEnv *env, jclass clazz,
jstring nativeFontName, jint style)
{
AWTFont *awtFont = nil;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
awtFont =
- [AWTFont awtFontForName:JNFJavaToNSString(env, nativeFontName)
+ [AWTFont awtFontForName:JavaStringToNSString(env, nativeFontName)
style:style]; // autoreleased
if (awtFont) {
CFRetain(awtFont); // GC
}
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return ptr_to_jlong(awtFont);
}
/*
@@ -519,20 +452,20 @@
JNIEXPORT jfloat JNICALL
Java_sun_font_CFont_getWidthNative
(JNIEnv *env, jobject cfont, jlong awtFontPtr)
{
float widthVal;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
NSFont* nsFont = awtFont->fFont;
NSFontDescriptor *fontDescriptor = nsFont.fontDescriptor;
NSDictionary *fontTraits = [fontDescriptor objectForKey : NSFontTraitsAttribute];
NSNumber *width = [fontTraits objectForKey : NSFontWidthTrait];
widthVal = (float)[width floatValue];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return (jfloat)widthVal;
}
/*
* Class: sun_font_CFont
@@ -542,20 +475,20 @@
JNIEXPORT jfloat JNICALL
Java_sun_font_CFont_getWeightNative
(JNIEnv *env, jobject cfont, jlong awtFontPtr)
{
float weightVal;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
NSFont* nsFont = awtFont->fFont;
NSFontDescriptor *fontDescriptor = nsFont.fontDescriptor;
NSDictionary *fontTraits = [fontDescriptor objectForKey : NSFontTraitsAttribute];
NSNumber *weight = [fontTraits objectForKey : NSFontWeightTrait];
weightVal = (float)[weight floatValue];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return (jfloat)weightVal;
}
/*
* Class: sun_font_CFont
@@ -564,17 +497,17 @@
*/
JNIEXPORT void JNICALL
Java_sun_font_CFont_disposeNativeFont
(JNIEnv *env, jclass clazz, jlong awtFontPtr)
{
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
if (awtFontPtr) {
CFRelease((AWTFont *)jlong_to_ptr(awtFontPtr)); // GC
}
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
}
#pragma mark --- Miscellaneous JNI ---
@@ -633,10 +566,13 @@
CFStringRef fontname =
CTFontDescriptorCopyAttribute(ref, kCTFontNameAttribute);
#ifdef DEBUG
NSLog(@"Font is : %@", (NSString*)fontname);
#endif
- jstring jFontName = (jstring)JNFNSToJavaString(env, fontname);
+ jstring jFontName = (jstring)NSStringToJavaString(env, fontname);
(*env)->CallBooleanMethod(env, arrayListOfString, addMID, jFontName);
+ if ((*env)->ExceptionOccurred(env)) {
+ return;
+ }
(*env)->DeleteLocalRef(env, jFontName);
}
}
< prev index next >