Frames | No Frames |
1: /* GraphicAttribute.java 2: Copyright (C) 2003 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: 39: package java.awt.font; 40: 41: import java.awt.Graphics2D; 42: import java.awt.geom.Rectangle2D; 43: 44: /** 45: * This class represents a graphic embedded in text. 46: * 47: * @author Michael Koch 48: * @author Lillian Angel (langel at redhat dot com) 49: */ 50: public abstract class GraphicAttribute 51: { 52: public static final int BOTTOM_ALIGNMENT = - 2; 53: public static final int CENTER_BASELINE = 1; 54: public static final int HANGING_BASELINE = 2; 55: public static final int ROMAN_BASELINE = 0; 56: public static final int TOP_ALIGNMENT = - 1; 57: 58: private int alignment; 59: 60: /** 61: * Constructor. 62: * 63: * @param alignment - the alignment to use for the graphic 64: */ 65: protected GraphicAttribute(int alignment) 66: { 67: if (alignment < BOTTOM_ALIGNMENT || alignment > HANGING_BASELINE) 68: throw new IllegalArgumentException("Invalid alignment"); 69: this.alignment = alignment; 70: } 71: 72: /** 73: * Draws the graphic. 74: * 75: * @param graphics - the graphics configuration to use 76: * @param x - the x location 77: * @param y - the y location 78: */ 79: public abstract void draw(Graphics2D graphics, float x, float y); 80: 81: /** 82: * Gets the distance from the origin of its graphic to the right side of the 83: * bounds of its graphic. 84: * 85: * @return the advance 86: */ 87: public abstract float getAdvance(); 88: 89: /** 90: * Gets the positive distance from the origin of its graphic to the top of 91: * bounds. 92: * 93: * @return the ascent 94: */ 95: public abstract float getAscent(); 96: 97: /** 98: * Gets the distance from the origin of its graphic to the bottom of the bounds. 99: * 100: * @return the descent 101: */ 102: public abstract float getDescent(); 103: 104: /** 105: * Gets the alignment. 106: * 107: * @return the alignment 108: */ 109: public final int getAlignment() 110: { 111: return alignment; 112: } 113: 114: /** 115: * Returns a Rectangle2D that encloses the rendered area. 116: * Default bounds is the rectangle (0, -ascent, advance, ascent+descent). 117: * 118: * @return the bounds of the rendered area 119: */ 120: public Rectangle2D getBounds() 121: { 122: float asc = getAscent(); 123: return new Rectangle2D.Float(0, - asc, getAdvance(), asc + getDescent()); 124: } 125: 126: /** 127: * Returns the justification information for this object. 128: * 129: * @return the justification information 130: */ 131: public GlyphJustificationInfo getJustificationInfo() 132: { 133: float adv = getAdvance(); 134: return new GlyphJustificationInfo(adv, false, 2, adv / 3, adv / 3, false, 135: 1, 0, 0); 136: } 137: }