25 26 #import <JavaNativeFoundation/JavaNativeFoundation.h> 27 28 #import "java_awt_Font.h" 29 #import "sun_awt_PlatformFont.h" 30 #import "sun_awt_FontDescriptor.h" 31 #import "sun_font_CFont.h" 32 #import "sun_font_CFontManager.h" 33 34 #import "AWTFont.h" 35 #import "AWTStrike.h" 36 #import "CoreTextSupport.h" 37 38 @implementation AWTFont 39 40 - (id) initWithFont:(NSFont *)font { 41 self = [super init]; 42 if (self) { 43 fFont = [font retain]; 44 fNativeCGFont = CTFontCopyGraphicsFont((CTFontRef)font, NULL); 45 layoutTableCache = NULL; 46 } 47 return self; 48 } 49 50 static TTLayoutTableCache* newCFontLayoutTableCache() { 51 TTLayoutTableCache* ltc = calloc(1, sizeof(TTLayoutTableCache)); 52 if (ltc) { 53 int i; 54 for(i=0;i<LAYOUTCACHE_ENTRIES;i++) { 55 ltc->entries[i].len = -1; 56 } 57 } 58 return ltc; 59 } 60 61 static void freeCFontLayoutTableCache(TTLayoutTableCache* ltc) { 62 if (ltc) { 63 int i; 64 for(i=0;i<LAYOUTCACHE_ENTRIES;i++) { 65 if(ltc->entries[i].ptr) free (ltc->entries[i].ptr); 66 } 67 if (ltc->kernPairs) free(ltc->kernPairs); 68 free(ltc); 69 } 70 } 71 72 - (void) dealloc { 73 [fFont release]; 74 fFont = nil; 75 76 if (fNativeCGFont) { 77 CGFontRelease(fNativeCGFont); 78 fNativeCGFont = NULL; 79 if (layoutTableCache != NULL) { 80 freeCFontLayoutTableCache(layoutTableCache); 81 layoutTableCache = NULL; 82 } 83 } 84 85 [super dealloc]; 86 } 87 88 - (void) finalize { 89 if (fNativeCGFont) { 90 CGFontRelease(fNativeCGFont); 91 fNativeCGFont = NULL; 92 } 93 if (layoutTableCache != NULL) { 94 freeCFontLayoutTableCache(layoutTableCache); 95 layoutTableCache = NULL; 96 } 97 [super finalize]; 98 } 99 100 + (AWTFont *) awtFontForName:(NSString *)name 101 style:(int)style 102 { 103 // create font with family & size 104 NSFont *nsFont = [NSFont fontWithName:name size:1.0]; 105 106 if (nsFont == nil) { 107 // if can't get font of that name, substitute system default font 108 nsFont = [NSFont fontWithName:@"Lucida Grande" size:1.0]; 109 #ifdef DEBUG 110 NSLog(@"needed to substitute Lucida Grande for: %@", name); 111 #endif 112 } 113 114 // create an italic style (if one is installed) 115 if (style & java_awt_Font_ITALIC) { 116 nsFont = [[NSFontManager sharedFontManager] convertFont:nsFont toHaveTrait:NSItalicFontMask]; 412 NSLog(@"url is : %@", (NSString*)url); 413 printf("res is %d\n", res); 414 #endif 415 JNF_COCOA_EXIT(env); 416 } 417 418 #pragma mark --- sun.font.CFont JNI --- 419 420 /* 421 * Class: sun_font_CFont 422 * Method: getPlatformFontPtrNative 423 * Signature: (JI)[B 424 */ 425 JNIEXPORT jlong JNICALL 426 Java_sun_font_CFont_getCGFontPtrNative 427 (JNIEnv *env, jclass clazz, 428 jlong awtFontPtr) 429 { 430 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); 431 return (jlong)(awtFont->fNativeCGFont); 432 } 433 434 /* 435 * Class: sun_font_CFont 436 * Method: getLayoutTableCacheNative 437 * Signature: (J)J 438 */ 439 JNIEXPORT jlong JNICALL 440 Java_sun_font_CFont_getLayoutTableCacheNative 441 (JNIEnv *env, jclass clazz, 442 jlong awtFontPtr) 443 { 444 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); 445 if (awtFont->layoutTableCache == NULL) { 446 awtFont->layoutTableCache = newCFontLayoutTableCache(); 447 } 448 return (jlong)(awtFont->layoutTableCache); 449 } 450 451 /* 452 * Class: sun_font_CFont 453 * Method: getTableBytesNative 454 * Signature: (JI)[B 455 */ 456 JNIEXPORT jbyteArray JNICALL 457 Java_sun_font_CFont_getTableBytesNative 458 (JNIEnv *env, jclass clazz, 459 jlong awtFontPtr, jint jtag) 460 { 461 jbyteArray jbytes = NULL; 462 JNF_COCOA_ENTER(env); 463 464 CTFontTableTag tag = (CTFontTableTag)jtag; 465 int i, found = 0; 466 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); 467 NSFont* nsFont = awtFont->fFont; 468 CTFontRef ctfont = (CTFontRef)nsFont; | 25 26 #import <JavaNativeFoundation/JavaNativeFoundation.h> 27 28 #import "java_awt_Font.h" 29 #import "sun_awt_PlatformFont.h" 30 #import "sun_awt_FontDescriptor.h" 31 #import "sun_font_CFont.h" 32 #import "sun_font_CFontManager.h" 33 34 #import "AWTFont.h" 35 #import "AWTStrike.h" 36 #import "CoreTextSupport.h" 37 38 @implementation AWTFont 39 40 - (id) initWithFont:(NSFont *)font { 41 self = [super init]; 42 if (self) { 43 fFont = [font retain]; 44 fNativeCGFont = CTFontCopyGraphicsFont((CTFontRef)font, NULL); 45 } 46 return self; 47 } 48 49 - (void) dealloc { 50 [fFont release]; 51 fFont = nil; 52 53 if (fNativeCGFont) { 54 CGFontRelease(fNativeCGFont); 55 fNativeCGFont = NULL; 56 } 57 58 [super dealloc]; 59 } 60 61 - (void) finalize { 62 if (fNativeCGFont) { 63 CGFontRelease(fNativeCGFont); 64 fNativeCGFont = NULL; 65 } 66 [super finalize]; 67 } 68 69 + (AWTFont *) awtFontForName:(NSString *)name 70 style:(int)style 71 { 72 // create font with family & size 73 NSFont *nsFont = [NSFont fontWithName:name size:1.0]; 74 75 if (nsFont == nil) { 76 // if can't get font of that name, substitute system default font 77 nsFont = [NSFont fontWithName:@"Lucida Grande" size:1.0]; 78 #ifdef DEBUG 79 NSLog(@"needed to substitute Lucida Grande for: %@", name); 80 #endif 81 } 82 83 // create an italic style (if one is installed) 84 if (style & java_awt_Font_ITALIC) { 85 nsFont = [[NSFontManager sharedFontManager] convertFont:nsFont toHaveTrait:NSItalicFontMask]; 381 NSLog(@"url is : %@", (NSString*)url); 382 printf("res is %d\n", res); 383 #endif 384 JNF_COCOA_EXIT(env); 385 } 386 387 #pragma mark --- sun.font.CFont JNI --- 388 389 /* 390 * Class: sun_font_CFont 391 * Method: getPlatformFontPtrNative 392 * Signature: (JI)[B 393 */ 394 JNIEXPORT jlong JNICALL 395 Java_sun_font_CFont_getCGFontPtrNative 396 (JNIEnv *env, jclass clazz, 397 jlong awtFontPtr) 398 { 399 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); 400 return (jlong)(awtFont->fNativeCGFont); 401 } 402 403 /* 404 * Class: sun_font_CFont 405 * Method: getTableBytesNative 406 * Signature: (JI)[B 407 */ 408 JNIEXPORT jbyteArray JNICALL 409 Java_sun_font_CFont_getTableBytesNative 410 (JNIEnv *env, jclass clazz, 411 jlong awtFontPtr, jint jtag) 412 { 413 jbyteArray jbytes = NULL; 414 JNF_COCOA_ENTER(env); 415 416 CTFontTableTag tag = (CTFontTableTag)jtag; 417 int i, found = 0; 418 AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr); 419 NSFont* nsFont = awtFont->fFont; 420 CTFontRef ctfont = (CTFontRef)nsFont; |