diff options
Diffstat (limited to 'libjava/java/awt/FontMetrics.java')
-rw-r--r-- | libjava/java/awt/FontMetrics.java | 466 |
1 files changed, 329 insertions, 137 deletions
diff --git a/libjava/java/awt/FontMetrics.java b/libjava/java/awt/FontMetrics.java index dcd0946..890ffd1 100644 --- a/libjava/java/awt/FontMetrics.java +++ b/libjava/java/awt/FontMetrics.java @@ -1,146 +1,338 @@ -/* Copyright (C) 2000 Free Software Foundation +/* FontMetrics.java -- Information about about a fonts display characteristics + Copyright (C) 1999, 2002 Free Software Foundation, Inc. - This file is part of libgcj. +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.awt; +// FIXME: I leave many methods basically unimplemented. This +// should be reviewed. + /** - * Status: Stubbed; A very incomplete implementation. + * This class returns information about the display characteristics of + * a font. It is abstract, and concrete subclasses should implement at + * least the following methods: + * <p> + * <ul> + * <li>getAscent + * <li>getDescent + * <li>getLeading() + * <li>getMaxAdvance() + * <li>charWidth(char) + * <li>charsWidth(char[], int, int) + * </ul> + * + * @author Aaron M. Renn (arenn@urbanophile.com) + */ +public abstract class FontMetrics implements java.io.Serializable +{ + +/* + * Static Variables */ -public class FontMetrics implements java.io.Serializable -{ - protected Font font; - - protected FontMetrics(Font font) - { - this.font = font; - } - - public Font getFont() - { - return font; - } - - public int getLeading() - { - return getMaxAscent() + getMaxDescent() - (getAscent() + getDescent()); - } - - public int getAscent() - { - return getHeight() - (getDescent() + getLeading()); - } - - public int getDescent() - { - return getHeight() - (getLeading() + getDescent()); - } - - public int getHeight() - { - return getLeading() + getAscent() + getDescent(); - } - - public int getMaxAscent() - { - return getAscent(); - } - - public int getMaxDescent() - { - return getDescent(); - } - - /* @deprecated Use getMaxDescent() instead. */ - public int getMaxDecent() - { - return getMaxDescent(); - } - - /** @return max advance, or -1 if unknown. */ - public int getMaxAdvance() - { - return -1; - } - - - public int charWidth(int ch) - { - return charWidth((char) ch); - } - - public int charWidth(char ch) - { - Character chObj = new Character(ch); - return stringWidth(chObj.toString()); - } - - public int stringWidth(String str) - { - return charsWidth(str.toCharArray(), 0, str.length()); - } - - public int charsWidth(char[] data, int off, int len) - { - return stringWidth(new String(data, off, len)); - } - - public int bytesWidth(byte[] data, int off, int len) - { - return stringWidth(new String(data, off, len)); - } - - public int[] getWidths() - { - int[] widths = new int[256]; - for (char c=0; c<256; c++) widths[c] = charWidth(c); - return widths; - } - - public boolean hasUniformLineMetrics() - { - // FIXME - return false; - } - - // Don't have LineMetrics yet... - /* - public LineMetrics getLineMetrics(String str, Graphics context) - - public LineMetrics getLineMetrics(String str, int beginIndex, int limit, - Graphics context) - - public LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, - Graphics context) - - public LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, - int limit, Graphics context) - */ - - // Don't have Java2D yet. - /* - public Rectangle2D getStringBounds(String str, Graphics context) - - public Rectangle2D getStringBounds(String str, int beginIndex, int limit, - Graphics context) - - public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, - Graphics context) - - public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, - int limit, Graphics context) - - public Rectangle2D getMaxCharBounds(Graphics context) - */ - - public String toString() - { - return this.getClass() + "[font=" + font + ",ascent=" + getAscent() - + ",descent=" + getDescent() + ",height=" + getHeight() + "]"; - } +// Serialization constant +private static final long serialVersionUID = 1681126225205050147L; + +/*************************************************************************/ + +/* + * Instance Variables + */ + +/** + * This is the font for which metrics will be returned. + */ +protected Font font; + +/*************************************************************************/ + +/* + * Constructors + */ + +/** + * Initializes a new instance of <code>FontMetrics</code> for the + * specified font. + * + * @param font The font to return metric information for. + */ +protected +FontMetrics(Font font) +{ + this.font = font; +} + +/*************************************************************************/ + +/* + * Instance Methods + */ + +/** + * Returns the font that this object is creating metric information fo. + * + * @return The font for this object. + */ +public Font +getFont() +{ + return(font); +} + +/*************************************************************************/ + +/** + * Returns the leading, or spacing between lines, for this font. + * + * @return The font leading. + */ +public int +getLeading() +{ + return(0); +} + +/*************************************************************************/ + +/** + * Returns the ascent of the font, which is the distance from the base + * to the top of the majority of characters in the set. Some characters + * can exceed this value however. + * + * @return The font ascent. + */ +public int +getAscent() +{ + return(1); +} + +/*************************************************************************/ + +/** + * Returns the descent of the font, which is the distance from the base + * to the bottom of the majority of characters in the set. Some characters + * can exceed this value however. + * + * @return The font descent. + */ +public int +getDescent() +{ + return(1); +} + +/*************************************************************************/ + +/** + * Returns the height of a line in this font. This will be the sum + * of the leading, the ascent, and the descent. + * + * @return The height of the font. + */ +public int +getHeight() +{ + return(getAscent() + getDescent() + getLeading()); +} + +/*************************************************************************/ + +/** + * Returns the maximum ascent value. This is the maximum distance any + * character in the font rised above the baseline. + * + * @return The maximum ascent for this font. + */ +public int +getMaxAscent() +{ + return(getAscent()); +} + +/*************************************************************************/ + +/** + * Returns the maximum descent value. This is the maximum distance any + * character in the font extends below the baseline. + * + * @return The maximum descent for this font. + */ +public int +getMaxDescent() +{ + return(getDescent()); +} + +/*************************************************************************/ + +/** + * Returns the maximum descent value. This is the maximum distance any + * character in the font extends below the baseline. + * + * @return The maximum descent for this font. + * + * @deprecated This method is deprecated in favor of + * <code>getMaxDescent()</code>. + */ +public int +getMaxDecent() +{ + return(getMaxDescent()); +} + +/*************************************************************************/ + +/** + * Returns the width of the widest character in the font. + * + * @return The width of the widest character in the font. + */ +public int +getMaxAdvance() +{ + return(-1); +} + +/*************************************************************************/ + +/** + * Returns the width of the specified character. + * + * @param ch The character to return the width of. + * + * @return The width of the specified character. + */ +public int +charWidth(int ch) +{ + return(charWidth((char)ch)); +} + +/*************************************************************************/ + +/** + * Returns the width of the specified character. + * + * @param ch The character to return the width of. + * + * @return The width of the specified character. + */ +public int +charWidth(char ch) +{ + return(1); +} + +/*************************************************************************/ + +/** + * Returns the total width of the specified string + * + * @param str The string to return the width of. + * + * @return The width of the string. + */ +public int +stringWidth(String str) +{ + char[] buf = new char[str.length()]; + str.getChars(0, str.length(), buf, 0); + + return(charsWidth(buf, 0, buf.length)); +} + +/*************************************************************************/ + +/** + * Returns the total width of the specified character array. + * + * @param buf The character array containing the data. + * @param offset The offset into the array to start calculating from. + * @param len The total number of bytes to process. + * + * @return The width of the requested characters. + */ +public int +charsWidth(char buf[], int offset, int len) +{ + int total_width = 0; + for (int i = offset; i < len; i++) + total_width = charWidth(buf[i]); + + return(total_width); } + +/*************************************************************************/ + +/** + * Returns the total width of the specified byte array. + * + * @param buf The byte array containing the data. + * @param offset The offset into the array to start calculating from. + * @param len The total number of bytes to process. + * + * @return The width of the requested characters. + */ +public int +bytesWidth(byte buf[], int offset, int len) +{ + int total_width = 0; + for (int i = offset; i < len; i++) + total_width = charWidth((char)buf[i]); + + return(total_width); +} + +/*************************************************************************/ + +/** + * Returns the widths of the first 256 characters in the font. + * + * @return The widths of the first 256 characters in the font. + */ +public int[] +getWidths() +{ + return(new int[256]); +} + +/*************************************************************************/ + +/** + * Returns a string representation of this object. + * + * @return A string representation of this object. + */ +public String +toString() +{ + return (this.getClass() + "[font=" + font + ",ascent=" + getAscent() + + ",descent=" + getDescent() + ",height=" + getHeight() + "]"); +} + +} // class FontMetrics + |