package org.smartly.application.desktopgap.impl.app; import javafx.scene.text.Font; import org.smartly.Smartly; import org.smartly.application.desktopgap.DesktopGap; import org.smartly.application.desktopgap.impl.resources.AppResources; import org.smartly.commons.util.*; import java.io.File; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; /** * Font loader */ public final class DesktopFonts { private static final double SIZE = 10.0; private static final String PATH_STORE_FONTS = PathUtils.concat(DesktopGap.getStoreDir(), "/fonts"); private static final String[] FONTS = new String[]{ "AIRBORNERegular.ttf", "Bazar.ttf", "OpenSans-Semibold.ttf", "Oxygen-Light.ttf", "Oxygen-Regular.ttf", "Oxygen-Bold.ttf" }; private final Set<String> _fonts; private final Set<String> _dgfonts; private DesktopFonts() { _fonts = new HashSet<String>(); _dgfonts = new HashSet<String>(); this.initFonts(); } /** * Load Default fonts from AppResource folder */ public void loadDefaultFonts() { for (final String font : FONTS) { try { final String path = AppResources.getFont(font); this.loadFont(path); } catch (Throwable t) { Smartly.getLogger().severe(this, FormatUtils.format("Error loading '{0}': {1}", font, t)); } } } public void loadStoreFonts() { final List<File> fonts = new LinkedList<File>(); FileUtils.listFiles(fonts, new File(PATH_STORE_FONTS)); if (!fonts.isEmpty()) { for (final File font : fonts) { if (StringUtils.hasText(PathUtils.getFilename(font.getAbsolutePath(), false))) { final String path = "file:".concat(font.getAbsolutePath()); this.loadFont(path); } } } } public Font loadFont(final String fontPath) { try { final Font font = Font.loadFont(fontPath, SIZE); final String name = font.getName(); _fonts.add(name); _dgfonts.add(name); return font; } catch (Throwable t) { return null; } } public Font getFont(final String fontName, final double size) { if (_fonts.contains(fontName)) { final Font font = Font.font(fontName, size); return font; } return Font.getDefault(); } public String[] getInternalFontNames() { return _dgfonts.toArray(new String[_dgfonts.size()]); } public String[] getSystemFontNames() { return _dgfonts.toArray(new String[_fonts.size()]); } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ private void initFonts() { try { final List<String> fonts = Font.getFontNames(); if (!CollectionUtils.isEmpty(fonts)) { _fonts.addAll(fonts); } } catch (Throwable t) { Smartly.getLogger().severe(this, t); } } // -------------------------------------------------------------------- // S T A T I C // -------------------------------------------------------------------- private static DesktopFonts __instance; private static DesktopFonts getInstance() { if (null == __instance) { __instance = new DesktopFonts(); } return __instance; } public static void init() { getInstance().loadDefaultFonts(); getInstance().loadStoreFonts(); } public static String[] getFontNames() { return getInstance().getInternalFontNames(); } public static String[] getAllFontNames() { return getInstance().getSystemFontNames(); } }