1 50 51 package org.openlaszlo.iv.flash.fop; 52 53 import org.openlaszlo.iv.flash.api.*; 54 import org.openlaszlo.iv.flash.api.shape.*; 55 import org.openlaszlo.iv.flash.api.action.*; 56 import org.openlaszlo.iv.flash.api.button.*; 57 import org.openlaszlo.iv.flash.api.text.*; 58 import org.openlaszlo.iv.flash.parser.*; 59 import org.openlaszlo.iv.flash.util.*; 60 61 62 import java.io.*; 63 import java.util.*; 64 65 72 73 public class SWFFontMetric implements org.apache.fop.layout.FontMetric 74 { 75 private String fontName = null; 76 private Font flashFont = null; 77 private int widths[] = null; 78 79 82 83 public SWFFontMetric( String fontName ) 84 { 85 this.fontName = fontName; 86 } 87 88 public int getAscender( int size ) 89 { 90 Font font = getFont( ); 91 int realAscent; 92 93 realAscent = font.ascent - font.descent; 94 95 return convertUnits( size * realAscent ); 96 } 97 98 public int getCapHeight( int size ) 99 { 100 return this.getAscender( size ); 101 } 102 103 public int getDescender( int size ) 104 { 105 Font font = getFont( ); 106 107 return convertUnits( -1 * size * font.descent ); 108 } 109 110 public int getFirstChar( ) 111 { 112 return 32; 113 } 114 115 public int getLastChar( ) 116 { 117 return 255; 118 } 119 120 public int[] getWidths( int size ) 121 { 122 Font font = getFont( ); 123 124 if ( this.widths == null ) 125 { 126 this.widths = new int[ 255 ]; 127 128 for ( int i = 0; i < this.widths.length; i++ ) 129 { 130 int code = font.getIndex( ( char ) i ); 131 this.widths[ i ] = convertUnits( size * ( font.getAdvanceValue( code ) * 2 ) ); 132 } 133 } 134 135 return this.widths; 136 } 137 138 public int getXHeight( int size ) 139 { 140 Font font = getFont( ); 141 142 return convertUnits( ( size 143 + ( font.ascent * 1000 ) 144 + ( font.descent * 1000 ) ) * 1000 ); 145 } 146 147 public int width( int i, int size ) 148 { 149 Font font = getFont( ); 150 151 int code = font.getIndex( ( char ) i ); 152 int width = font.getAdvanceValue( code ); 153 154 return convertUnits( width * size ); 155 } 156 157 160 161 public Font getFont() 162 { 163 if ( flashFont == null ) 164 { 165 flashFont = FontDef.load( fontName ); 166 } 167 168 return flashFont; 169 } 170 171 175 176 private int convertUnits( int n ) 177 { 178 return Math.round( n * ( 1000f / 1024f ) ); 179 } 180 } 181 | Popular Tags |