< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m

Print this page




  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;


< prev index next >