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: public int getLeading ()
114: {
115:
116: return 0;
117: }
118:
119: public int getAscent ()
120: {
121: return font_metrics[FONT_METRICS_ASCENT];
122: }
123:
124: public int getMaxAscent ()
125: {
126: return font_metrics[FONT_METRICS_MAX_ASCENT];
127: }
128:
129: public int getDescent ()
130: {
131: return font_metrics[FONT_METRICS_DESCENT];
132: }
133:
134: public int getMaxDescent ()
135: {
136: return font_metrics[FONT_METRICS_MAX_DESCENT];
137: }
138:
139: public int getMaxAdvance ()
140: {
141: return font_metrics[FONT_METRICS_MAX_ADVANCE];
142: }
143: }