1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3  *
4  * This code is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 2 only, as
6  * published by the Free Software Foundation.  Oracle designates this
7  * particular file as subject to the "Classpath" exception as provided
8  * by Oracle in the LICENSE file that accompanied this code.
9  *
10  * This code is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13  * version 2 for more details (a copy is included in the LICENSE file that
14  * accompanied this code).
15  *
16  * You should have received a copy of the GNU General Public License version
17  * 2 along with this work; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19  *
20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21  * or visit www.oracle.com if you need additional information or have any
22  * questions.
23  *
24  */
25 
26 /*
27  *
28  * (C) Copyright IBM Corp. 2003, All Rights Reserved
29  *
30  */
31 
32 package sun.font;
33 
34 import java.awt.font.FontRenderContext;
35 import java.awt.font.LineMetrics;
36 
37 /**
38  * Metrics from a font for layout of characters along a line
39  * and layout of set of lines.
40  * This and CoreMetrics replace what was previously a private internal class of Font
41  */
42 public final class FontLineMetrics extends LineMetrics implements Cloneable {
43     public int numchars; // mutated by Font
44     public final CoreMetrics cm;
45     public final FontRenderContext frc;
46 
FontLineMetrics(int numchars, CoreMetrics cm, FontRenderContext frc)47     public FontLineMetrics(int numchars, CoreMetrics cm, FontRenderContext frc) {
48         this.numchars = numchars;
49         this.cm = cm;
50         this.frc = frc;
51     }
52 
getNumChars()53     public int getNumChars() {
54         return numchars;
55     }
56 
getAscent()57     public float getAscent() {
58         return cm.ascent;
59     }
60 
getDescent()61     public float getDescent() {
62         return cm.descent;
63     }
64 
getLeading()65     public float getLeading() {
66         return cm.leading;
67     }
68 
getHeight()69     public float getHeight() {
70         return cm.height;
71     }
72 
getBaselineIndex()73     public int getBaselineIndex() {
74         return cm.baselineIndex;
75     }
76 
getBaselineOffsets()77     public float[] getBaselineOffsets() {
78         return cm.baselineOffsets.clone();
79     }
80 
getStrikethroughOffset()81     public float getStrikethroughOffset() {
82         return cm.strikethroughOffset;
83     }
84 
getStrikethroughThickness()85     public float getStrikethroughThickness() {
86         return cm.strikethroughThickness;
87     }
88 
getUnderlineOffset()89     public float getUnderlineOffset() {
90         return cm.underlineOffset;
91     }
92 
getUnderlineThickness()93     public float getUnderlineThickness() {
94         return cm.underlineThickness;
95     }
96 
hashCode()97     public int hashCode() {
98         return cm.hashCode();
99     }
100 
equals(Object rhs)101     public boolean equals(Object rhs) {
102         try {
103             return cm.equals(((FontLineMetrics)rhs).cm);
104         }
105         catch (ClassCastException e) {
106             return false;
107         }
108     }
109 
clone()110     public Object clone() {
111         // frc, cm do not need deep clone
112         try {
113             return super.clone();
114         }
115         catch (CloneNotSupportedException e) {
116             throw new InternalError(e);
117         }
118     }
119 }
120