home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / sun / awt / motif / X11FontMetrics.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  2.9 KB  |  133 lines

  1. package sun.awt.motif;
  2.  
  3. import java.awt.Font;
  4. import java.awt.FontMetrics;
  5. import java.io.CharConversionException;
  6. import java.util.Hashtable;
  7. import sun.awt.CharsetString;
  8. import sun.awt.FontDescriptor;
  9. import sun.awt.PlatformFont;
  10.  
  11. class X11FontMetrics extends FontMetrics {
  12.    int[] widths;
  13.    int ascent;
  14.    int descent;
  15.    int leading;
  16.    int height;
  17.    int maxAscent;
  18.    int maxDescent;
  19.    int maxHeight;
  20.    int maxAdvance;
  21.    static Hashtable table = new Hashtable();
  22.  
  23.    public X11FontMetrics(Font var1) {
  24.       super(var1);
  25.       this.init();
  26.    }
  27.  
  28.    public int getLeading() {
  29.       return this.leading;
  30.    }
  31.  
  32.    public int getAscent() {
  33.       return this.ascent;
  34.    }
  35.  
  36.    public int getDescent() {
  37.       return this.descent;
  38.    }
  39.  
  40.    public int getHeight() {
  41.       return this.height;
  42.    }
  43.  
  44.    public int getMaxAscent() {
  45.       return this.maxAscent;
  46.    }
  47.  
  48.    public int getMaxDescent() {
  49.       return this.maxDescent;
  50.    }
  51.  
  52.    public int getMaxAdvance() {
  53.       return this.maxAdvance;
  54.    }
  55.  
  56.    public int stringWidth(String var1) {
  57.       return this.charsWidth(var1.toCharArray(), 0, var1.length());
  58.    }
  59.  
  60.    public int charsWidth(char[] var1, int var2, int var3) {
  61.       Font var4 = ((FontMetrics)this).getFont();
  62.       PlatformFont var5 = (PlatformFont)var4.getPeer();
  63.       if (var5.mightHaveMultiFontMetrics()) {
  64.          return this.getMFStringWidth(var1, var2, var3, var4, var5);
  65.       } else if (this.widths == null) {
  66.          return this.maxAdvance * var3;
  67.       } else {
  68.          int var6 = 0;
  69.  
  70.          for(int var7 = var2; var7 < var2 + var3; ++var7) {
  71.             char var8 = var1[var7];
  72.             if (var8 >= 0 && var8 < this.widths.length) {
  73.                var6 += this.widths[var8];
  74.             } else {
  75.                var6 += this.maxAdvance;
  76.             }
  77.          }
  78.  
  79.          return var6;
  80.       }
  81.    }
  82.  
  83.    private int getMFStringWidth(char[] var1, int var2, int var3, Font var4, PlatformFont var5) {
  84.       int var6 = 0;
  85.       CharsetString[] var7 = var5.makeMultiCharsetString(var1, var2, var3);
  86.       int var8 = 0;
  87.  
  88.       for(int var9 = 0; var9 < var7.length; ++var9) {
  89.          int var10 = var7[var9].fontDescriptor.fontCharset.getMaxBytesPerChar() * var7[var9].length;
  90.          if (var8 < var10) {
  91.             var8 = var10;
  92.          }
  93.       }
  94.  
  95.       if (var8 == 0) {
  96.          return 0;
  97.       } else {
  98.          byte[] var15 = new byte[var8];
  99.  
  100.          for(int var11 = 0; var11 < var7.length; ++var11) {
  101.             CharsetString var12 = var7[var11];
  102.  
  103.             try {
  104.                int var13 = var12.fontDescriptor.fontCharset.convert(var12.charsetChars, var12.offset, var12.offset + var12.length, var15, 0, var15.length);
  105.                var6 += this.getMFCharSegmentWidth(var4, var12.fontDescriptor, var15, var13);
  106.             } catch (CharConversionException var14) {
  107.             }
  108.          }
  109.  
  110.          return var6;
  111.       }
  112.    }
  113.  
  114.    private native int getMFCharSegmentWidth(Font var1, FontDescriptor var2, byte[] var3, int var4);
  115.  
  116.    public native int bytesWidth(byte[] var1, int var2, int var3);
  117.  
  118.    public int[] getWidths() {
  119.       return this.widths;
  120.    }
  121.  
  122.    native void init();
  123.  
  124.    static synchronized FontMetrics getFontMetrics(Font var0) {
  125.       Object var1 = (FontMetrics)table.get(var0);
  126.       if (var1 == null) {
  127.          table.put(var0, var1 = new X11FontMetrics(var0));
  128.       }
  129.  
  130.       return (FontMetrics)var1;
  131.    }
  132. }
  133.