/* * Class: com_sun_javafx_font_MacFontFinder * Method: getFontData * Signature: ()[Ljava/lang/String; */ JNIEXPORT jobjectArray JNICALL Java_com_sun_javafx_font_MacFontFinder_getFontData (JNIEnv *env, jclass obj) { /* No caching as this method is only invoked once */ jclass jStringClass = (*env)->FindClass(env, "java/lang/String"); if (jStringClass == NULL) return NULL; CTFontCollectionRef collection = CTFontCollectionCreateFromAvailableFonts(NULL); CFArrayRef fonts = CTFontCollectionCreateMatchingFontDescriptors(collection); CFRelease(collection); CFIndex count = CFArrayGetCount(fonts); jobjectArray result = (*env)->NewObjectArray(env, (count + 2) * 3, jStringClass, NULL); if (result == NULL) { /* out of memory */ CFRelease(fonts); return NULL; } CFIndex i = 0, j = 0; while (i < count) { CTFontDescriptorRef fd = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fonts, i++); j = addCTFontDescriptor(fd, env, result, j); } CFRelease(fonts); /* Sometimes a font name starting with dot (internal font, e.g. ".Helvetica NeueUI") * is returned as a system UI font, but such font is not available in the collection * of available fonts. Thus, it is safer to always add the system font manually * to the list so JavaFX can find it. If the UI font is added twice it gets * handled in Java. */ CTFontRef font = CTFontCreateUIFontForLanguage(kCTFontSystemFontType, 0, NULL); CTFontDescriptorRef fd = CTFontCopyFontDescriptor(font); j = addCTFontDescriptor(fd, env, result, j); CFRelease(fd); CFRelease(font); /* Also add the EmphasizedSystemFont as it might make the bold version * for the system font available to JavaFX. */ font = CTFontCreateUIFontForLanguage(kCTFontEmphasizedSystemFontType, 0, NULL); fd = CTFontCopyFontDescriptor(font); j = addCTFontDescriptor(fd, env, result, j); CFRelease(fd); CFRelease(font); return result; }
QT_BEGIN_NAMESPACE #ifdef QT_MAC_USE_COCOA static CTFontRef CopyCTThemeFont(ThemeFontID themeID) { CTFontUIFontType ctID = HIThemeGetUIFontType(themeID); return CTFontCreateUIFontForLanguage(ctID, 0, 0); }
/* * Class: com_sun_javafx_font_MacFontFinder * Method: getFont * Signature: (I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_sun_javafx_font_MacFontFinder_getFont (JNIEnv *env, jclass obj, jint type) { CTFontRef font = CTFontCreateUIFontForLanguage(type, 0, NULL); CFStringRef family = CTFontCopyFamilyName(font); jstring jfamily = createJavaString(env, family); CFRelease(family); CFRelease(font); return jfamily; }
/* * Class: com_sun_javafx_font_MacFontFinder * Method: getSystemFontSize * Signature: ()F */ JNIEXPORT jfloat JNICALL Java_com_sun_javafx_font_MacFontFinder_getSystemFontSize (JNIEnv *env, jclass obj) { CTFontRef font = CTFontCreateUIFontForLanguage( kCTFontSystemFontType, 0.0, //get system font with default size NULL); jfloat systemFontDefaultSize = (jfloat) CTFontGetSize (font); CFRelease(font); return systemFontDefaultSize; }