< 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,41 **** * 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" @implementation AWTFont - (id) initWithFont:(NSFont *)font { self = [super init]; --- 21,40 ---- * 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 "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,164 **** NSLog(@"nil font"); #endif return nil; } ! static JNF_CLASS_CACHE(jc_Font, "java/awt/Font"); // obtain the Font2D ! static JNF_MEMBER_CACHE(jm_Font_getFont2D, jc_Font, "getFont2D", "()Lsun/font/Font2D;"); ! jobject font2d = JNFCallObjectMethod(env, javaFont, jm_Font_getFont2D); 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)) { #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)) { #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); if (awtStrikePtr == 0L) { #ifdef DEBUG NSLog(@"nil nativeFontPtr from CFont"); #endif return nil; --- 119,165 ---- NSLog(@"nil font"); #endif return nil; } ! DECLARE_CLASS_RETURN(jc_Font, "java/awt/Font", nil); // obtain the Font2D ! 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 ! 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; } ! 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; } ! 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,393 **** { 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"); jint num = 0; ! JNF_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 jFontFamilyName = ! JNFNSToJavaString(env, GetFamilyNameForFontName(fontname)); ! JNFCallVoidMethod(env, jthis, ! jm_registerFont, jFontName, jFontFamilyName); (*env)->DeleteLocalRef(env, jFontName); (*env)->DeleteLocalRef(env, jFontFamilyName); } ! JNF_COCOA_EXIT(env); } /* * Class: Java_sun_font_CFontManager_loadNativeDirFonts * Method: loadNativeDirFonts --- 284,326 ---- { return FSPathMakeRef((UInt8 *)[inPath fileSystemRepresentation], myFSRefPtr, NULL); } /* * Class: sun_font_CFontManager * Method: loadNativeFonts * Signature: ()V */ JNIEXPORT void JNICALL Java_sun_font_CFontManager_loadNativeFonts (JNIEnv *env, jobject jthis) { ! DECLARE_CLASS(jc_CFontManager, "sun/font/CFontManager"); ! DECLARE_METHOD(jm_registerFont, jc_CFontManager, "registerFont", "(Ljava/lang/String;Ljava/lang/String;)V"); jint num = 0; ! 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 = NSStringToJavaString(env, fontname); jobject jFontFamilyName = ! NSStringToJavaString(env, GetFamilyNameForFontName(fontname)); ! (*env)->CallVoidMethod(env, jthis, jm_registerFont, jFontName, jFontFamilyName); ! CHECK_EXCEPTION(); (*env)->DeleteLocalRef(env, jFontName); (*env)->DeleteLocalRef(env, jFontFamilyName); } ! JNI_COCOA_EXIT(env); } /* * Class: Java_sun_font_CFontManager_loadNativeDirFonts * Method: loadNativeDirFonts
*** 395,415 **** */ JNIEXPORT void JNICALL Java_sun_font_CFontManager_loadNativeDirFonts (JNIEnv *env, jclass clz, jstring filename) { ! JNF_COCOA_ENTER(env); ! NSString *path = JNFJavaToNSString(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); } #pragma mark --- sun.font.CFont JNI --- /* --- 328,348 ---- */ JNIEXPORT void JNICALL Java_sun_font_CFontManager_loadNativeDirFonts (JNIEnv *env, jclass clz, jstring filename) { ! JNI_COCOA_ENTER(env); ! 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 ! JNI_COCOA_EXIT(env); } #pragma mark --- sun.font.CFont JNI --- /*
*** 435,445 **** Java_sun_font_CFont_getTableBytesNative (JNIEnv *env, jclass clazz, jlong awtFontPtr, jint jtag) { jbyteArray jbytes = NULL; ! JNF_COCOA_ENTER(env); CTFontTableTag tag = (CTFontTableTag)jtag; int i, found = 0; AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); NSFont* nsFont = awtFont->fFont; --- 368,378 ---- Java_sun_font_CFont_getTableBytesNative (JNIEnv *env, jclass clazz, jlong awtFontPtr, jint jtag) { jbyteArray jbytes = NULL; ! JNI_COCOA_ENTER(env); CTFontTableTag tag = (CTFontTableTag)jtag; int i, found = 0; AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); NSFont* nsFont = awtFont->fFont;
*** 477,487 **** (*env)->SetByteArrayRegion(env, jbytes, 0, (jsize)tableLength, (jbyte*)tableBytes); CFRelease(table); ! JNF_COCOA_EXIT(env); return jbytes; } /* --- 410,420 ---- (*env)->SetByteArrayRegion(env, jbytes, 0, (jsize)tableLength, (jbyte*)tableBytes); CFRelease(table); ! JNI_COCOA_EXIT(env); return jbytes; } /*
*** 494,514 **** (JNIEnv *env, jclass clazz, jstring nativeFontName, jint style) { AWTFont *awtFont = nil; ! JNF_COCOA_ENTER(env); awtFont = ! [AWTFont awtFontForName:JNFJavaToNSString(env, nativeFontName) style:style]; // autoreleased if (awtFont) { CFRetain(awtFont); // GC } ! JNF_COCOA_EXIT(env); return ptr_to_jlong(awtFont); } /* --- 427,447 ---- (JNIEnv *env, jclass clazz, jstring nativeFontName, jint style) { AWTFont *awtFont = nil; ! JNI_COCOA_ENTER(env); awtFont = ! [AWTFont awtFontForName:JavaStringToNSString(env, nativeFontName) style:style]; // autoreleased if (awtFont) { CFRetain(awtFont); // GC } ! JNI_COCOA_EXIT(env); return ptr_to_jlong(awtFont); } /*
*** 519,538 **** JNIEXPORT jfloat JNICALL Java_sun_font_CFont_getWidthNative (JNIEnv *env, jobject cfont, jlong awtFontPtr) { float widthVal; ! JNF_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); return (jfloat)widthVal; } /* * Class: sun_font_CFont --- 452,471 ---- JNIEXPORT jfloat JNICALL Java_sun_font_CFont_getWidthNative (JNIEnv *env, jobject cfont, jlong awtFontPtr) { float widthVal; ! 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]; ! JNI_COCOA_EXIT(env); return (jfloat)widthVal; } /* * Class: sun_font_CFont
*** 542,561 **** JNIEXPORT jfloat JNICALL Java_sun_font_CFont_getWeightNative (JNIEnv *env, jobject cfont, jlong awtFontPtr) { float weightVal; ! JNF_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); return (jfloat)weightVal; } /* * Class: sun_font_CFont --- 475,494 ---- JNIEXPORT jfloat JNICALL Java_sun_font_CFont_getWeightNative (JNIEnv *env, jobject cfont, jlong awtFontPtr) { float weightVal; ! 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]; ! JNI_COCOA_EXIT(env); return (jfloat)weightVal; } /* * Class: sun_font_CFont
*** 564,580 **** */ JNIEXPORT void JNICALL Java_sun_font_CFont_disposeNativeFont (JNIEnv *env, jclass clazz, jlong awtFontPtr) { ! JNF_COCOA_ENTER(env); if (awtFontPtr) { CFRelease((AWTFont *)jlong_to_ptr(awtFontPtr)); // GC } ! JNF_COCOA_EXIT(env); } #pragma mark --- Miscellaneous JNI --- --- 497,513 ---- */ JNIEXPORT void JNICALL Java_sun_font_CFont_disposeNativeFont (JNIEnv *env, jclass clazz, jlong awtFontPtr) { ! JNI_COCOA_ENTER(env); if (awtFontPtr) { CFRelease((AWTFont *)jlong_to_ptr(awtFontPtr)); // GC } ! JNI_COCOA_EXIT(env); } #pragma mark --- Miscellaneous JNI ---
*** 633,642 **** CFStringRef fontname = CTFontDescriptorCopyAttribute(ref, kCTFontNameAttribute); #ifdef DEBUG NSLog(@"Font is : %@", (NSString*)fontname); #endif ! jstring jFontName = (jstring)JNFNSToJavaString(env, fontname); (*env)->CallBooleanMethod(env, arrayListOfString, addMID, jFontName); (*env)->DeleteLocalRef(env, jFontName); } } --- 566,578 ---- CFStringRef fontname = CTFontDescriptorCopyAttribute(ref, kCTFontNameAttribute); #ifdef DEBUG NSLog(@"Font is : %@", (NSString*)fontname); #endif ! jstring jFontName = (jstring)NSStringToJavaString(env, fontname); (*env)->CallBooleanMethod(env, arrayListOfString, addMID, jFontName); + if ((*env)->ExceptionOccurred(env)) { + return; + } (*env)->DeleteLocalRef(env, jFontName); } }
< prev index next >