From 1ac940c263c5b33c2b0cd5cb17c8aece32fc687f Mon Sep 17 00:00:00 2001 From: Phil Race Date: Tue, 29 Nov 2016 09:54:16 -0800 Subject: [PATCH] 8167103: Intermittent font loading failure on macOS with JFXPanel application Reviewed-by: serb, psadhukhan --- .../macosx/classes/sun/font/CFontManager.java | 18 +++++++++++++--- .../macosx/native/libawt_lwawt/font/AWTFont.m | 21 +++++++------------ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java b/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java index 0c505b28576..45f48328717 100644 --- a/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java +++ b/jdk/src/java.desktop/macosx/classes/sun/font/CFontManager.java @@ -141,12 +141,24 @@ public final class CFontManager extends SunFontManager { } } - protected void registerFontsInDir(String dirName, boolean useJavaRasterizer, int fontRank, boolean defer, boolean resolveSymLinks) { - loadNativeDirFonts(dirName); + protected void registerFontsInDir(final String dirName, boolean useJavaRasterizer, + int fontRank, boolean defer, boolean resolveSymLinks) { + + String[] files = AccessController.doPrivileged((PrivilegedAction) () -> { + return new File(dirName).list(getTrueTypeFilter()); + }); + + if (files == null) { + return; + } else { + for (String f : files) { + loadNativeDirFonts(dirName+File.separator+f); + } + } super.registerFontsInDir(dirName, useJavaRasterizer, fontRank, defer, resolveSymLinks); } - private native void loadNativeDirFonts(String dirName); + private native void loadNativeDirFonts(String fontPath); private native void loadNativeFonts(); void registerFont(String fontName, String fontFamilyName) { diff --git a/jdk/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m b/jdk/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m index d374e5a1241..bca21021347 100644 --- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m +++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.m @@ -404,19 +404,14 @@ Java_sun_font_CFontManager_loadNativeDirFonts { JNF_COCOA_ENTER(env); - NSString *nsFilePath = JNFJavaToNSString(env, filename); - - FSRef iFile; - OSStatus status = CreateFSRef(&iFile, nsFilePath); - - if (status == noErr) { - ATSFontContainerRef oContainer; - status = ATSFontActivateFromFileReference(&iFile, kATSFontContextLocal, - kATSFontFormatUnspecified, - NULL, kNilOptions, - &oContainer); - } - + 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); }