src/java.desktop/macosx/classes/sun/font/CFontManager.java
Print this page
*** 250,275 ****
void registerFont(String fontName, String fontFamilyName) {
final CFont font = new CFont(fontName, fontFamilyName);
registerGenericFont(font);
! if ((font.getStyle() & Font.ITALIC) == 0) {
! registerGenericFont(font.createItalicVariant(), true);
}
}
Object waitForFontsToBeLoaded = new Object();
public void loadFonts()
{
synchronized(waitForFontsToBeLoaded)
{
super.loadFonts();
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
loadNativeFonts();
return null;
}
}
);
--- 250,312 ----
void registerFont(String fontName, String fontFamilyName) {
final CFont font = new CFont(fontName, fontFamilyName);
registerGenericFont(font);
+ }
! void registerItalicDerived() {
! FontFamily[] famArr = FontFamily.getAllFontFamilies();
! for (int i=0; i<famArr.length; i++) {
! FontFamily family = famArr[i];
!
! Font2D f2dPlain = family.getFont(Font.PLAIN);
! if (f2dPlain != null && !(f2dPlain instanceof CFont)) continue;
! Font2D f2dBold = family.getFont(Font.BOLD);
! if (f2dBold != null && !(f2dBold instanceof CFont)) continue;
! Font2D f2dItalic = family.getFont(Font.ITALIC);
! if (f2dItalic != null && !(f2dItalic instanceof CFont)) continue;
! Font2D f2dBoldItalic = family.getFont(Font.BOLD|Font.ITALIC);
! if (f2dBoldItalic != null && !(f2dBoldItalic instanceof CFont)) continue;
!
! CFont plain = (CFont)f2dPlain;
! CFont bold = (CFont)f2dBold;
! CFont italic = (CFont)f2dItalic;
! CFont boldItalic = (CFont)f2dBoldItalic;
!
! if (bold == null) bold = plain;
! if (plain == null && bold == null) continue;
! if (italic != null && boldItalic != null) continue;
! if (plain != null && italic == null) {
! registerGenericFont(plain.createItalicVariant(), true);
! CFont f = plain.createItalicVariant();
! registerGenericFont(f, true);
! }
! if (bold != null && boldItalic == null) {
! registerGenericFont(bold.createItalicVariant(), true);
! CFont f = bold.createItalicVariant();
! registerGenericFont(f, true);
! }
}
}
Object waitForFontsToBeLoaded = new Object();
+ private boolean loadedAllFonts = false;
+
public void loadFonts()
{
synchronized(waitForFontsToBeLoaded)
{
super.loadFonts();
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Object>() {
public Object run() {
+ if (!loadedAllFonts) {
loadNativeFonts();
+ registerItalicDerived();
+ loadedAllFonts = true;
+ }
return null;
}
}
);