< prev index next >
src/java.desktop/share/classes/java/awt/font/ShapeGraphicAttribute.java
Print this page
*** 47,57 ****
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
/**
! * The <code>ShapeGraphicAttribute</code> class is an implementation of
* {@link GraphicAttribute} that draws shapes in a {@link TextLayout}.
* @see GraphicAttribute
*/
public final class ShapeGraphicAttribute extends GraphicAttribute {
--- 47,57 ----
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
/**
! * The {@code ShapeGraphicAttribute} class is an implementation of
* {@link GraphicAttribute} that draws shapes in a {@link TextLayout}.
* @see GraphicAttribute
*/
public final class ShapeGraphicAttribute extends GraphicAttribute {
*** 70,90 ****
// cache shape bounds, since GeneralPath doesn't
private Rectangle2D fShapeBounds;
/**
! * Constructs a <code>ShapeGraphicAttribute</code> for the specified
* {@link Shape}.
! * @param shape the <code>Shape</code> to render. The
! * <code>Shape</code> is rendered with its origin at the origin of
! * this <code>ShapeGraphicAttribute</code> in the
! * host <code>TextLayout</code>. This object maintains a reference to
! * <code>shape</code>.
* @param alignment one of the alignments from this
! * <code>ShapeGraphicAttribute</code>.
! * @param stroke <code>true</code> if the <code>Shape</code> should be
! * stroked; <code>false</code> if the <code>Shape</code> should be
* filled.
*/
public ShapeGraphicAttribute(Shape shape,
int alignment,
boolean stroke) {
--- 70,90 ----
// cache shape bounds, since GeneralPath doesn't
private Rectangle2D fShapeBounds;
/**
! * Constructs a {@code ShapeGraphicAttribute} for the specified
* {@link Shape}.
! * @param shape the {@code Shape} to render. The
! * {@code Shape} is rendered with its origin at the origin of
! * this {@code ShapeGraphicAttribute} in the
! * host {@code TextLayout}. This object maintains a reference to
! * {@code shape}.
* @param alignment one of the alignments from this
! * {@code ShapeGraphicAttribute}.
! * @param stroke {@code true} if the {@code Shape} should be
! * stroked; {@code false} if the {@code Shape} should be
* filled.
*/
public ShapeGraphicAttribute(Shape shape,
int alignment,
boolean stroke) {
*** 95,133 ****
fStroke = stroke;
fShapeBounds = fShape.getBounds2D();
}
/**
! * Returns the ascent of this <code>ShapeGraphicAttribute</code>. The
! * ascent of a <code>ShapeGraphicAttribute</code> is the positive
! * distance from the origin of its <code>Shape</code> to the top of
! * bounds of its <code>Shape</code>.
! * @return the ascent of this <code>ShapeGraphicAttribute</code>.
*/
public float getAscent() {
return (float) Math.max(0, -fShapeBounds.getMinY());
}
/**
! * Returns the descent of this <code>ShapeGraphicAttribute</code>.
! * The descent of a <code>ShapeGraphicAttribute</code> is the distance
! * from the origin of its <code>Shape</code> to the bottom of the
! * bounds of its <code>Shape</code>.
! * @return the descent of this <code>ShapeGraphicAttribute</code>.
*/
public float getDescent() {
return (float) Math.max(0, fShapeBounds.getMaxY());
}
/**
! * Returns the advance of this <code>ShapeGraphicAttribute</code>.
! * The advance of a <code>ShapeGraphicAttribute</code> is the distance
! * from the origin of its <code>Shape</code> to the right side of the
! * bounds of its <code>Shape</code>.
! * @return the advance of this <code>ShapeGraphicAttribute</code>.
*/
public float getAdvance() {
return (float) Math.max(0, fShapeBounds.getMaxX());
}
--- 95,133 ----
fStroke = stroke;
fShapeBounds = fShape.getBounds2D();
}
/**
! * Returns the ascent of this {@code ShapeGraphicAttribute}. The
! * ascent of a {@code ShapeGraphicAttribute} is the positive
! * distance from the origin of its {@code Shape} to the top of
! * bounds of its {@code Shape}.
! * @return the ascent of this {@code ShapeGraphicAttribute}.
*/
public float getAscent() {
return (float) Math.max(0, -fShapeBounds.getMinY());
}
/**
! * Returns the descent of this {@code ShapeGraphicAttribute}.
! * The descent of a {@code ShapeGraphicAttribute} is the distance
! * from the origin of its {@code Shape} to the bottom of the
! * bounds of its {@code Shape}.
! * @return the descent of this {@code ShapeGraphicAttribute}.
*/
public float getDescent() {
return (float) Math.max(0, fShapeBounds.getMaxY());
}
/**
! * Returns the advance of this {@code ShapeGraphicAttribute}.
! * The advance of a {@code ShapeGraphicAttribute} is the distance
! * from the origin of its {@code Shape} to the right side of the
! * bounds of its {@code Shape}.
! * @return the advance of this {@code ShapeGraphicAttribute}.
*/
public float getAdvance() {
return (float) Math.max(0, fShapeBounds.getMaxX());
}
*** 154,169 ****
}
}
/**
* Returns a {@link Rectangle2D} that encloses all of the
! * bits drawn by this <code>ShapeGraphicAttribute</code> relative to
* the rendering position. A graphic can be rendered beyond its
* origin, ascent, descent, or advance; but if it does, this method's
* implementation should indicate where the graphic is rendered.
! * @return a <code>Rectangle2D</code> that encloses all of the bits
! * rendered by this <code>ShapeGraphicAttribute</code>.
*/
public Rectangle2D getBounds() {
Rectangle2D.Float bounds = new Rectangle2D.Float();
bounds.setRect(fShapeBounds);
--- 154,169 ----
}
}
/**
* Returns a {@link Rectangle2D} that encloses all of the
! * bits drawn by this {@code ShapeGraphicAttribute} relative to
* the rendering position. A graphic can be rendered beyond its
* origin, ascent, descent, or advance; but if it does, this method's
* implementation should indicate where the graphic is rendered.
! * @return a {@code Rectangle2D} that encloses all of the bits
! * rendered by this {@code ShapeGraphicAttribute}.
*/
public Rectangle2D getBounds() {
Rectangle2D.Float bounds = new Rectangle2D.Float();
bounds.setRect(fShapeBounds);
*** 176,216 ****
return bounds;
}
/**
* Return a {@link java.awt.Shape} that represents the region that
! * this <code>ShapeGraphicAttribute</code> renders. This is used when a
* {@link TextLayout} is requested to return the outline of the text.
* The (untransformed) shape must not extend outside the rectangular
! * bounds returned by <code>getBounds</code>.
* @param tx an optional {@link AffineTransform} to apply to the
! * this <code>ShapeGraphicAttribute</code>. This can be null.
! * @return the <code>Shape</code> representing this graphic attribute,
* suitable for stroking or filling.
* @since 1.6
*/
public Shape getOutline(AffineTransform tx) {
return tx == null ? fShape : tx.createTransformedShape(fShape);
}
/**
! * Returns a hashcode for this <code>ShapeGraphicAttribute</code>.
* @return a hash code value for this
! * <code>ShapeGraphicAttribute</code>.
*/
public int hashCode() {
return fShape.hashCode();
}
/**
! * Compares this <code>ShapeGraphicAttribute</code> to the specified
! * <code>Object</code>.
! * @param rhs the <code>Object</code> to compare for equality
! * @return <code>true</code> if this
! * <code>ShapeGraphicAttribute</code> equals <code>rhs</code>;
! * <code>false</code> otherwise.
*/
public boolean equals(Object rhs) {
try {
return equals((ShapeGraphicAttribute) rhs);
--- 176,216 ----
return bounds;
}
/**
* Return a {@link java.awt.Shape} that represents the region that
! * this {@code ShapeGraphicAttribute} renders. This is used when a
* {@link TextLayout} is requested to return the outline of the text.
* The (untransformed) shape must not extend outside the rectangular
! * bounds returned by {@code getBounds}.
* @param tx an optional {@link AffineTransform} to apply to the
! * this {@code ShapeGraphicAttribute}. This can be null.
! * @return the {@code Shape} representing this graphic attribute,
* suitable for stroking or filling.
* @since 1.6
*/
public Shape getOutline(AffineTransform tx) {
return tx == null ? fShape : tx.createTransformedShape(fShape);
}
/**
! * Returns a hashcode for this {@code ShapeGraphicAttribute}.
* @return a hash code value for this
! * {@code ShapeGraphicAttribute}.
*/
public int hashCode() {
return fShape.hashCode();
}
/**
! * Compares this {@code ShapeGraphicAttribute} to the specified
! * {@code Object}.
! * @param rhs the {@code Object} to compare for equality
! * @return {@code true} if this
! * {@code ShapeGraphicAttribute} equals {@code rhs};
! * {@code false} otherwise.
*/
public boolean equals(Object rhs) {
try {
return equals((ShapeGraphicAttribute) rhs);
*** 219,235 ****
return false;
}
}
/**
! * Compares this <code>ShapeGraphicAttribute</code> to the specified
! * <code>ShapeGraphicAttribute</code>.
! * @param rhs the <code>ShapeGraphicAttribute</code> to compare for
* equality
! * @return <code>true</code> if this
! * <code>ShapeGraphicAttribute</code> equals <code>rhs</code>;
! * <code>false</code> otherwise.
*/
public boolean equals(ShapeGraphicAttribute rhs) {
if (rhs == null) {
return false;
--- 219,235 ----
return false;
}
}
/**
! * Compares this {@code ShapeGraphicAttribute} to the specified
! * {@code ShapeGraphicAttribute}.
! * @param rhs the {@code ShapeGraphicAttribute} to compare for
* equality
! * @return {@code true} if this
! * {@code ShapeGraphicAttribute} equals {@code rhs};
! * {@code false} otherwise.
*/
public boolean equals(ShapeGraphicAttribute rhs) {
if (rhs == null) {
return false;
< prev index next >