home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / awt / windows / WFontMetrics.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  3.1 KB  |  136 lines

  1. package sun.awt.windows;
  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 WFontMetrics 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 WFontMetrics(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.       if (var3 == 0) {
  85.          return 0;
  86.       } else {
  87.          CharsetString[] var6 = var5.makeMultiCharsetString(var1, var2, var3);
  88.          byte[] var7 = null;
  89.          int var8 = 0;
  90.          int var9 = 0;
  91.  
  92.          for(int var10 = 0; var10 < var6.length; ++var10) {
  93.             CharsetString var11 = var6[var10];
  94.             if (needsConversion(var4, var11.fontDescriptor)) {
  95.                try {
  96.                   int var12 = var11.fontDescriptor.fontCharset.getMaxBytesPerChar() * var11.length;
  97.                   if (var12 > var8) {
  98.                      var8 = var12;
  99.                      var7 = new byte[var12];
  100.                   }
  101.  
  102.                   int var13 = var11.fontDescriptor.fontCharset.convert(var11.charsetChars, var11.offset, var11.offset + var11.length, var7, 0, var7.length);
  103.                   var9 += this.getMFCharSegmentWidth(var4, var11.fontDescriptor, true, (char[])null, 0, 0, var7, var13);
  104.                } catch (CharConversionException var14) {
  105.                }
  106.             } else {
  107.                var9 += this.getMFCharSegmentWidth(var4, var11.fontDescriptor, false, var11.charsetChars, var11.offset, var11.length, (byte[])null, 0);
  108.             }
  109.          }
  110.  
  111.          return var9;
  112.       }
  113.    }
  114.  
  115.    static native boolean needsConversion(Font var0, FontDescriptor var1);
  116.  
  117.    private native int getMFCharSegmentWidth(Font var1, FontDescriptor var2, boolean var3, char[] var4, int var5, int var6, byte[] var7, int var8);
  118.  
  119.    public native int bytesWidth(byte[] var1, int var2, int var3);
  120.  
  121.    public int[] getWidths() {
  122.       return this.widths;
  123.    }
  124.  
  125.    native void init();
  126.  
  127.    static FontMetrics getFontMetrics(Font var0) {
  128.       Object var1 = (FontMetrics)table.get(var0);
  129.       if (var1 == null) {
  130.          table.put(var0, var1 = new WFontMetrics(var0));
  131.       }
  132.  
  133.       return (FontMetrics)var1;
  134.    }
  135. }
  136.