All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.modules.java.desktop.classes.java.awt.font.GraphicAttribute Maven / Gradle / Ivy

There is a newer version: 2024-05-10
Show newest version
/*
 * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code 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
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/*
 * (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.Graphics2D;
import java.awt.Font;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;

/**
 * This class is used with the CHAR_REPLACEMENT attribute.
 * 

* The {@code GraphicAttribute} 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. *

* Subclasses must ensure that their objects are immutable once they * are constructed. Mutating a {@code GraphicAttribute} that * is used in a {@link TextLayout} results in undefined behavior from the * {@code TextLayout}. */ 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}. * Subclasses use this to define the alignment of the graphic. * @param alignment an int representing one of the * {@code GraphicAttribute} alignment fields * @throws IllegalArgumentException if alignment is not one of the * five defined values. */ 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}. A * graphic can be rendered above its ascent. * @return the ascent of this {@code GraphicAttribute}. * @see #getBounds() */ public abstract float getAscent(); /** * Returns the descent of this {@code GraphicAttribute}. A * graphic can be rendered below its descent. * @return the descent of this {@code GraphicAttribute}. * @see #getBounds() */ public abstract float getDescent(); /** * Returns the advance of this {@code GraphicAttribute}. The * {@code GraphicAttribute} 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}. * @see #getBounds() */ public abstract float getAdvance(); /** * Returns a {@link Rectangle2D} that encloses all of the * bits drawn by this {@code GraphicAttribute} 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} that encloses all of the bits * rendered by this {@code GraphicAttribute}. */ public Rectangle2D getBounds() { float ascent = getAscent(); return new Rectangle2D.Float(0, -ascent, getAdvance(), ascent+getDescent()); } /** * Return a {@link java.awt.Shape} that represents the region that * this {@code GraphicAttribute} 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}. * The default implementation returns the rectangle returned by * {@link #getBounds}, transformed by the provided {@link AffineTransform} * if present. * @param tx an optional {@link AffineTransform} to apply to the * outline of this {@code GraphicAttribute}. This can be null. * @return a {@code Shape} representing this graphic attribute, * suitable for stroking or filling. * @since 1.6 */ public Shape getOutline(AffineTransform tx) { Shape b = getBounds(); if (tx != null) { b = tx.createTransformedShape(b); } return b; } /** * Renders this {@code GraphicAttribute} at the specified * location. * @param graphics the {@link Graphics2D} into which to render the * graphic * @param x the user-space X coordinate where the graphic is rendered * @param y the user-space Y coordinate where the graphic is rendered */ public abstract void draw(Graphics2D graphics, float x, float y); /** * Returns the alignment of this {@code GraphicAttribute}. * Alignment can be to a particular baseline, or to the absolute top * or bottom of a line. * @return the alignment of this {@code GraphicAttribute}. */ public final int getAlignment() { return fAlignment; } /** * Returns the justification information for this * {@code GraphicAttribute}. Subclasses * can override this method to provide different justification * information. * @return a {@link GlyphJustificationInfo} object that contains the * justification information for this {@code GraphicAttribute}. */ public GlyphJustificationInfo getJustificationInfo() { // should we cache this? float advance = getAdvance(); return new GlyphJustificationInfo( advance, // weight false, // growAbsorb 2, // growPriority advance/3, // growLeftLimit advance/3, // growRightLimit false, // shrinkAbsorb 1, // shrinkPriority 0, // shrinkLeftLimit 0); // shrinkRightLimit } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy