/[classpath]/classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java
ViewVC logotype

Diff of /classpath/gnu/java/awt/peer/gtk/GdkFontMetrics.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by mark, Sat Jun 26 16:06:47 2004 UTC revision 1.9.2.1 by gnu_andrew, Sat Jan 15 17:01:40 2005 UTC
# Line 1  Line 1 
1  /* GdkFontMetrics.java  /* GdkFontMetrics.java
2     Copyright (C) 1999, 2002 Free Software Foundation, Inc.     Copyright (C) 1999, 2002, 2004  Free Software Foundation, Inc.
3    
4  This file is part of GNU Classpath.  This file is part of GNU Classpath.
5    
# Line 38  exception statement from your version. * Line 38  exception statement from your version. *
38    
39  package gnu.java.awt.peer.gtk;  package gnu.java.awt.peer.gtk;
40    
41    import gnu.java.awt.ClasspathToolkit;
42    
43  import java.awt.Font;  import java.awt.Font;
44  import java.awt.FontMetrics;  import java.awt.FontMetrics;
45    import java.awt.Toolkit;
46    
47  public class GdkFontMetrics extends FontMetrics  public class GdkFontMetrics extends FontMetrics
48  {  {
49    private final int native_state = GtkGenericPeer.getUniqueInteger();    
50      private int[] font_metrics;
51    private static final int ASCENT = 0, MAX_ASCENT = 1,    GdkFontPeer peer;
52                         DESCENT = 2, MAX_DESCENT = 3,  
53                         MAX_ADVANCE = 4;    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    private int[] metrics;    static native void getPeerFontMetrics(GdkFontPeer peer, double [] metrics);
67    private native int[] initState (String fname, int style, int size);    static native void getPeerTextMetrics(GdkFontPeer peer, String str, double [] metrics);
68    
69    public GdkFontMetrics (Font font)    public GdkFontMetrics (Font font)
70    {    {    
71      super (font);      super (font.getPeer() instanceof GdkFontPeer
72      metrics = initState (font.getName (), font.getStyle (), font.getSize ());             ? font
73    }             : ((ClasspathToolkit)(Toolkit.getDefaultToolkit ()))
74               .getFont (font.getName(), font.getAttributes ()));
75    native public int stringWidth (String fname, int style, int size,      
76                                   String str);      peer = (GdkFontPeer) this.font.getPeer();
77    
78        font_metrics = new int[5];
79        double [] hires = new double[5];
80    
81        if (GtkToolkit.useGraphics2D ())
82          GdkGraphics2D.getPeerFontMetrics(peer, hires);
83        else
84          getPeerFontMetrics (peer, hires);
85    
86        for (int i = 0; i < 5; ++i)
87          font_metrics[i] = (int) hires[i];
88      }
89      
90    public int stringWidth (String str)    public int stringWidth (String str)
91    {    {
92      return stringWidth (font.getName (), font.getStyle (), font.getSize (),      double [] hires = new double[6];
93                          str);      if (GtkToolkit.useGraphics2D())
94          GdkGraphics2D.getPeerTextMetrics(peer, str, hires);
95        else
96          getPeerTextMetrics(peer, str, hires);
97        return (int) hires [TEXT_METRICS_WIDTH];
98    }    }
99    
100    public int charWidth (char ch)    public int charWidth (char ch)
# Line 77  public class GdkFontMetrics extends Font Line 107  public class GdkFontMetrics extends Font
107      return stringWidth (new String (data, off, len));      return stringWidth (new String (data, off, len));
108    }    }
109    
110    // Sun's Motif implementation always returns 0 or 1 here (???).    /*
111         Sun's Motif implementation always returns 0 or 1 here (???), but
112         going by the X11 man pages, it seems as though we should return
113         font.ascent + font.descent.
114      */
115    public int getLeading ()    public int getLeading ()
116    {    {
117      return 0;      return 1;
118    //      return metrics[ASCENT] + metrics[DESCENT];
119    }    }
120    
121    public int getAscent ()    public int getAscent ()
122    {    {
123      return metrics[ASCENT];      return font_metrics[FONT_METRICS_ASCENT];
124    }    }
125    
126    public int getMaxAscent ()    public int getMaxAscent ()
127    {    {
128      return metrics[MAX_ASCENT];      return font_metrics[FONT_METRICS_MAX_ASCENT];
129    }    }
130    
131    public int getDescent ()    public int getDescent ()
132    {    {
133      return metrics[DESCENT];      return font_metrics[FONT_METRICS_DESCENT];
134    }    }
135    
136    public int getMaxDescent ()    public int getMaxDescent ()
137    {    {
138      return metrics[MAX_DESCENT];      return font_metrics[FONT_METRICS_MAX_DESCENT];
139    }    }
140    
141    public int getMaxAdvance ()    public int getMaxAdvance ()
142    {    {
143      return metrics[MAX_ADVANCE];      return font_metrics[FONT_METRICS_MAX_ADVANCE];
144    }    }
145  }  }

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.9.2.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26