diff options
Diffstat (limited to 'awt/org/apache/harmony/awt/gl/font/FontManager.java')
-rw-r--r-- | awt/org/apache/harmony/awt/gl/font/FontManager.java | 819 |
1 files changed, 0 insertions, 819 deletions
diff --git a/awt/org/apache/harmony/awt/gl/font/FontManager.java b/awt/org/apache/harmony/awt/gl/font/FontManager.java deleted file mode 100644 index 8354e25..0000000 --- a/awt/org/apache/harmony/awt/gl/font/FontManager.java +++ /dev/null @@ -1,819 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * @author Ilya S. Okomin - * @version $Revision$ - */ -package org.apache.harmony.awt.gl.font; - -import java.awt.Font; -import java.awt.peer.FontPeer; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.lang.ref.ReferenceQueue; -import java.lang.ref.SoftReference; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Locale; -import java.util.Properties; -import java.util.Vector; - -import org.apache.harmony.awt.gl.CommonGraphics2DFactory; -import org.apache.harmony.luni.util.NotImplementedException; - - -public abstract class FontManager { - - //???AWT - boolean NOT_IMP = false; - - /** - * array of font families names - */ - public String[] allFamilies; - - public static final String DEFAULT_NAME = "Default"; /* Default font name */ //$NON-NLS-1$ - public static final String DIALOG_NAME = "Dialog"; /* Dialog font name */ //$NON-NLS-1$ - - /** - * Set of constants applicable to the TrueType 'name' table. - */ - public static final byte FAMILY_NAME_ID = 1; /* Family name identifier */ - public static final byte FONT_NAME_ID = 4; /* Full font name identifier */ - public static final byte POSTSCRIPT_NAME_ID = 6; /* PostScript name identifier */ - public static final short ENGLISH_LANGID = 0x0409; /* English (United States)language identifier */ - - /** - * Set of constants describing font type. - */ - public static final byte FONT_TYPE_TT = 4; /* TrueType type (TRUETYPE_FONTTYPE) */ - public static final byte FONT_TYPE_T1 = 2; /* Type1 type (DEVICE_FONTTYPE) */ - public static final byte FONT_TYPE_UNDEF = 0; /* Undefined type */ - - // logical family types (indices in FontManager.LOGICAL_FONT_NAMES) - static final int DIALOG = 3; // FF_SWISS - static final int SANSSERIF = 1; // FF_SWISS - static final int DIALOGINPUT = 4; // FF_MODERN - static final int MONOSPACED = 2; // FF_MODERN - static final int SERIF = 0; // FF_ROMAN - - - /** - * FontProperty related constants. - */ - public static final String PLATFORM_FONT_NAME = "PlatformFontName"; //$NON-NLS-1$ - public static final String LOGICAL_FONT_NAME = "LogicalFontName"; //$NON-NLS-1$ - public static final String COMPONENT_INDEX = "ComponentIndex"; //$NON-NLS-1$ - public static final String STYLE_INDEX = "StyleIndex"; //$NON-NLS-1$ - - public static final String[] FONT_MAPPING_KEYS = { - "LogicalFontName.StyleName.ComponentIndex", "LogicalFontName.ComponentIndex" //$NON-NLS-1$ //$NON-NLS-2$ - }; - - public static final String FONT_CHARACTER_ENCODING = "fontcharset.LogicalFontName.ComponentIndex"; //$NON-NLS-1$ - - public static final String EXCLUSION_RANGES = "exclusion.LogicalFontName.ComponentIndex"; //$NON-NLS-1$ - - public static final String FONT_FILE_NAME = "filename.PlatformFontName"; //$NON-NLS-1$ - - /** - * Available logical font families names. - */ - public static final String[] LOGICAL_FONT_FAMILIES = { - "Serif", "SansSerif", "Monospaced", "Dialog", "DialogInput" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - }; - - /** - * Available logical font names. - */ - public static final String[] LOGICAL_FONT_NAMES = { - "serif", "serif.plain", "serif.bold", "serif.italic", "serif.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "sansserif", "sansserif.plain", "sansserif.bold", "sansserif.italic", "sansserif.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "monospaced", "monospaced.plain", "monospaced.bold", "monospaced.italic", "monospaced.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "dialog", "dialog.plain", "dialog.bold", "dialog.italic", "dialog.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "dialoginput", "dialoginput.plain", "dialoginput.bold", "dialoginput.italic", "dialoginput.bolditalic" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - }; - - /** - * Available logical font face names. - */ - public static final String[] LOGICAL_FONT_FACES = { - "Serif", "Serif.plain", "Serif.bold", "Serif.italic", "Serif.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "Sansserif", "Sansserif.plain", "Sansserif.bold", "Sansserif.italic", "Sansserif.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "Monospaced", "Monospaced.plain", "Monospaced.bold", "Monospaced.italic", "Monospaced.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "Dialog", "Dialog.plain", "Dialog.bold", "Dialog.italic", "Dialog.bolditalic", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "Dialoginput", "Dialoginput.plain", "Dialoginput.bold", "Dialoginput.italic", "Dialoginput.bolditalic" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - }; - - /** - * Set of font style names. - * Font.getStyle() corresponds to indexes in STYLE_NAMES array. - */ - public static final String[] STYLE_NAMES = { - "plain", "bold", "italic", "bolditalic" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - }; - - /** - * Logical font styles names table where font styles names used - * as the key and the value is the index of this style name. - */ - private static final Hashtable<String, Integer> style_keys = new Hashtable<String, Integer>(4); - - /** - * Initialize font styles keys table. - */ - static { - for (int i = 0; i < STYLE_NAMES.length; i++){ - style_keys.put(STYLE_NAMES[i], Integer.valueOf(i)); - } - } - - /** - * Return font style from the logical style name. - * - * @param lName style name of the logical face - */ - public static int getLogicalStyle(String lName){ - Integer value = style_keys.get(lName); - return value != null ? value.intValue(): -1; - } - - /** - * Set of possible "os" property values. - */ - public static final String[] OS_VALUES = { - "NT", "98", "2000", "Me", "XP", // For Windows //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - "Redhat", "Turbo", "SuSE" // For Linux //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - }; - - /** - * Set of possible font.property file names. - * Language, Country, Encoding, OS, Version should be replaced with - * the values from current configuration. - */ - public static final String[] FP_FILE_NAMES = { - "/lib/font.properties.Language_Country_Encoding.OSVersion", //$NON-NLS-1$ - "/lib/font.properties.Language_Country_Encoding.OS", //$NON-NLS-1$ - "/lib/font.properties.Language_Country_Encoding.Version", //$NON-NLS-1$ - "/lib/font.properties.Language_Country_Encoding", //$NON-NLS-1$ - "/lib/font.properties.Language_Country.OSVersion", //$NON-NLS-1$ - "/lib/font.properties.Language_Country.OS", //$NON-NLS-1$ - "/lib/font.properties.Language_Country.Version", //$NON-NLS-1$ - "/lib/font.properties.Language_Country", //$NON-NLS-1$ - "/lib/font.properties.Language_Encoding.OSVersion", //$NON-NLS-1$ - "/lib/font.properties.Language_Encoding.OS", //$NON-NLS-1$ - "/lib/font.properties.Language_Encoding.Version", //$NON-NLS-1$ - "/lib/font.properties.Language_Encoding", //$NON-NLS-1$ - "/lib/font.properties.Language.OSVersion", //$NON-NLS-1$ - "/lib/font.properties.Language.OS", //$NON-NLS-1$ - "/lib/font.properties.Language.Version", //$NON-NLS-1$ - "/lib/font.properties.Language", //$NON-NLS-1$ - "/lib/font.properties.Encoding.OSVersion", //$NON-NLS-1$ - "/lib/font.properties.Encoding.OS", //$NON-NLS-1$ - "/lib/font.properties.Encoding.Version", //$NON-NLS-1$ - "/lib/font.properties.Encoding", //$NON-NLS-1$ - "/lib/font.properties.OSVersion", //$NON-NLS-1$ - "/lib/font.properties.OS", //$NON-NLS-1$ - "/lib/font.properties.Version", //$NON-NLS-1$ - "/lib/font.properties" //$NON-NLS-1$ - }; - - /** - * Table with all available font properties corresponding - * to the current system configuration. - */ - public Hashtable<String, Vector<FontProperty>> fProperties = new Hashtable<String, Vector<FontProperty>>(); - - public FontManager(){ - allFamilies = getAllFamilies(); - /* - * Creating and registering shutdown hook to free resources - * before object is destroyed. - */ - //???AWT - //DisposeNativeHook shutdownHook = new DisposeNativeHook(); - //Runtime.getRuntime().addShutdownHook(shutdownHook); - } - - /** - * Maximum number of unreferenced font peers to keep. - */ - public static final int EMPTY_FONTS_CAPACITY = 10; - - /** - * Locale - Language ID hash table. - */ - Hashtable<String, Short> tableLCID = new Hashtable<String, Short>(); - - /** - * Hash table that contains FontPeers instances. - */ - public Hashtable<String, HashMapReference> fontsTable = new Hashtable<String, HashMapReference>(); - - /** - * ReferenceQueue for HashMapReference objects to check - * if they were collected by garbage collector. - */ - public ReferenceQueue<FontPeer> queue = new ReferenceQueue<FontPeer>(); - - /** - * Singleton instance - */ - public final static FontManager inst = CommonGraphics2DFactory.inst.getFontManager(); - - /** - * Gets singleton instance of FontManager - * - * @return instance of FontManager implementation - */ - public static FontManager getInstance() { - return inst; - } - - /** - * Returns platform-dependent Font peer created from the specified - * Font object from the table with cached FontPeers instances. - * - * Note, this method checks whether FontPeer with specified parameters - * exists in the table with cached FontPeers' instances. If there is no needed - * instance - it is created and cached. - * - * @param fontName name of the font - * @param _fontStyle style of the font - * @param size font size - * - * @return platform dependent FontPeer implementation created from - * the specified parameters - */ - public FontPeer getFontPeer(String fontName, int _fontStyle, int size) { - updateFontsTable(); - - FontPeer peer = null; - String key; - String name; - int fontStyle = _fontStyle; - - int logicalIndex = getLogicalFaceIndex(fontName); - - if (logicalIndex != -1){ - name = getLogicalFaceFromFont(fontStyle, logicalIndex); - fontStyle = getStyleFromLogicalFace(name); - key = name.concat(String.valueOf(size)); - } else { - name = fontName; - key = name.concat(String.valueOf(fontStyle)). - concat(String.valueOf(size)); - } - - HashMapReference hmr = fontsTable.get(key); - if (hmr != null) { - peer = hmr.get(); - } - - if (peer == null) { - peer = createFontPeer(name, fontStyle, size, logicalIndex); - if (peer == null){ - peer = getFontPeer(DIALOG_NAME, fontStyle, size); - } - fontsTable.put(key, new HashMapReference(key, peer, queue)); - } - - return peer; - } - - /** - * Returns instance of font peer (logical or physical) according to the - * specified parameters. - * - * @param name font face name - * @param style style of the font - * @param size size of the font - * @param logicalIndex index of the logical face name in LOGICAL_FONT_FACES - * array or -1 if desired font peer is not logical. - */ - private FontPeer createFontPeer(String name, int style, int size, int logicalIndex){ - FontPeer peer; - if (logicalIndex != -1){ - peer = createLogicalFontPeer(name, style, size); - }else { - peer = createPhysicalFontPeer(name, style, size); - } - - return peer; - } - - /** - * Returns family name for logical face names as a parameter. - * - * @param faceName logical font face name - */ - public String getFamilyFromLogicalFace(String faceName){ - int pos = faceName.indexOf("."); //$NON-NLS-1$ - if (pos == -1){ - return faceName; - } - - return faceName.substring(0, pos); - } - - /** - * Returns new logical font peer for the parameters specified using font - * properties. - * - * @param faceName face name of the logical font - * @param style style of the font - * @param size font size - * - */ - private FontPeer createLogicalFontPeer(String faceName, int style, int size){ - String family = getFamilyFromLogicalFace(faceName); - FontProperty[] fps = getFontProperties(family.toLowerCase() + "." + style); //$NON-NLS-1$ - if (fps != null){ - int numFonts = fps.length; - FontPeerImpl[] physicalFonts = new FontPeerImpl[numFonts]; - for (int i = 0; i < numFonts; i++){ - FontProperty fp = fps[i]; - - String name = fp.getName(); - int fpStyle = fp.getStyle(); - String key = name.concat(String.valueOf(fpStyle)). - concat(String.valueOf(size)); - - HashMapReference hmr = fontsTable.get(key); - if (hmr != null) { - physicalFonts[i] = (FontPeerImpl)hmr.get(); - } - - if (physicalFonts[i] == null){ - physicalFonts[i] = (FontPeerImpl)createPhysicalFontPeer(name, fpStyle, size); - fontsTable.put(key, new HashMapReference(key, physicalFonts[i], queue)); - } - - if (physicalFonts[i] == null){ - physicalFonts[i] = (FontPeerImpl)getDefaultFont(style, size); - } - } - return new CompositeFont(family, faceName, style, size, fps, physicalFonts); - } - - // if there is no property for this logical font - default font is to be - // created - FontPeerImpl peer = (FontPeerImpl)getDefaultFont(style, size); - - return peer; - } - - /** - * Returns new physical font peer for the parameters specified using font properties - * This method must be overridden by subclasses implementations. - * - * @param faceName face name or family name of the font - * @param style style of the font - * @param size font size - * - */ - public abstract FontPeer createPhysicalFontPeer(String name, int style, int size); - - /** - * Returns default font peer class with "Default" name that is usually - * used when font with specified font names and style doesn't exsist - * on a system. - * - * @param style style of the font - * @param size size of the font - */ - public FontPeer getDefaultFont(int style, int size){ - updateFontsTable(); - - FontPeer peer = null; - String key = DEFAULT_NAME.concat(String.valueOf(style)). - concat(String.valueOf(size)); - - HashMapReference hmr = fontsTable.get(key); - if (hmr != null) { - peer = hmr.get(); - } - - if (peer == null) { - peer = createDefaultFont(style, size); - - ((FontPeerImpl)peer).setFamily(DEFAULT_NAME); - ((FontPeerImpl)peer).setPSName(DEFAULT_NAME); - ((FontPeerImpl)peer).setFontName(DEFAULT_NAME); - - fontsTable.put(key, new HashMapReference(key, peer, queue)); - } - - return peer; - } - - /** - * - * Returns new default font peer with "Default" name for the parameters - * specified. This method must be overridden by subclasses implementations. - * - * @param style style of the font - * @param size size of the font - */ - public abstract FontPeer createDefaultFont(int style, int size); - - /** - * Returns face name of the logical font, which is the result - * of specified font style and face style union. - * - * @param fontStyle specified style of the font - * @param logicalIndex index of the specified face from the - * LOGICAL_FONT_FACES array - * @return resulting face name - */ - public String getLogicalFaceFromFont(int fontStyle, int logicalIndex){ - int style = 0; - String name = LOGICAL_FONT_FACES[logicalIndex]; - int pos = name.indexOf("."); //$NON-NLS-1$ - - if (pos == -1){ - return createLogicalFace(name, fontStyle); - } - - String styleName = name.substring(pos+1); - name = name.substring(0, pos); - - // appending font style to the face style - style = fontStyle | getLogicalStyle(styleName); - - return createLogicalFace(name, style); - } - - /** - * Function returns style value from logical face name. - * - * @param name face name - * @return font style - */ - public int getStyleFromLogicalFace(String name){ - int style; - int pos = name.indexOf("."); //$NON-NLS-1$ - - if (pos == -1){ - return Font.PLAIN; - } - - String styleName = name.substring(pos+1); - - style = getLogicalStyle(styleName); - - return style; - } - - /** - * Returns logical face name corresponding to the logical - * family name and style of the font. - * - * @param family font family - * @param styleIndex index of the style name from the STYLE_NAMES array - */ - public String createLogicalFace(String family, int styleIndex){ - return family + "." + STYLE_NAMES[styleIndex]; //$NON-NLS-1$ - } - - /** - * Return language Id from LCID hash corresponding to the specified locale - * - * @param l specified locale - */ - public Short getLCID(Locale l){ - if (this.tableLCID.size() == 0){ - initLCIDTable(); - } - - return tableLCID.get(l.toString()); - } - - /** - * Platform-dependent LCID table init. - */ - public abstract void initLCIDTable(); - - /** - * Freeing native resources. This hook is used to avoid - * sudden application exit and to free resources created in native code. - */ - private class DisposeNativeHook extends Thread { - - @Override - public void run() { - try{ - /* Disposing native font peer's resources */ - Enumeration<String> kEnum = fontsTable.keys(); - - while(kEnum.hasMoreElements()){ - Object key = kEnum.nextElement(); - HashMapReference hmr = fontsTable.remove(key); - FontPeerImpl delPeer = (FontPeerImpl)hmr.get(); - - if ((delPeer != null) && (delPeer.getClass() != CompositeFont.class)){ - // there's nothing to dispose in CompositeFont objects - delPeer.dispose(); - } - } - } catch (Throwable t){ - throw new RuntimeException(t); - } - } - } - - /** - * Returns File object, created in a directory - * according to the System, where JVM is being ran. - * - * In Linux case we use ".fonts" directory (for fontconfig purpose), - * where font file from the stream will be stored, hence in LinuxFontManager this - * method is overridden. - * In Windows case we use Windows temp directory (default implementation) - * - */ - public File getTempFontFile()throws IOException{ - //???AWT - /* - File fontFile = File.createTempFile("jFont", ".ttf"); //$NON-NLS-1$ //$NON-NLS-2$ - fontFile.deleteOnExit(); - - return fontFile; - */ - if(NOT_IMP) - throw new NotImplementedException("getTempFontFile not Implemented"); - return null; - } - - /** - * Returns File object with font properties. It's name obtained using current - * system configuration properties and locale settings. If no appropriate - * file is found method returns null. - */ - public static File getFontPropertyFile(){ - File file = null; - - String javaHome = System.getProperty("java.home"); //$NON-NLS-1$ - Locale l = Locale.getDefault(); - String language = l.getLanguage(); - String country = l.getCountry(); - String fileEncoding = System.getProperty("file.encoding"); //$NON-NLS-1$ - - String os = System.getProperty("os.name"); //$NON-NLS-1$ - - int i = 0; - - // OS names from system properties don't match - // OS identifiers used in font.property files - for (; i < OS_VALUES.length; i++){ - if (os.endsWith(OS_VALUES[i])){ - os = OS_VALUES[i]; - break; - } - } - - if (i == OS_VALUES.length){ - os = null; - } - - String version = System.getProperty("os.version"); //$NON-NLS-1$ - String pathname; - - for (i = 0; i < FP_FILE_NAMES.length; i++){ - pathname = FP_FILE_NAMES[i]; - if (os != null){ - pathname = pathname.replaceFirst("OS", os); //$NON-NLS-1$ - } - - pathname = javaHome + pathname; - - pathname = pathname.replaceAll("Language", language). //$NON-NLS-1$ - replaceAll("Country", country). //$NON-NLS-1$ - replaceAll("Encoding", fileEncoding). //$NON-NLS-1$ - replaceAll("Version", version); //$NON-NLS-1$ - - file = new File(pathname); - - if (file.exists()){ - break; - } - } - - return file.exists() ? file : null; - } - - /** - * Returns an array of integer range values - * if the parameter exclusionString has format: - * Range - * Range [, exclusionString] - * - * Range: - * Char-Char - * - * Char: - * HexDigit HexDigit HexDigit HexDigit - * - * Method returns null if the specified string is null. - * - * @param exclusionString string parameter in specified format - */ - public static int[] parseIntervals(String exclusionString){ - int[] results = null; - - if (exclusionString == null){ - return null; - } - - String[] intervals = exclusionString.split(","); //$NON-NLS-1$ - - if (intervals != null){ - int num = intervals.length; - if (num > 0){ - results = new int[intervals.length << 1]; - for (int i = 0; i < intervals.length; i++){ - String ranges[] = intervals[i].split("-"); //$NON-NLS-1$ - results[i*2] = Integer.parseInt(ranges[0], 16); - results[i*2+1] = Integer.parseInt(ranges[1], 16); - - } - } - } - return results; - } - - /** - * Returns Properties from the properties file or null if - * there is an error with FileInputStream processing. - * - * @param file File object containing properties - */ - public static Properties getProperties(File file){ - Properties props = null; - FileInputStream fis = null; - try{ - fis = new FileInputStream(file); - props = new Properties(); - props.load(fis); - } catch (Exception e){ - System.out.println(e); - } - return props; - } - - /** - * Returns an array of FontProperties from the properties file - * with the specified property name "logical face.style". E.g. - * "dialog.2" corresponds to the font family Dialog with bold style. - * - * @param fpName key of the font properties in the properties set - */ - public FontProperty[] getFontProperties(String fpName){ - Vector<FontProperty> props = fProperties.get(fpName); - - if (props == null){ - return null; - } - - int size = props.size(); - - if (size == 0){ - return null; - } - - FontProperty[] fps = new FontProperty[size]; - for (int i=0; i < fps.length; i++){ - fps[i] = props.elementAt(i); - } - return fps; - } - - /** - * Returns index of the font name in array of font names or -1 if - * this font is not logical. - * - * @param fontName specified font name - */ - public static int getLogicalFaceIndex(String fontName){ - for (int i=0; i<LOGICAL_FONT_NAMES.length; i++ ){ - if (LOGICAL_FONT_NAMES[i].equalsIgnoreCase(fontName)){ - return i; - } - } - return -1; - } - - /** - * Returns true if specified family name is available in this - * GraphicsEnvironment. - * - * @param familyName the specified font family name - */ - public boolean isFamilyExist(String familyName){ - return (getFamilyIndex(familyName) != -1); - } - - /** - * Returns index of family name from the array of family names available in - * this GraphicsEnvironment or -1 if no family name was found. - * - * @param familyName specified font family name - */ - public int getFamilyIndex(String familyName){ - for (int i=0; i<allFamilies.length; i++ ){ - if (familyName.equalsIgnoreCase(allFamilies[i])){ - return i; - } - } - return -1; - } - - /** - * Returns family with index specified from the array of family names available in - * this GraphicsEnvironment. - * - * @param index index of the family in families names array - */ - public String getFamily(int index){ - return allFamilies[index]; - } - /** - * Returns index of face name from the array of face names available in - * this GraphicsEnvironment or -1 if no face name was found. Default return - * value is -1, method must be overridden by FontManager implementation. - * - * @param faceName font face name which index is to be searched - */ - public int getFaceIndex(String faceName){ - return -1; - } - - public abstract String[] getAllFamilies(); - - public abstract Font[] getAllFonts(); - - /** - * Class contains SoftReference instance that can be stored in the - * Hashtable by means of key field corresponding to it. - */ - private class HashMapReference extends SoftReference<FontPeer> { - - /** - * The key for Hashtable. - */ - private final String key; - - /** - * Creates a new soft reference with the key specified and - * adding this reference in the reference queue specified. - * - * @param key the key in Hashtable - * @param value object that corresponds to the key - * @param queue reference queue where reference is to be added - */ - public HashMapReference(final String key, final FontPeer value, - final ReferenceQueue<FontPeer> queue) { - super(value, queue); - this.key = key; - } - - /** - * Returns the key that corresponds to the SoftReference instance - * - * @return the key in Hashtable with cached references - */ - public Object getKey() { - return key; - } - } - - /** - * Removes keys from the Hashtable with font peers which corresponding - * HashMapReference objects were garbage collected. - */ - private void updateFontsTable() { - HashMapReference r; - //???AWT - //while ((r = (HashMapReference)queue.poll()) != null) { - // fontsTable.remove(r.getKey()); - //} - } - -} - - |