001 /* 002 * Copyright 2007 - 2007 JEuclid, http://jeuclid.sf.net 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 /* $Id: FontFactory.java,v e6bd6c2d9bf4 2008/11/28 15:02:26 maxberger $ */ 018 019 package net.sourceforge.jeuclid.font; 020 021 import java.awt.Font; 022 import java.awt.FontFormatException; 023 import java.io.File; 024 import java.io.IOException; 025 import java.io.InputStream; 026 import java.util.List; 027 import java.util.Set; 028 029 /** 030 * Abstract factory to be used to create instances of java.awt.Font. The 031 * rationale behind this approach is that out-of-the box there is no way in 032 * java platform to load and <b>register</b> and internal font. In other 033 * words, Font.createFont and Font's constructor are not aware of each other. 034 * <p> 035 * The abstract FontFactory just provides a centralized access and extension 036 * point, delegating the actual functionality to subclasses. 037 * <p> 038 * How a concrete subclass of FontFactory is identified is subject to change 039 * in the future versions. 040 * 041 * @version $Revision: e6bd6c2d9bf4 $ 042 */ 043 public abstract class FontFactory { 044 045 /** Name for the default (sans serif) font. */ 046 public static final String SANSSERIF = "sansserif"; 047 048 private static FontFactory instance = new DefaultFontFactory(); 049 050 /** 051 * Return an instance of the currently configured concrete FontFactory. 052 * 053 * @return an instance of FontFactory 054 */ 055 public static FontFactory getInstance() { 056 return FontFactory.instance; 057 } 058 059 /** 060 * Create a font object with specified properties. Font name may refer to 061 * either 'built-in' or loaded externally and 'cached' font. 062 * 063 * @param name 064 * font name or font family name 065 * @param style 066 * font style 067 * @param size 068 * font size 069 * @return Font instance 070 * @see java.awt.Font#Font(String, int, int) 071 */ 072 public abstract Font getFont(final String name, final int style, 073 final float size); 074 075 /** 076 * Create a font object which is able to display the requested code point. 077 * Uses one of the list of preferred fonts is possible. If no matching 078 * font is found null is returned. 079 * 080 * @param preferredFonts 081 * List of preferred fonts 082 * @param codepoint 083 * code point which must be displayable 084 * @param style 085 * font style 086 * @param size 087 * font size 088 * @return a valid Font instance or null if no font could be found. 089 */ 090 public abstract Font getFont(final List<String> preferredFonts, 091 final int codepoint, final int style, final float size); 092 093 /** 094 * Load an external font from a file and 'register' (aka 'cache') it for 095 * future use. 096 * 097 * @param format 098 * font format (TTF or TYPE_1 currently supported by the 099 * platform) 100 * @param fontFile 101 * file which contains the font 102 * @return The newly created Font instance 103 * @throws FontFormatException 104 * if font contained in the file doesn't match the specified 105 * format 106 * @throws IOException 107 * in case of problem while reading the file 108 * @see java.awt.Font#createFont(int, File) 109 */ 110 public abstract Font registerFont(int format, File fontFile) 111 throws IOException, FontFormatException; 112 113 /** 114 * Load an external font from a stream and 'register' (aka 'cache') it for 115 * future use. 116 * 117 * @param format 118 * font format (TTF or TYPE_1 currently supported by the 119 * platform) 120 * @param fontStream 121 * file which contains the font 122 * @return The newly created Font instance 123 * @throws FontFormatException 124 * if font contained in the stream doesn't match the specified 125 * format 126 * @throws IOException 127 * in case of problem while reading the stream 128 * @see java.awt.Font#createFont(int, InputStream) 129 */ 130 public abstract Font registerFont(int format, InputStream fontStream) 131 throws IOException, FontFormatException; 132 133 /** 134 * Retrieve a list of all fonts registered with this fontFactory. 135 * 136 * @return A set of recognized font names 137 */ 138 public abstract Set<String> listFontNames(); 139 }