2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / libjava / java / awt / FontMetrics.java
blobce340dadbe6e8da86858869e4a974182b403334f
1 /* FontMetrics.java -- Information about about a fonts display characteristics
2 Copyright (C) 1999, 2002 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA.
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
39 package java.awt;
41 // FIXME: I leave many methods basically unimplemented. This
42 // should be reviewed.
44 /**
45 * This class returns information about the display characteristics of
46 * a font. It is abstract, and concrete subclasses should implement at
47 * least the following methods:
48 * <p>
49 * <ul>
50 * <li>getAscent
51 * <li>getDescent
52 * <li>getLeading()
53 * <li>getMaxAdvance()
54 * <li>charWidth(char)
55 * <li>charsWidth(char[], int, int)
56 * </ul>
58 * @author Aaron M. Renn (arenn@urbanophile.com)
60 public abstract class FontMetrics implements java.io.Serializable
64 * Static Variables
67 // Serialization constant
68 private static final long serialVersionUID = 1681126225205050147L;
70 /*************************************************************************/
73 * Instance Variables
76 /**
77 * This is the font for which metrics will be returned.
79 protected Font font;
81 /*************************************************************************/
84 * Constructors
87 /**
88 * Initializes a new instance of <code>FontMetrics</code> for the
89 * specified font.
91 * @param font The font to return metric information for.
93 protected
94 FontMetrics(Font font)
96 this.font = font;
99 /*************************************************************************/
102 * Instance Methods
106 * Returns the font that this object is creating metric information fo.
108 * @return The font for this object.
110 public Font
111 getFont()
113 return(font);
116 /*************************************************************************/
119 * Returns the leading, or spacing between lines, for this font.
121 * @return The font leading.
123 public int
124 getLeading()
126 return(0);
129 /*************************************************************************/
132 * Returns the ascent of the font, which is the distance from the base
133 * to the top of the majority of characters in the set. Some characters
134 * can exceed this value however.
136 * @return The font ascent.
138 public int
139 getAscent()
141 return(1);
144 /*************************************************************************/
147 * Returns the descent of the font, which is the distance from the base
148 * to the bottom of the majority of characters in the set. Some characters
149 * can exceed this value however.
151 * @return The font descent.
153 public int
154 getDescent()
156 return(1);
159 /*************************************************************************/
162 * Returns the height of a line in this font. This will be the sum
163 * of the leading, the ascent, and the descent.
165 * @return The height of the font.
167 public int
168 getHeight()
170 return(getAscent() + getDescent() + getLeading());
173 /*************************************************************************/
176 * Returns the maximum ascent value. This is the maximum distance any
177 * character in the font rised above the baseline.
179 * @return The maximum ascent for this font.
181 public int
182 getMaxAscent()
184 return(getAscent());
187 /*************************************************************************/
190 * Returns the maximum descent value. This is the maximum distance any
191 * character in the font extends below the baseline.
193 * @return The maximum descent for this font.
195 public int
196 getMaxDescent()
198 return(getDescent());
201 /*************************************************************************/
204 * Returns the maximum descent value. This is the maximum distance any
205 * character in the font extends below the baseline.
207 * @return The maximum descent for this font.
209 * @deprecated This method is deprecated in favor of
210 * <code>getMaxDescent()</code>.
212 public int
213 getMaxDecent()
215 return(getMaxDescent());
218 /*************************************************************************/
221 * Returns the width of the widest character in the font.
223 * @return The width of the widest character in the font.
225 public int
226 getMaxAdvance()
228 return(-1);
231 /*************************************************************************/
234 * Returns the width of the specified character.
236 * @param ch The character to return the width of.
238 * @return The width of the specified character.
240 public int
241 charWidth(int ch)
243 return(charWidth((char)ch));
246 /*************************************************************************/
249 * Returns the width of the specified character.
251 * @param ch The character to return the width of.
253 * @return The width of the specified character.
255 public int
256 charWidth(char ch)
258 return(1);
261 /*************************************************************************/
264 * Returns the total width of the specified string
266 * @param str The string to return the width of.
268 * @return The width of the string.
270 public int
271 stringWidth(String str)
273 char[] buf = new char[str.length()];
274 str.getChars(0, str.length(), buf, 0);
276 return(charsWidth(buf, 0, buf.length));
279 /*************************************************************************/
282 * Returns the total width of the specified character array.
284 * @param buf The character array containing the data.
285 * @param offset The offset into the array to start calculating from.
286 * @param len The total number of bytes to process.
288 * @return The width of the requested characters.
290 public int
291 charsWidth(char buf[], int offset, int len)
293 int total_width = 0;
294 for (int i = offset; i < len; i++)
295 total_width = charWidth(buf[i]);
297 return(total_width);
300 /*************************************************************************/
303 * Returns the total width of the specified byte array.
305 * @param buf The byte array containing the data.
306 * @param offset The offset into the array to start calculating from.
307 * @param len The total number of bytes to process.
309 * @return The width of the requested characters.
311 public int
312 bytesWidth(byte buf[], int offset, int len)
314 int total_width = 0;
315 for (int i = offset; i < len; i++)
316 total_width = charWidth((char)buf[i]);
318 return(total_width);
321 /*************************************************************************/
324 * Returns the widths of the first 256 characters in the font.
326 * @return The widths of the first 256 characters in the font.
328 public int[]
329 getWidths()
331 return(new int[256]);
334 /*************************************************************************/
337 * Returns a string representation of this object.
339 * @return A string representation of this object.
341 public String
342 toString()
344 return (this.getClass() + "[font=" + font + ",ascent=" + getAscent()
345 + ",descent=" + getDescent() + ",height=" + getHeight() + "]");
348 } // class FontMetrics