/* * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.javafx.font; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashMap; import java.util.Locale; import com.sun.glass.utils.NativeLibLoader; class MacFontFinder { static { AccessController.doPrivileged( (PrivilegedAction) () -> { NativeLibLoader.loadLibrary("javafx_font"); return null; } ); } private static final int SystemFontType = 2; /*kCTFontSystemFontType*/ private static final int MonospacedFontType = 1; /*kCTFontUserFixedPitchFontType*/ private native static String getFont(int type); public static String getSystemFont() { return getFont(SystemFontType); } public static String getMonospacedFont() { return getFont(MonospacedFontType); } native static float getSystemFontSize(); public static boolean populateFontFileNameMap( HashMap fontToFileMap, HashMap fontToFamilyNameMap, HashMap> familyToFontListMap, Locale locale) { if (fontToFileMap == null || fontToFamilyNameMap == null || familyToFontListMap == null) { return false; } if (locale == null) { locale = Locale.ENGLISH; } String[] fontData = getFontData(); if (fontData == null) return false; int i = 0; while (i < fontData.length) { String name = fontData[i++]; String family = fontData[i++]; String file = fontData[i++]; if (PrismFontFactory.debugFonts) { System.err.println("[MacFontFinder] Name=" + name); System.err.println("\tFamily=" + family); System.err.println("\tFile=" + file); } String lcName = name.toLowerCase(locale); String lcFamily = family.toLowerCase(locale); fontToFileMap.put(lcName, file); fontToFamilyNameMap.put(lcName, family); ArrayList list = familyToFontListMap.get(lcFamily); if (list == null) { list = new ArrayList(); familyToFontListMap.put(lcFamily, list); } list.add(name); } return true; } /* * * @param familyName * @return array of post-script font names */ private native static String[] getFontData(); }