1:
37:
38:
39: package ;
40:
41: import ;
42:
43: import ;
44: import ;
45: import ;
46:
47: public class GdkFontMetrics extends FontMetrics
48: {
49:
50: private int[] font_metrics;
51: GdkFontPeer peer;
52:
53: static final int FONT_METRICS_ASCENT = 0;
54: static final int FONT_METRICS_MAX_ASCENT = 1;
55: static final int FONT_METRICS_DESCENT = 2;
56: static final int FONT_METRICS_MAX_DESCENT = 3;
57: static final int FONT_METRICS_MAX_ADVANCE = 4;
58:
59: static final int TEXT_METRICS_X_BEARING = 0;
60: static final int TEXT_METRICS_Y_BEARING = 1;
61: static final int TEXT_METRICS_WIDTH = 2;
62: static final int TEXT_METRICS_HEIGHT = 3;
63: static final int TEXT_METRICS_X_ADVANCE = 4;
64: static final int TEXT_METRICS_Y_ADVANCE = 5;
65:
66:
70: private static Font initFont(Font font)
71: {
72: if (font == null)
73: return new Font("Dialog", Font.PLAIN, 12);
74: else if (font.getPeer() instanceof GdkFontPeer)
75: return font;
76: else
77: {
78: ClasspathToolkit toolkit;
79: toolkit = (ClasspathToolkit) Toolkit.getDefaultToolkit();
80: return toolkit.getFont(font.getName(), font.getAttributes());
81: }
82: }
83:
84: public GdkFontMetrics (Font font)
85: {
86: super(initFont(font));
87: peer = (GdkFontPeer) this.font.getPeer();
88:
89: font_metrics = new int[5];
90: double [] hires = new double[5];
91: peer.getFontMetrics (hires);
92: for (int i = 0; i < 5; ++i)
93: font_metrics[i] = (int) hires[i];
94: }
95:
96: public int stringWidth (String str)
97: {
98: double [] hires = new double[6];
99: peer.getTextMetrics(str, hires);
100: return (int) hires [TEXT_METRICS_WIDTH];
101: }
102:
103: public int charWidth (char ch)
104: {
105: return stringWidth (new String (new char[] { ch }));
106: }
107:
108: public int charsWidth (char data[], int off, int len)
109: {
110: return stringWidth (new String (data, off, len));
111: }
112:
113:
118: public int getLeading ()
119: {
120: return 1;
121: }
122:
123: public int getAscent ()
124: {
125: return font_metrics[FONT_METRICS_ASCENT];
126: }
127:
128: public int getMaxAscent ()
129: {
130: return font_metrics[FONT_METRICS_MAX_ASCENT];
131: }
132:
133: public int getDescent ()
134: {
135: return font_metrics[FONT_METRICS_DESCENT];
136: }
137:
138: public int getMaxDescent ()
139: {
140: return font_metrics[FONT_METRICS_MAX_DESCENT];
141: }
142:
143: public int getMaxAdvance ()
144: {
145: return font_metrics[FONT_METRICS_MAX_ADVANCE];
146: }
147: }