/************************************************************************** * Copyright (c) 2001, 2002, 2003 by Punch Telematix. All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * 1. Redistributions of source code must retain the above copyright * * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * * notice, this list of conditions and the following disclaimer in the * * documentation and/or other materials provided with the distribution. * * 3. Neither the name of Punch Telematix nor the names of * * other contributors may be used to endorse or promote products * * derived from this software without specific prior written permission.* * * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * * IN NO EVENT SHALL PUNCH TELEMATIX OR OTHER CONTRIBUTORS BE LIABLE * * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * **************************************************************************/ package java.awt; public class FontMetrics implements java.io.Serializable { protected Font font; /** * @status dummy implementation * @remark not compliant with specs: temporarily this method is provided as a public method instead * of a protected method; actually, the class should be abstract, which isn't the case. */ public FontMetrics(Font font) { this.font = font; } /** * @status imlemented & compliant * @remark Although it seems a waste of resources to map the chars into a String and then call stringWidth, it is the most efficient way */ public int bytesWidth(byte[] data, int offset, int count) { return stringWidth(new String(data,offset,count)); } /** * @status imlemented & compliant * @remark Although it seems a waste of resources to map the chars into a String and then call stringWidth, it is the most efficient way */ public int charsWidth(char[] data, int offset, int count) { return stringWidth(new String(data,offset,count)); } /** * @status imlemented & compliant * @remark imlemented & compliant */ public int charWidth(char ch) { return charWidth((int)ch); } /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int charWidth(int i); /** * @status imlemented & compliant * @remark imlemented & compliant */ public Font getFont() { return font; } /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getAscent(); /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getDescent(); /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getLeading(); /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getHeight(); /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getMaxAscent(); /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getMaxDescent(); /** * @status imlemented & compliant * @remark imlemented & compliant */ native public int getMaxAdvance(); /** * @status imlemented & compliant * @remark imlemented & compliant */ public int[] getWidths() { int[] widths = new int[0x100]; for (int i=0; i<0x100;i++) { widths[i]=charWidth(i); } return widths; } /** * @status seems to be working ogood enough */ native public int stringWidth(String string); public String toString() { return getClass().getName() +" - font: "+ getFont() +", height: "+ getHeight(); } }