From b53d0783740def4569452e17eb27d26b01e35f7f Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Tue, 19 Apr 2005 10:24:40 +0000 Subject: [PATCH] FontMetrics.java: Reformatted. 2005-04-19 Michael Koch * java/awt/FontMetrics.java: Reformatted. (getFontRenderContext): Handle case when java.awt.Graphics context is given. 2005-04-19 Michael Koch * java/awt/FontMetrics.java (getStringBounds): New methods. From-SVN: r98398 --- libjava/ChangeLog | 12 + libjava/java/awt/FontMetrics.java | 700 ++++++++++++++++++-------------------- 2 files changed, 343 insertions(+), 369 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6ab56c5..d122fb0 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,17 @@ 2005-04-19 Michael Koch + * java/awt/FontMetrics.java: Reformatted. + (getFontRenderContext): Handle case when java.awt.Graphics context is + given. + +2005-04-19 Michael Koch + + * java/awt/FontMetrics.java + (getStringBounds): New methods. + + +2005-04-19 Michael Koch + * gnu/java/security/x509/X509Certificate.java (parse): Handle val == null case. diff --git a/libjava/java/awt/FontMetrics.java b/libjava/java/awt/FontMetrics.java index 1520d59..c1d1984 100644 --- a/libjava/java/awt/FontMetrics.java +++ b/libjava/java/awt/FontMetrics.java @@ -1,5 +1,5 @@ /* FontMetrics.java -- Information about about a fonts display characteristics - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,6 +40,7 @@ package java.awt; import java.awt.font.FontRenderContext; import java.awt.font.LineMetrics; +import java.awt.geom.Rectangle2D; import java.text.CharacterIterator; // FIXME: I leave many methods basically unimplemented. This @@ -49,7 +50,7 @@ import java.text.CharacterIterator; * This class returns information about the display characteristics of * a font. It is abstract, and concrete subclasses should implement at * least the following methods: - *

+ * *

    *
  • getAscent()
  • *
  • getDescent()
  • @@ -63,401 +64,362 @@ import java.text.CharacterIterator; */ public abstract class FontMetrics implements java.io.Serializable { + // Serialization constant. + private static final long serialVersionUID = 1681126225205050147L; + + /** + * This is the font for which metrics will be returned. + */ + protected Font font; + + /** + * Initializes a new instance of FontMetrics for the + * specified font. + * + * @param font The font to return metric information for. + */ + protected FontMetrics(Font font) + { + this.font = font; + } -/* - * Static Variables - */ - -// 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 FontMetrics 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 font that this object is creating metric information fo. + * + * @return The font for this object. + */ + public Font getFont() + { + return font; + } -/** - * 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 getMaxDecent (); -} + /** + * 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 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 - * getMaxDescent(). - */ -public int -getMaxDecent() -{ - return getDescent (); -} + /** + * 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 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 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 getMaxDecent(); + } -/** - * 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 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 + * getMaxDescent(). + */ + public int getMaxDecent() + { + return getDescent(); + } -/*************************************************************************/ + /** + * 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(char ch) -{ - 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); + /** + * 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)); -} + 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 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 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]); + /** + * 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() + { + int[] result = new int[256]; + for (char i = 0; i < 256; i++) + result[i] = charWidth(i); + return result; + } - return(total_width); -} + /** + * 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() + "]"); + } -/*************************************************************************/ + // Generic FontRenderContext used when getLineMetrics is called with a + // plain Graphics object. + private static final FontRenderContext gRC = new FontRenderContext(null, + false, + false); + + /** + * Returns a {@link LineMetrics} object constructed with the + * specified text and the {@link FontRenderContext} of the Graphics + * object when it is an instance of Graphics2D or a generic + * FontRenderContext with a null transform, not anti-aliased and not + * using fractional metrics. + * + * @param text The string to calculate metrics from. + * @param g The Graphics object that will be used. + * + * @return A new {@link LineMetrics} object. + */ + public LineMetrics getLineMetrics(String text, Graphics g) + { + return getLineMetrics(text, 0, text.length(), g); + } -/** - * 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() -{ - int [] result = new int[256]; - for(char i = 0; i < 256; i++) + /** + * Returns a {@link LineMetrics} object constructed with the + * specified text and the {@link FontRenderContext} of the Graphics + * object when it is an instance of Graphics2D or a generic + * FontRenderContext with a null transform, not anti-aliased and not + * using fractional metrics. + * + * @param text The string to calculate metrics from. + * @param begin Index of first character in text to measure. + * @param limit Index of last character in text to measure. + * @param g The Graphics object that will be used. + * + * @return A new {@link LineMetrics} object. + * + * @throws IndexOutOfBoundsException if the range [begin, limit] is + * invalid in text. + */ + public LineMetrics getLineMetrics(String text, int begin, int limit, + Graphics g) { - result[i]= charWidth(i); + FontRenderContext rc; + if (g instanceof Graphics2D) + rc = ((Graphics2D) g).getFontRenderContext(); + else + rc = gRC; + return font.getLineMetrics(text, begin, limit, rc); } - return(result); -} -/*************************************************************************/ + /** + * Returns a {@link LineMetrics} object constructed with the + * specified text and the {@link FontRenderContext} of the Graphics + * object when it is an instance of Graphics2D or a generic + * FontRenderContext with a null transform, not anti-aliased and not + * using fractional metrics. + * + * @param chars The string to calculate metrics from. + * @param begin Index of first character in text to measure. + * @param limit Index of last character in text to measure. + * @param g The Graphics object that will be used. + * + * @return A new {@link LineMetrics} object. + * + * @throws IndexOutOfBoundsException if the range [begin, limit] is + * invalid in text. + */ + public LineMetrics getLineMetrics(char[] chars, int begin, int limit, + Graphics g) + { + FontRenderContext rc; + if (g instanceof Graphics2D) + rc = ((Graphics2D) g).getFontRenderContext(); + else + rc = gRC; + return font.getLineMetrics(chars, begin, limit, rc); + } -/** - * 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() + "]"); -} + /** + * Returns a {@link LineMetrics} object constructed with the + * specified text and the {@link FontRenderContext} of the Graphics + * object when it is an instance of Graphics2D or a generic + * FontRenderContext with a null transform, not anti-aliased and not + * using fractional metrics. + * + * @param ci An iterator over the string to calculate metrics from. + * @param begin Index of first character in text to measure. + * @param limit Index of last character in text to measure. + * @param g The Graphics object that will be used. + * + * @return A new {@link LineMetrics} object. + * + * @throws IndexOutOfBoundsException if the range [begin, limit] is + * invalid in text. + */ + public LineMetrics getLineMetrics(CharacterIterator ci, int begin, + int limit, Graphics g) + { + FontRenderContext rc; + if (g instanceof Graphics2D) + rc = ((Graphics2D) g).getFontRenderContext(); + else + rc = gRC; + return font.getLineMetrics(ci, begin, limit, rc); + } + public Rectangle2D getStringBounds(String str, Graphics context) + { + return font.getStringBounds(str, getFontRenderContext(context)); + } -// Generic FontRenderContext used when getLineMetrics is called with a -// plain Graphics object. -private static final FontRenderContext gRC = new FontRenderContext(null, - false, - false); + public Rectangle2D getStringBounds(String str, int beginIndex, int limit, + Graphics context) + { + return font.getStringBounds(str, beginIndex, limit, + getFontRenderContext(context)); + } -/** - * Returns a {@link LineMetrics} object constructed with the - * specified text and the {@link FontRenderContext} of the Graphics - * object when it is an instance of Graphics2D or a generic - * FontRenderContext with a null transform, not anti-aliased and not - * using fractional metrics. - * - * @param text The string to calculate metrics from. - * @param g The Graphics object that will be used. - * - * @return A new {@link LineMetrics} object. - */ -public LineMetrics getLineMetrics(String text, Graphics g) -{ - return getLineMetrics(text, 0, text.length(), g); -} + public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, + Graphics context) + { + return font.getStringBounds(chars, beginIndex, limit, + getFontRenderContext(context)); + } -/** - * Returns a {@link LineMetrics} object constructed with the - * specified text and the {@link FontRenderContext} of the Graphics - * object when it is an instance of Graphics2D or a generic - * FontRenderContext with a null transform, not anti-aliased and not - * using fractional metrics. - * - * @param text The string to calculate metrics from. - * @param begin Index of first character in text to measure. - * @param limit Index of last character in text to measure. - * @param g The Graphics object that will be used. - * - * @return A new {@link LineMetrics} object. - * - * @throws IndexOutOfBoundsException if the range [begin, limit] is - * invalid in text. - */ -public LineMetrics getLineMetrics(String text, int begin, - int limit, Graphics g) -{ - FontRenderContext rc; - if (g instanceof Graphics2D) - rc = ((Graphics2D) g).getFontRenderContext(); - else - rc = gRC; - return font.getLineMetrics(text, begin, limit, rc); -} + public Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, + int limit, Graphics context) + { + return font.getStringBounds(ci, beginIndex, limit, + getFontRenderContext(context)); + } -/** - * Returns a {@link LineMetrics} object constructed with the - * specified text and the {@link FontRenderContext} of the Graphics - * object when it is an instance of Graphics2D or a generic - * FontRenderContext with a null transform, not anti-aliased and not - * using fractional metrics. - * - * @param chars The string to calculate metrics from. - * @param begin Index of first character in text to measure. - * @param limit Index of last character in text to measure. - * @param g The Graphics object that will be used. - * - * @return A new {@link LineMetrics} object. - * - * @throws IndexOutOfBoundsException if the range [begin, limit] is - * invalid in text. - */ -public LineMetrics getLineMetrics(char[] chars, int begin, - int limit, Graphics g) -{ - FontRenderContext rc; - if (g instanceof Graphics2D) - rc = ((Graphics2D) g).getFontRenderContext(); - else - rc = gRC; - return font.getLineMetrics(chars, begin, limit, rc); -} + private FontRenderContext getFontRenderContext(Graphics context) + { + if (context instanceof Graphics2D) + return ((Graphics2D) context).getFontRenderContext(); -/** - * Returns a {@link LineMetrics} object constructed with the - * specified text and the {@link FontRenderContext} of the Graphics - * object when it is an instance of Graphics2D or a generic - * FontRenderContext with a null transform, not anti-aliased and not - * using fractional metrics. - * - * @param ci An iterator over the string to calculate metrics from. - * @param begin Index of first character in text to measure. - * @param limit Index of last character in text to measure. - * @param g The Graphics object that will be used. - * - * @return A new {@link LineMetrics} object. - * - * @throws IndexOutOfBoundsException if the range [begin, limit] is - * invalid in text. - */ -public LineMetrics getLineMetrics(CharacterIterator ci, int begin, - int limit, Graphics g) -{ - FontRenderContext rc; - if (g instanceof Graphics2D) - rc = ((Graphics2D) g).getFontRenderContext(); - else - rc = gRC; - return font.getLineMetrics(ci, begin, limit, rc); -} + return gRC; + } } -- 2.7.4