Commit b53d0783 by Michael Koch Committed by Michael Koch

FontMetrics.java: Reformatted.

2005-04-19  Michael Koch  <konqueror@gmx.de>

	* java/awt/FontMetrics.java: Reformatted.
	(getFontRenderContext): Handle case when java.awt.Graphics context is
	given.

2005-04-19  Michael Koch  <konqueror@gmx.de>

	* java/awt/FontMetrics.java
	(getStringBounds): New methods.

From-SVN: r98398
parent fd603291
2005-04-19 Michael Koch <konqueror@gmx.de> 2005-04-19 Michael Koch <konqueror@gmx.de>
* java/awt/FontMetrics.java: Reformatted.
(getFontRenderContext): Handle case when java.awt.Graphics context is
given.
2005-04-19 Michael Koch <konqueror@gmx.de>
* java/awt/FontMetrics.java
(getStringBounds): New methods.
2005-04-19 Michael Koch <konqueror@gmx.de>
* gnu/java/security/x509/X509Certificate.java * gnu/java/security/x509/X509Certificate.java
(parse): Handle val == null case. (parse): Handle val == null case.
......
/* FontMetrics.java -- Information about about a fonts display characteristics /* 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. This file is part of GNU Classpath.
...@@ -40,6 +40,7 @@ package java.awt; ...@@ -40,6 +40,7 @@ package java.awt;
import java.awt.font.FontRenderContext; import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics; import java.awt.font.LineMetrics;
import java.awt.geom.Rectangle2D;
import java.text.CharacterIterator; import java.text.CharacterIterator;
// FIXME: I leave many methods basically unimplemented. This // FIXME: I leave many methods basically unimplemented. This
...@@ -49,7 +50,7 @@ import java.text.CharacterIterator; ...@@ -49,7 +50,7 @@ import java.text.CharacterIterator;
* This class returns information about the display characteristics of * This class returns information about the display characteristics of
* a font. It is abstract, and concrete subclasses should implement at * a font. It is abstract, and concrete subclasses should implement at
* least the following methods: * least the following methods:
* <p> *
* <ul> * <ul>
* <li>getAscent()</li> * <li>getAscent()</li>
* <li>getDescent()</li> * <li>getDescent()</li>
...@@ -63,401 +64,362 @@ import java.text.CharacterIterator; ...@@ -63,401 +64,362 @@ import java.text.CharacterIterator;
*/ */
public abstract class FontMetrics implements java.io.Serializable 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 <code>FontMetrics</code> for the
* specified font.
*
* @param font The font to return metric information for.
*/
protected FontMetrics(Font font)
{
this.font = font;
}
/* /**
* Static Variables * Returns the font that this object is creating metric information fo.
*/ *
* @return The font for this object.
// Serialization constant */
private static final long serialVersionUID = 1681126225205050147L; public Font getFont()
{
/*************************************************************************/ return font;
}
/*
* 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 * Returns the leading, or spacing between lines, for this font.
* character in the font extends below the baseline. *
* * @return The font leading.
* @return The maximum descent for this font. */
*/ public int getLeading()
public int {
getMaxDescent() return 0;
{ }
return getMaxDecent ();
}
/*************************************************************************/ /**
* 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 * Returns the descent of the font, which is the distance from the base
* character in the font extends below the baseline. * to the bottom of the majority of characters in the set. Some characters
* * can exceed this value however.
* @return The maximum descent for this font. *
* * @return The font descent.
* @deprecated This method is deprecated in favor of */
* <code>getMaxDescent()</code>. public int getDescent()
*/ {
public int return 1;
getMaxDecent() }
{
return getDescent ();
}
/*************************************************************************/ /**
* 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. * Returns the maximum ascent value. This is the maximum distance any
* * character in the font rised above the baseline.
* @return The width of the widest character in the font. *
*/ * @return The maximum ascent for this font.
public int */
getMaxAdvance() public int getMaxAscent()
{ {
return(-1); 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. * Returns the maximum descent value. This is the maximum distance any
* * character in the font extends below the baseline.
* @param ch The character to return the width of. *
* * @return The maximum descent for this font.
* @return The width of the specified character. *
*/ * @deprecated This method is deprecated in favor of
public int * <code>getMaxDescent()</code>.
charWidth(int ch) */
{ public int getMaxDecent()
return(charWidth((char)ch)); {
} 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. * Returns the width of the specified character.
* *
* @param ch The character to return the width of. * @param ch The character to return the width of.
* *
* @return The width of the specified character. * @return The width of the specified character.
*/ */
public int public int charWidth(int ch)
charWidth(char ch) {
{ return 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(char ch)
{
return 1;
}
/** /**
* Returns the total width of the specified string * Returns the total width of the specified string
* *
* @param str The string to return the width of. * @param str The string to return the width of.
* *
* @return The width of the string. * @return The width of the string.
*/ */
public int public int stringWidth(String str)
stringWidth(String str) {
{ char[] buf = new char[str.length()];
char[] buf = new char[str.length()]; str.getChars(0, str.length(), buf, 0);
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. * Returns the total width of the specified byte array.
* *
* @param buf The character array containing the data. * @param buf The byte array containing the data.
* @param offset The offset into the array to start calculating from. * @param offset The offset into the array to start calculating from.
* @param len The total number of bytes to process. * @param len The total number of bytes to process.
* *
* @return The width of the requested characters. * @return The width of the requested characters.
*/ */
public int public int bytesWidth(byte[] buf, int offset, int len)
charsWidth(char buf[], int offset, int len) {
{ int total_width = 0;
int total_width = 0; for (int i = offset; i < len; i++)
for (int i = offset; i < len; i++) total_width = charWidth((char) buf[i]);
total_width += charWidth(buf[i]);
return(total_width);
}
/*************************************************************************/ return total_width;
}
/** /**
* Returns the total width of the specified byte array. * Returns the widths of the first 256 characters in the font.
* *
* @param buf The byte array containing the data. * @return The widths of the first 256 characters in the font.
* @param offset The offset into the array to start calculating from. */
* @param len The total number of bytes to process. public int[] getWidths()
* {
* @return The width of the requested characters. int[] result = new int[256];
*/ for (char i = 0; i < 256; i++)
public int result[i] = charWidth(i);
bytesWidth(byte buf[], int offset, int len) return result;
{ }
int total_width = 0;
for (int i = offset; i < len; i++)
total_width = charWidth((char)buf[i]);
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. * Returns a {@link LineMetrics} object constructed with the
* * specified text and the {@link FontRenderContext} of the Graphics
* @return The widths of the first 256 characters in the font. * object when it is an instance of Graphics2D or a generic
*/ * FontRenderContext with a null transform, not anti-aliased and not
public int[] * using fractional metrics.
getWidths() *
{ * @param text The string to calculate metrics from.
int [] result = new int[256]; * @param begin Index of first character in <code>text</code> to measure.
for(char i = 0; i < 256; i++) * @param limit Index of last character in <code>text</code> 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 <code>text</code>.
*/
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 <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> 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 <code>text</code>.
*/
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. * Returns a {@link LineMetrics} object constructed with the
* * specified text and the {@link FontRenderContext} of the Graphics
* @return A string representation of this object. * object when it is an instance of Graphics2D or a generic
*/ * FontRenderContext with a null transform, not anti-aliased and not
public String * using fractional metrics.
toString() *
{ * @param ci An iterator over the string to calculate metrics from.
return (this.getClass() + "[font=" + font + ",ascent=" + getAscent() * @param begin Index of first character in <code>text</code> to measure.
+ ",descent=" + getDescent() + ",height=" + getHeight() + "]"); * @param limit Index of last character in <code>text</code> 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 <code>text</code>.
*/
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 public Rectangle2D getStringBounds(String str, int beginIndex, int limit,
// plain Graphics object. Graphics context)
private static final FontRenderContext gRC = new FontRenderContext(null, {
false, return font.getStringBounds(str, beginIndex, limit,
false); getFontRenderContext(context));
}
/** public Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit,
* Returns a {@link LineMetrics} object constructed with the Graphics context)
* specified text and the {@link FontRenderContext} of the Graphics {
* object when it is an instance of Graphics2D or a generic return font.getStringBounds(chars, beginIndex, limit,
* FontRenderContext with a null transform, not anti-aliased and not getFontRenderContext(context));
* 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(CharacterIterator ci, int beginIndex,
* Returns a {@link LineMetrics} object constructed with the int limit, Graphics context)
* specified text and the {@link FontRenderContext} of the Graphics {
* object when it is an instance of Graphics2D or a generic return font.getStringBounds(ci, beginIndex, limit,
* FontRenderContext with a null transform, not anti-aliased and not getFontRenderContext(context));
* using fractional metrics. }
*
* @param text The string to calculate metrics from.
* @param begin Index of first character in <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> 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 <code>text</code>.
*/
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);
}
/** private FontRenderContext getFontRenderContext(Graphics context)
* Returns a {@link LineMetrics} object constructed with the {
* specified text and the {@link FontRenderContext} of the Graphics if (context instanceof Graphics2D)
* object when it is an instance of Graphics2D or a generic return ((Graphics2D) context).getFontRenderContext();
* 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 <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> 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 <code>text</code>.
*/
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);
}
/** return gRC;
* 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 <code>text</code> to measure.
* @param limit Index of last character in <code>text</code> 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 <code>text</code>.
*/
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);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment