001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: /**
018: * @author Ilya S. Okomin
019: * @version $Revision$
020: */package java.awt.font;
021:
022: import java.awt.geom.Rectangle2D;
023:
024: public final class GlyphMetrics {
025:
026: // advance width of the glyph character cell
027: private float advanceX;
028:
029: // advance height of the glyph character cell
030: private float advanceY;
031:
032: // flag if the glyph horizontal
033: private boolean horizontal;
034:
035: // glyph type code
036: private byte glyphType;
037:
038: // bounding box for outline of the glyph
039: private Rectangle2D.Float bounds;
040:
041: public static final byte STANDARD = 0;
042:
043: public static final byte LIGATURE = 1;
044:
045: public static final byte COMBINING = 2;
046:
047: public static final byte COMPONENT = 3;
048:
049: public static final byte WHITESPACE = 4;
050:
051: public GlyphMetrics(boolean horizontal, float advanceX,
052: float advanceY, Rectangle2D bounds, byte glyphType) {
053: this .horizontal = horizontal;
054: this .advanceX = advanceX;
055: this .advanceY = advanceY;
056:
057: this .bounds = new Rectangle2D.Float();
058: this .bounds.setRect(bounds);
059:
060: this .glyphType = glyphType;
061: }
062:
063: public GlyphMetrics(float advanceX, Rectangle2D bounds,
064: byte glyphType) {
065: this .advanceX = advanceX;
066: this .advanceY = 0;
067:
068: this .horizontal = true;
069:
070: this .bounds = new Rectangle2D.Float();
071: this .bounds.setRect(bounds);
072:
073: this .glyphType = glyphType;
074: }
075:
076: public Rectangle2D getBounds2D() {
077: return (Rectangle2D.Float) this .bounds.clone();
078: }
079:
080: public boolean isWhitespace() {
081: return ((this .glyphType & 4) == WHITESPACE);
082: }
083:
084: public boolean isStandard() {
085: return ((this .glyphType & 3) == STANDARD);
086: }
087:
088: public boolean isLigature() {
089: return ((this .glyphType & 3) == LIGATURE);
090: }
091:
092: public boolean isComponent() {
093: return ((this .glyphType & 3) == COMPONENT);
094: }
095:
096: public boolean isCombining() {
097: return ((this .glyphType & 3) == COMBINING);
098: }
099:
100: public int getType() {
101: return this .glyphType;
102: }
103:
104: public float getRSB() {
105: if (this .horizontal) {
106: return this .advanceX - this .bounds.x
107: - (float) this .bounds.getWidth();
108: }
109: return this .advanceY - this .bounds.y
110: - (float) this .bounds.getHeight();
111: }
112:
113: public float getLSB() {
114: if (this .horizontal) {
115: return this .bounds.x;
116: }
117: return this .bounds.y;
118: }
119:
120: public float getAdvanceY() {
121: return this .advanceY;
122: }
123:
124: public float getAdvanceX() {
125: return this .advanceX;
126: }
127:
128: public float getAdvance() {
129: if (this.horizontal) {
130: return this.advanceX;
131: }
132: return this.advanceY;
133: }
134:
135: }
|