@Override public Font loadFont(String path, double size) { FontFactory factory = getFontFactoryFromPipeline(); PGFont font = factory.loadEmbeddedFont(null, path, (float) size, true); if (font != null) return createFont(font); return null; }
/** @param font */ @Override public void loadFont(Font font) { FontFactory fontFactory = getFontFactoryFromPipeline(); String fullName = font.getName(); if (!embeddedFontsLoaded && !fontFactory.isPlatformFont(fullName)) { loadEmbeddedFonts(); } // find the native Prism Font object based on this JavaFX font. At the // conclusion of this method, be sure to set the name, family, and // style on the Font object via the setNativeFont method. // the Prism font we're trying to find PGFont prismFont = fontFactory.createFont(fullName, (float) font.getSize()); // update the name variable to match what was actually loaded String name = prismFont.getName(); String family = prismFont.getFamilyName(); String style = prismFont.getStyleName(); font.impl_setNativeFont(prismFont, name, family, style); }
private void loadEmbeddedFonts() { if (!embeddedFontsLoaded) { FontFactory fontFactory = getFontFactoryFromPipeline(); if (!fontFactory.hasPermission()) { embeddedFontsLoaded = true; return; } Properties map = loadEmbeddedFontDefinitions(); Enumeration<?> names = map.keys(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); while (names.hasMoreElements()) { String n = (String) names.nextElement(); String p = map.getProperty(n); if (p.startsWith("/")) { p = p.substring(1); try (InputStream in = loader.getResourceAsStream(p)) { fontFactory.loadEmbeddedFont(n, in, 0, true); } catch (Exception e) { } } } embeddedFontsLoaded = true; } }
/** * Searches for an appropriate font based on the font family name and weight and posture style. * This method is not guaranteed to return a specific font, but does its best to find one that * fits the specified requirements. * * <p>For SDK/runtime fonts, we will attempt to match properties to a SDK/runtime fonts. If a * specific SDK font is not found in the runtime JAR, the font loading will revert to FontFactory * default font, rather then finding closest matching available SDK font. This is how SDK font * loading was handled in the past. * * @param family The family of the font * @param weight The weight of the font * @param posture The posture or posture of the font * @param size The point size of the font. This can be a fractional value * @profile desktop */ @Override public Font font(String family, FontWeight weight, FontPosture posture, float size) { FontFactory fontFactory = getFontFactoryFromPipeline(); if (!embeddedFontsLoaded && !fontFactory.isPlatformFont(family)) { loadEmbeddedFonts(); } // REMIND. Some day need to have better granularity. boolean bold = weight != null && weight.ordinal() >= FontWeight.BOLD.ordinal(); boolean italic = posture == FontPosture.ITALIC; PGFont prismFont = fontFactory.createFont(family, bold, italic, size); // Create Font and set implementation Font fxFont = Font.impl_NativeFont( prismFont, prismFont.getName(), prismFont.getFamilyName(), prismFont.getStyleName(), size); return fxFont; }