private FontConfigFont[] getFcFontList(FcCompFont[] fcFonts, String fontname, int style) { if (fontname.equals("dialog")) { fontname = "sansserif"; } else if (fontname.equals("dialoginput")) { fontname = "monospaced"; } for (int i=0; i<fcFonts.length; i++) { if (fontname.equals(fcFonts[i].jdkName) && style == fcFonts[i].style) { return fcFonts[i].allFonts; } } return fcFonts[0].allFonts; }
@Override public String[] getPlatformFontNames() { HashSet<String> nameSet = new HashSet<String>(); X11FontManager fm = (X11FontManager) fontManager; FontConfigManager fcm = fm.getFontConfigManager(); FcCompFont[] fcCompFonts = fcm.loadFontConfig(); for (int i=0; i<fcCompFonts.length; i++) { for (int j=0; j<fcCompFonts[i].allFonts.length; j++) { nameSet.add(fcCompFonts[i].allFonts[j].fontFile); } } return nameSet.toArray(new String[0]); }
@Override public String[] getPlatformFontNames() { HashSet<String> nameSet = new HashSet<String>(); FcFontManager fm = (FcFontManager) fontManager; FontConfigManager fcm = fm.getFontConfigManager(); FcCompFont[] fcCompFonts = fcm.loadFontConfig(); for (int i=0; i<fcCompFonts.length; i++) { for (int j=0; j<fcCompFonts[i].allFonts.length; j++) { nameSet.add(fcCompFonts[i].allFonts[j].fontFile); } } return nameSet.toArray(new String[0]); }
@Override public CompositeFontDescriptor[] get2DCompositeFontInfo() { X11FontManager fm = (X11FontManager) fontManager; FontConfigManager fcm = fm.getFontConfigManager(); FcCompFont[] fcCompFonts = fcm.loadFontConfig(); CompositeFontDescriptor[] result = new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES]; for (int fontIndex = 0; fontIndex < NUM_FONTS; fontIndex++) { String fontName = publicFontNames[fontIndex]; for (int styleIndex = 0; styleIndex < NUM_STYLES; styleIndex++) { String faceName = fontName + "." + styleNames[styleIndex]; FontConfigFont[] fcFonts = getFcFontList(fcCompFonts, fontNames[fontIndex], styleIndex); int numFonts = fcFonts.length; // fall back fonts listed in the lib/fonts/fallback directory if (installedFallbackFontFiles != null) { numFonts += installedFallbackFontFiles.length; } String[] fileNames = new String[numFonts]; String[] faceNames = new String[numFonts]; int index; for (index = 0; index < fcFonts.length; index++) { fileNames[index] = fcFonts[index].fontFile; faceNames[index] = fcFonts[index].familyName; } if (installedFallbackFontFiles != null) { System.arraycopy(installedFallbackFontFiles, 0, fileNames, fcFonts.length, installedFallbackFontFiles.length); } result[fontIndex * NUM_STYLES + styleIndex] = new CompositeFontDescriptor( faceName, 1, faceNames, fileNames, null, null); } } return result; }
private void writeFcInfo() { Properties props = new Properties(); props.setProperty("version", fileVersion); X11FontManager fm = (X11FontManager) fontManager; FontConfigManager fcm = fm.getFontConfigManager(); FontConfigInfo fcInfo = fcm.getFontConfigInfo(); props.setProperty("fcversion", Integer.toString(fcInfo.fcVersion)); if (fcInfo.cacheDirs != null) { for (int i=0;i<fcInfo.cacheDirs.length;i++) { if (fcInfo.cacheDirs[i] != null) { props.setProperty("cachedir."+i, fcInfo.cacheDirs[i]); } } } for (int i=0; i<fcCompFonts.length; i++) { FcCompFont fci = fcCompFonts[i]; String styleKey = fci.jdkName+"."+fci.style; props.setProperty(styleKey+".length", Integer.toString(fci.allFonts.length)); for (int j=0; j<fci.allFonts.length; j++) { props.setProperty(styleKey+"."+j+".family", fci.allFonts[j].familyName); props.setProperty(styleKey+"."+j+".file", fci.allFonts[j].fontFile); } } try { /* This writes into a temp file then renames when done. * Since the rename is an atomic action within the same * directory no client will ever see a partially written file. */ File fcInfoFile = getFcInfoFile(); File dir = fcInfoFile.getParentFile(); dir.mkdirs(); File tempFile = Files.createTempFile(dir.toPath(), "fcinfo", null).toFile(); FileOutputStream fos = new FileOutputStream(tempFile); props.store(fos, "JDK Font Configuration Generated File: *Do Not Edit*"); fos.close(); boolean renamed = tempFile.renameTo(fcInfoFile); if (!renamed && FontUtilities.debugFonts()) { System.out.println("rename failed"); warning("Failed renaming file to "+ getFcInfoFile()); } } catch (Exception e) { if (FontUtilities.debugFonts()) { warning("IOException writing to "+ getFcInfoFile()); } } }
@Override public CompositeFontDescriptor[] get2DCompositeFontInfo() { FcFontManager fm = (FcFontManager) fontManager; FontConfigManager fcm = fm.getFontConfigManager(); FcCompFont[] fcCompFonts = fcm.loadFontConfig(); CompositeFontDescriptor[] result = new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES]; for (int fontIndex = 0; fontIndex < NUM_FONTS; fontIndex++) { String fontName = publicFontNames[fontIndex]; for (int styleIndex = 0; styleIndex < NUM_STYLES; styleIndex++) { String faceName = fontName + "." + styleNames[styleIndex]; FontConfigFont[] fcFonts = getFcFontList(fcCompFonts, fontNames[fontIndex], styleIndex); int numFonts = fcFonts.length; // fall back fonts listed in the lib/fonts/fallback directory if (installedFallbackFontFiles != null) { numFonts += installedFallbackFontFiles.length; } String[] fileNames = new String[numFonts]; String[] faceNames = new String[numFonts]; int index; for (index = 0; index < fcFonts.length; index++) { fileNames[index] = fcFonts[index].fontFile; faceNames[index] = fcFonts[index].familyName; } if (installedFallbackFontFiles != null) { System.arraycopy(installedFallbackFontFiles, 0, fileNames, fcFonts.length, installedFallbackFontFiles.length); } result[fontIndex * NUM_STYLES + styleIndex] = new CompositeFontDescriptor( faceName, 1, faceNames, fileNames, null, null); } } return result; }
private void writeFcInfo() { Properties props = new Properties(); props.setProperty("version", fileVersion); FcFontManager fm = (FcFontManager) fontManager; FontConfigManager fcm = fm.getFontConfigManager(); FontConfigInfo fcInfo = fcm.getFontConfigInfo(); props.setProperty("fcversion", Integer.toString(fcInfo.fcVersion)); if (fcInfo.cacheDirs != null) { for (int i=0;i<fcInfo.cacheDirs.length;i++) { if (fcInfo.cacheDirs[i] != null) { props.setProperty("cachedir."+i, fcInfo.cacheDirs[i]); } } } for (int i=0; i<fcCompFonts.length; i++) { FcCompFont fci = fcCompFonts[i]; String styleKey = fci.jdkName+"."+fci.style; props.setProperty(styleKey+".length", Integer.toString(fci.allFonts.length)); for (int j=0; j<fci.allFonts.length; j++) { props.setProperty(styleKey+"."+j+".family", fci.allFonts[j].familyName); props.setProperty(styleKey+"."+j+".file", fci.allFonts[j].fontFile); } } try { /* This writes into a temp file then renames when done. * Since the rename is an atomic action within the same * directory no client will ever see a partially written file. */ File fcInfoFile = getFcInfoFile(); File dir = fcInfoFile.getParentFile(); dir.mkdirs(); File tempFile = Files.createTempFile(dir.toPath(), "fcinfo", null).toFile(); FileOutputStream fos = new FileOutputStream(tempFile); props.store(fos, "JDK Font Configuration Generated File: *Do Not Edit*"); fos.close(); boolean renamed = tempFile.renameTo(fcInfoFile); if (!renamed && FontUtilities.debugFonts()) { System.out.println("rename failed"); warning("Failed renaming file to "+ getFcInfoFile()); } } catch (Exception e) { if (FontUtilities.debugFonts()) { warning("IOException writing to "+ getFcInfoFile()); } } }