aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/awt/FontMetrics.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/awt/FontMetrics.java')
-rw-r--r--libjava/java/awt/FontMetrics.java466
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
+