home *** CD-ROM | disk | FTP | other *** search
- package sun.awt.windows;
-
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.io.CharConversionException;
- import java.util.Hashtable;
- import sun.awt.CharsetString;
- import sun.awt.FontDescriptor;
- import sun.awt.PlatformFont;
-
- class WFontMetrics extends FontMetrics {
- int[] widths;
- int ascent;
- int descent;
- int leading;
- int height;
- int maxAscent;
- int maxDescent;
- int maxHeight;
- int maxAdvance;
- static Hashtable table = new Hashtable();
-
- public WFontMetrics(Font var1) {
- super(var1);
- this.init();
- }
-
- public int getLeading() {
- return this.leading;
- }
-
- public int getAscent() {
- return this.ascent;
- }
-
- public int getDescent() {
- return this.descent;
- }
-
- public int getHeight() {
- return this.height;
- }
-
- public int getMaxAscent() {
- return this.maxAscent;
- }
-
- public int getMaxDescent() {
- return this.maxDescent;
- }
-
- public int getMaxAdvance() {
- return this.maxAdvance;
- }
-
- public int stringWidth(String var1) {
- return this.charsWidth(var1.toCharArray(), 0, var1.length());
- }
-
- public int charsWidth(char[] var1, int var2, int var3) {
- Font var4 = ((FontMetrics)this).getFont();
- PlatformFont var5 = (PlatformFont)var4.getPeer();
- if (var5.mightHaveMultiFontMetrics()) {
- return this.getMFStringWidth(var1, var2, var3, var4, var5);
- } else if (this.widths == null) {
- return this.maxAdvance * var3;
- } else {
- int var6 = 0;
-
- for(int var7 = var2; var7 < var2 + var3; ++var7) {
- char var8 = var1[var7];
- if (var8 >= 0 && var8 < this.widths.length) {
- var6 += this.widths[var8];
- } else {
- var6 += this.maxAdvance;
- }
- }
-
- return var6;
- }
- }
-
- private int getMFStringWidth(char[] var1, int var2, int var3, Font var4, PlatformFont var5) {
- if (var3 == 0) {
- return 0;
- } else {
- CharsetString[] var6 = var5.makeMultiCharsetString(var1, var2, var3);
- byte[] var7 = null;
- int var8 = 0;
- int var9 = 0;
-
- for(int var10 = 0; var10 < var6.length; ++var10) {
- CharsetString var11 = var6[var10];
- if (needsConversion(var4, var11.fontDescriptor)) {
- try {
- int var12 = var11.fontDescriptor.fontCharset.getMaxBytesPerChar() * var11.length;
- if (var12 > var8) {
- var8 = var12;
- var7 = new byte[var12];
- }
-
- int var13 = var11.fontDescriptor.fontCharset.convert(var11.charsetChars, var11.offset, var11.offset + var11.length, var7, 0, var7.length);
- var9 += this.getMFCharSegmentWidth(var4, var11.fontDescriptor, true, (char[])null, 0, 0, var7, var13);
- } catch (CharConversionException var14) {
- }
- } else {
- var9 += this.getMFCharSegmentWidth(var4, var11.fontDescriptor, false, var11.charsetChars, var11.offset, var11.length, (byte[])null, 0);
- }
- }
-
- return var9;
- }
- }
-
- static native boolean needsConversion(Font var0, FontDescriptor var1);
-
- private native int getMFCharSegmentWidth(Font var1, FontDescriptor var2, boolean var3, char[] var4, int var5, int var6, byte[] var7, int var8);
-
- public native int bytesWidth(byte[] var1, int var2, int var3);
-
- public int[] getWidths() {
- return this.widths;
- }
-
- native void init();
-
- static FontMetrics getFontMetrics(Font var0) {
- Object var1 = (FontMetrics)table.get(var0);
- if (var1 == null) {
- table.put(var0, var1 = new WFontMetrics(var0));
- }
-
- return (FontMetrics)var1;
- }
- }
-