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