- /*
 - * @(#)GraphicAttribute.java 1.14 00/02/02
 - *
 - * Copyright 1998-2000 Sun Microsystems, Inc. All Rights Reserved.
 - *
 - * This software is the proprietary information of Sun Microsystems, Inc.
 - * Use is subject to license terms.
 - *
 - */
 - /*
 - * (C) Copyright Taligent, Inc. 1996 - 1997, All Rights Reserved
 - * (C) Copyright IBM Corp. 1996 - 1998, All Rights Reserved
 - *
 - * The original version of this source code and documentation is
 - * copyrighted and owned by Taligent, Inc., a wholly-owned subsidiary
 - * of IBM. These materials are provided under terms of a License
 - * Agreement between Taligent and Sun. This technology is protected
 - * by multiple US and International patents.
 - *
 - * This notice and attribution to Taligent may not be removed.
 - * Taligent is a registered trademark of Taligent, Inc.
 - *
 - */
 - package java.awt.font;
 - import java.awt.geom.Rectangle2D;
 - import java.awt.Graphics2D;
 - import java.awt.Font;
 - /**
 - * This class is used with the CHAR_REPLACEMENT attribute.
 - * <p>
 - * The <code>GraphicAttribute</code> class represents a graphic embedded
 - * in text. Clients subclass this class to implement their own char
 - * replacement graphics. Clients wishing to embed shapes and images in
 - * text need not subclass this class. Instead, clients can use the
 - * {@link ShapeGraphicAttribute} and {@link ImageGraphicAttribute}
 - * classes.
 - * <p>
 - * Subclasses must ensure that their objects are immutable once they
 - * are constructed. Mutating a <code>GraphicAttribute</code> that
 - * is used in a {@link TextLayout} results in undefined behavior from the
 - * <code>TextLayout</code>.
 - */
 - public abstract class GraphicAttribute {
 - private int fAlignment;
 - /**
 - * Aligns top of graphic to top of line.
 - */
 - public static final int TOP_ALIGNMENT = -1;
 - /**
 - * Aligns bottom of graphic to bottom of line.
 - */
 - public static final int BOTTOM_ALIGNMENT = -2;
 - /**
 - * Aligns origin of graphic to roman baseline of line.
 - */
 - public static final int ROMAN_BASELINE = Font.ROMAN_BASELINE;
 - /**
 - * Aligns origin of graphic to center baseline of line.
 - */
 - public static final int CENTER_BASELINE = Font.CENTER_BASELINE;
 - /**
 - * Aligns origin of graphic to hanging baseline of line.
 - */
 - public static final int HANGING_BASELINE = Font.HANGING_BASELINE;
 - /**
 - * Constructs a <code>GraphicAttribute</code>.
 - * Subclasses use this to define the alignment of the graphic.
 - */
 - protected GraphicAttribute(int alignment) {
 - if (alignment < BOTTOM_ALIGNMENT || alignment > HANGING_BASELINE) {
 - throw new IllegalArgumentException("bad alignment");
 - }
 - fAlignment = alignment;
 - }
 - /**
 - * Returns the ascent of this <code>GraphicAttribute</code>. A
 - * graphic can be rendered above its ascent.
 - * @return the ascent of this <code>GraphicAttribute</code>.
 - * @see #getBounds()
 - */
 - public abstract float getAscent();
 - /**
 - * Returns the descent of this <code>GraphicAttribute</code>. A
 - * graphic can be rendered below its descent.
 - * @return the descent of this <code>GraphicAttribute</code>.
 - * @see #getBounds()
 - */
 - public abstract float getDescent();
 - /**
 - * Returns the advance of this <code>GraphicAttribute</code>. The
 - * <code>GraphicAttribute</code> object's advance is the distance
 - * from the point at which the graphic is rendered and the point where
 - * the next character or graphic is rendered. A graphic can be
 - * rendered beyond its advance
 - * @return the advance of this <code>GraphicAttribute</code>.
 - * @see #getBounds()
 - */
 - public abstract float getAdvance();
 - /**
 - * Returns a {@link Rectangle2D} that encloses all of the
 - * bits drawn by this <code>GraphicAttribute</code> relative to the
 - * rendering position.
 - * A graphic may be rendered beyond its origin, ascent, descent,
 - * or advance; but if it is, this method's implementation must
 - * indicate where the graphic is rendered.
 - * Default bounds is the rectangle (0, -ascent, advance, ascent+descent).
 - * @return a <code>Rectangle2D</code> that encloses all of the bits
 - * rendered by this <code>GraphicAttribute</code>.
 - */
 - public Rectangle2D getBounds() {
 - float ascent = getAscent();
 - return new Rectangle2D.Float(0, -ascent,
 - getAdvance(), ascent+getDescent());
 - }
 - /**
 - * Renders this <code>GraphicAttribute</code> at the specified
 - * location.
 - * @param graphics the {@link Graphics2D} into which to render the
 - * graphic
 - * @param x, y the user-space coordinates where
 - * the graphic is rendered
 - */
 - public abstract void draw(Graphics2D graphics, float x, float y);
 - /**
 - * Returns the alignment of this <code>GraphicAttribute</code>.
 - * Alignment can be to a particular baseline, or to the absolute top
 - * or bottom of a line.
 - * @return the alignment of this <code>GraphicAttribute</code>.
 - */
 - public final int getAlignment() {
 - return fAlignment;
 - }
 - /**
 - * Returns the justification information for this
 - * <code>GraphicAttribute</code>. Subclasses
 - * can override this method to provide different justification
 - * information.
 - * @return a {@link GlyphJustificationInfo} object that contains the
 - * justification information for this <code>GraphicAttribute</code>.
 - */
 - public GlyphJustificationInfo getJustificationInfo() {
 - // should we cache this?
 - float advance = getAdvance();
 - return new GlyphJustificationInfo(
 - advance, // weight
 - false, // growAbsorb
 - 2, // growPriority
 - advance3, // growLeftLimit
 - advance3, // growRightLimit
 - false, // shrinkAbsorb
 - 1, // shrinkPriority
 - 0, // shrinkLeftLimit
 - 0); // shrinkRightLimit
 - }
 - }