@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;
  }