19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.awt.AndroidGraphics2D; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.FontRenderContext; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.GlyphVector; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.LineMetrics; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.TextAttribute; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.font.TransformAttribute; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.AffineTransform; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.Rectangle2D; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.BufferedInputStream; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileOutputStream; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.Serializable; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.CharacterIterator; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.text.AttributedCharacterIterator.Attribute; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Hashtable; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Locale; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.StringTokenizer; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.AndroidGlyphVector; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.CommonGlyphVector; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.FontPeerImpl; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.FontMetricsImpl; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.font.LineMetricsImpl; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.internal.nls.Messages; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.luni.util.NotImplementedException; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.misc.HashCode; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Font class represents fonts for rendering text. This class allow to map 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * characters to glyphs. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A glyph is a shape used to render a character or a sequence of characters. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For example one character of Latin writing system represented by one glyph, 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but in complex writing system such as South and South-East Asian there is 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more complicated correspondence between characters and glyphs. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Font object is identified by two types of names. The logical font name is 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the name that is used to construct the font. The font name is the name of a 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * particular font face (for example, Arial Bold). The family name is the font's 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * family name that specifies the typographic design across several faces (for 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * example, Arial). In all the Font is identified by three attributes: the 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * family name, the style (such as bold or italic), and the size. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Font implements Serializable { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant serialVersionUID. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final long serialVersionUID = -4206021311591459213L; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Identity Transform attribute 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant IDENTITY_TRANSFORM. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final TransformAttribute IDENTITY_TRANSFORM = new TransformAttribute( 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new AffineTransform()); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant PLAIN indicates font's plain style. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PLAIN = 0; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant BOLD indicates font's bold style. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int BOLD = 1; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant ITALIC indicates font's italic style. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ITALIC = 2; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant ROMAN_BASELINE indicated roman baseline. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ROMAN_BASELINE = 0; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant CENTER_BASELINE indicates center baseline. 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CENTER_BASELINE = 1; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant HANGING_BASELINE indicates hanging baseline. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HANGING_BASELINE = 2; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant TRUETYPE_FONT indicates a font resource of type TRUETYPE. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TRUETYPE_FONT = 0; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant TYPE1_FONT indicates a font resource of type TYPE1. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TYPE1_FONT = 1; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant LAYOUT_LEFT_TO_RIGHT indicates that text is left to right. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LAYOUT_LEFT_TO_RIGHT = 0; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant LAYOUT_RIGHT_TO_LEFT indicates that text is right to left. 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LAYOUT_RIGHT_TO_LEFT = 1; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant LAYOUT_NO_START_CONTEXT indicates that the text in the char 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * array before the indicated start should not be examined. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LAYOUT_NO_START_CONTEXT = 2; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant LAYOUT_NO_LIMIT_CONTEXT indicates that text in the char 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * array after the indicated limit should not be examined. 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LAYOUT_NO_LIMIT_CONTEXT = 4; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Constant DEFAULT_FONT. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final Font DEFAULT_FONT = new Font("Dialog", Font.PLAIN, 12); //$NON-NLS-1$ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of the Font. 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected String name; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The style of the Font. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected int style; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The size of the Font. 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected int size; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The point size of the Font. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected float pointSize; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Flag if the Font object transformed 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The transformed. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean transformed; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Set of font attributes 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The requested attributes. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Hashtable<Attribute, Object> fRequestedAttributes; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // font peer object corresponding to this Font 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The font peer. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private transient FontPeerImpl fontPeer; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // number of glyphs in this Font 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The num glyphs. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private transient int numGlyphs = -1; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // code for missing glyph for this Font 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The missing glyph code. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private transient int missingGlyphCode = -1; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Writes object to ObjectOutputStream. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param out 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ObjectOutputStream. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Signals that an I/O exception has occurred. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void writeObject(java.io.ObjectOutputStream out) throws IOException { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.defaultWriteObject(); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reads object from ObjectInputStream object and set native platform 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dependent fields to default values. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param in 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ObjectInputStream object. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Signals that an I/O exception has occurred. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ClassNotFoundException 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the class not found exception. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void readObject(java.io.ObjectInputStream in) throws IOException, 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ClassNotFoundException { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.defaultReadObject(); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project numGlyphs = -1; 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project missingGlyphCode = -1; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new Font with the specified attributes. The Font will be 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created with default attributes if the attribute's parameter is null. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attributes 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the attributes to be assigned to the new Font, or null. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font(Map<? extends Attribute, ?> attributes) { 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object currAttr; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Default values are taken from the documentation of the Font class. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // See Font constructor, decode and getFont sections. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.name = "default"; //$NON-NLS-1$ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.size = 12; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.pointSize = 12; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.style = Font.PLAIN; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (attributes != null) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes = new Hashtable<Attribute, Object>(attributes); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currAttr = attributes.get(TextAttribute.SIZE); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currAttr != null) { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.pointSize = ((Float)currAttr).floatValue(); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.size = (int)Math.ceil(this.pointSize); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currAttr = attributes.get(TextAttribute.POSTURE); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currAttr != null && currAttr.equals(TextAttribute.POSTURE_OBLIQUE)) { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.style |= Font.ITALIC; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currAttr = attributes.get(TextAttribute.WEIGHT); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((currAttr != null) 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && (((Float)currAttr).floatValue() >= (TextAttribute.WEIGHT_BOLD).floatValue())) { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.style |= Font.BOLD; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currAttr = attributes.get(TextAttribute.FAMILY); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currAttr != null) { 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.name = (String)currAttr; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currAttr = attributes.get(TextAttribute.TRANSFORM); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currAttr != null) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currAttr instanceof TransformAttribute) { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.transformed = !((TransformAttribute)currAttr).getTransform().isIdentity(); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (currAttr instanceof AffineTransform) { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.transformed = !((AffineTransform)currAttr).isIdentity(); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes = new Hashtable<Attribute, Object>(5); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.TRANSFORM, IDENTITY_TRANSFORM); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.transformed = false; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.FAMILY, name); 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.SIZE, new Float(this.size)); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((this.style & Font.BOLD) != 0) { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((this.style & Font.ITALIC) != 0) { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new Font with the specified name, style and size. 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the name of font. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the style of font. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the size of font. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font(String name, int style, int size) { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.name = (name != null) ? name : "Default"; //$NON-NLS-1$ 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.size = (size >= 0) ? size : 0; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.style = (style & ~0x03) == 0 ? style : Font.PLAIN; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.pointSize = this.size; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes = new Hashtable<Attribute, Object>(5); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.TRANSFORM, IDENTITY_TRANSFORM); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.transformed = false; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.FAMILY, this.name); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.SIZE, new Float(this.size)); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((this.style & Font.BOLD) != 0) { 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((this.style & Font.ITALIC) != 0) { 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this Font has a glyph for the specified character. 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the character. 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if this Font has a glyph for the specified character, false 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise. 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean canDisplay(char c) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return peer.canDisplay(c); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the Font can display the characters of the the specified 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text from the specified start position to the specified limit position. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the text. 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset (in the character array). 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param limit 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the limit offset (in the character array). 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the a character's position in the text that this Font can not 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * display, or -1 if this Font can display all characters in this 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text. 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int canDisplayUpTo(char[] text, int start, int limit) { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int st = start; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while ((st < limit) && canDisplay(text[st])) { 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project st++; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (st == limit) { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = -1; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = st; 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the Font can display the characters of the the specified 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CharacterIterator from the specified start position and the specified 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limit position. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param iter 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the CharacterIterator. 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param limit 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the limit offset. 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the a character's position in the CharacterIterator that this 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Font can not display, or -1 if this Font can display all 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * characters in this text. 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int canDisplayUpTo(CharacterIterator iter, int start, int limit) { 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int st = start; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char c = iter.setIndex(start); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while ((st < limit) && (canDisplay(c))) { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project st++; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = iter.next(); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (st == limit) { 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = -1; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = st; 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this Font can display a specified String. 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the String. 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the a character's position in the String that this Font can not 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * display, or -1 if this Font can display all characters in this 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * text. 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int canDisplayUpTo(String str) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] chars = str.toCharArray(); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return canDisplayUpTo(chars, 0, chars.length); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a GlyphVector of associating characters to glyphs based on the 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unicode map of this Font. 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param chars 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the characters array. 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the GlyphVector of associating characters to glyphs based on the 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unicode map of this Font. 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GlyphVector createGlyphVector(FontRenderContext frc, char[] chars) { 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new AndroidGlyphVector(chars, frc, this, 0); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a GlyphVector of associating characters contained in the 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified CharacterIterator to glyphs based on the Unicode map of this 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Font. 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param iter 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the CharacterIterator. 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the GlyphVector of associating characters contained in the 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified CharacterIterator to glyphs based on the Unicode map of 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this Font. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GlyphVector createGlyphVector(FontRenderContext frc, CharacterIterator iter) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("Not implemented!"); //$NON-NLS-1$ 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a GlyphVector of associating characters to glyphs based on the 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unicode map of this Font. 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param glyphCodes 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified integer array of glyph codes. 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the GlyphVector of associating characters to glyphs based on the 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unicode map of this Font. 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NotImplementedException 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if this method is not implemented by a subclass. 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GlyphVector createGlyphVector(FontRenderContext frc, int[] glyphCodes) 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws org.apache.harmony.luni.util.NotImplementedException { 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("Not implemented!"); //$NON-NLS-1$ 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates a GlyphVector of associating characters to glyphs based on the 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unicode map of this Font. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified String. 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the GlyphVector of associating characters to glyphs based on the 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unicode map of this Font. 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GlyphVector createGlyphVector(FontRenderContext frc, String str) { 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new AndroidGlyphVector(str.toCharArray(), frc, this, 0); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the font style constant value corresponding to one of the font 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style names ("BOLD", "ITALIC", "BOLDITALIC"). This method returns 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Font.PLAIN if the argument is not one of the predefined style names. 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fontStyleName 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * font style name. 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return font style constant value corresponding to the font style name 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified. 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static int getFontStyle(String fontStyleName) { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = Font.PLAIN; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fontStyleName.toUpperCase().equals("BOLDITALIC")) { //$NON-NLS-1$ 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = Font.BOLD | Font.ITALIC; 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (fontStyleName.toUpperCase().equals("BOLD")) { //$NON-NLS-1$ 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = Font.BOLD; 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (fontStyleName.toUpperCase().equals("ITALIC")) { //$NON-NLS-1$ 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = Font.ITALIC; 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Decodes the specified string which described the Font. The string should 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * have the following format: fontname-style-pointsize. The style can be 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PLAIN, BOLD, BOLDITALIC, or ITALIC. 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the string which describes the font. 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font from the specified string. 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Font decode(String str) { 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX: Documentation doesn't describe all cases, e.g. fonts face names 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // with 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // symbols that are suggested as delimiters in the documentation. 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // In this decode implementation only ***-***-*** format is used with 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // '-' 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // as the delimiter to avoid unexpected parse results of font face names 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // with spaces. 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (str == null) { 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return DEFAULT_FONT; 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringTokenizer strTokens; 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String delim = "-"; //$NON-NLS-1$ 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String substr; 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int fontSize = DEFAULT_FONT.size; 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int fontStyle = DEFAULT_FONT.style; 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String fontName = DEFAULT_FONT.name; 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project strTokens = new StringTokenizer(str.trim(), delim); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Font Name 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (strTokens.hasMoreTokens()) { 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontName = strTokens.nextToken(); // first token is the font name 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Font Style or Size (if the style is undefined) 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (strTokens.hasMoreTokens()) { 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project substr = strTokens.nextToken(); 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if second token is the font size 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontSize = Integer.parseInt(substr); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (NumberFormatException e) { 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // then second token is the font style 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontStyle = getFontStyle(substr); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Font Size 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (strTokens.hasMoreTokens()) { 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontSize = Integer.parseInt(strTokens.nextToken()); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (NumberFormatException e) { 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(fontName, fontStyle, fontSize); 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Performs the specified affine transform to the Font and returns a new 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Font. 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param trans 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the AffineTransform. 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font object. 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if affine transform parameter is null. 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font deriveFont(AffineTransform trans) { 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (trans == null) { 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.94=transform can not be null 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(Messages.getString("awt.94")); //$NON-NLS-1$ 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Hashtable<Attribute, Object> derivefRequestedAttributes = (Hashtable<Attribute, Object>)fRequestedAttributes 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .clone(); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.TRANSFORM, new TransformAttribute(trans)); 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(derivefRequestedAttributes); 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new Font that is a copy of the current Font modified so that 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the size is the specified size. 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the size of font. 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font object. 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font deriveFont(float size) { 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Hashtable<Attribute, Object> derivefRequestedAttributes = (Hashtable<Attribute, Object>)fRequestedAttributes 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .clone(); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.SIZE, new Float(size)); 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(derivefRequestedAttributes); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new Font that is a copy of the current Font modified so that 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the style is the specified style. 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the style of font. 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font object. 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font deriveFont(int style) { 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Hashtable<Attribute, Object> derivefRequestedAttributes = (Hashtable<Attribute, Object>)fRequestedAttributes 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .clone(); 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((style & Font.BOLD) != 0) { 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (derivefRequestedAttributes.get(TextAttribute.WEIGHT) != null) { 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.remove(TextAttribute.WEIGHT); 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((style & Font.ITALIC) != 0) { 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (derivefRequestedAttributes.get(TextAttribute.POSTURE) != null) { 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.remove(TextAttribute.POSTURE); 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(derivefRequestedAttributes); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new Font that is a copy of the current Font modified to match 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified style and with the specified affine transform applied to 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its glyphs. 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the style of font. 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param trans 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the AffineTransform. 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font object. 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font deriveFont(int style, AffineTransform trans) { 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (trans == null) { 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.94=transform can not be null 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(Messages.getString("awt.94")); //$NON-NLS-1$ 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Hashtable<Attribute, Object> derivefRequestedAttributes = (Hashtable<Attribute, Object>)fRequestedAttributes 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .clone(); 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((style & BOLD) != 0) { 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (derivefRequestedAttributes.get(TextAttribute.WEIGHT) != null) { 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.remove(TextAttribute.WEIGHT); 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((style & ITALIC) != 0) { 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (derivefRequestedAttributes.get(TextAttribute.POSTURE) != null) { 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.remove(TextAttribute.POSTURE); 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.TRANSFORM, new TransformAttribute(trans)); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(derivefRequestedAttributes); 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new Font that is a copy of the current Font modified so that 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the size and style are the specified size and style. 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the style of font. 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the size of font. 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font object. 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font deriveFont(int style, float size) { 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Hashtable<Attribute, Object> derivefRequestedAttributes = (Hashtable<Attribute, Object>)fRequestedAttributes 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .clone(); 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((style & BOLD) != 0) { 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (derivefRequestedAttributes.get(TextAttribute.WEIGHT) != null) { 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.remove(TextAttribute.WEIGHT); 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((style & ITALIC) != 0) { 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (derivefRequestedAttributes.get(TextAttribute.POSTURE) != null) { 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.remove(TextAttribute.POSTURE); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(TextAttribute.SIZE, new Float(size)); 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(derivefRequestedAttributes); 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new Font object with a new set of font attributes. 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attributes 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the map of attributes. 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font. 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Font deriveFont(Map<? extends Attribute, ?> attributes) { 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Attribute[] avalAttributes = this.getAvailableAttributes(); 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Hashtable<Attribute, Object> derivefRequestedAttributes = (Hashtable<Attribute, Object>)fRequestedAttributes 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .clone(); 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object currAttribute; 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Attribute element : avalAttributes) { 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project currAttribute = attributes.get(element); 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (currAttribute != null) { 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project derivefRequestedAttributes.put(element, currAttribute); 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(derivefRequestedAttributes); 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Compares the specified Object with the current Font. 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param obj 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Object to be compared. 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if the specified Object is an instance of Font with the 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * same family, size, and style as this Font, false otherwise. 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean equals(Object obj) { 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj == this) { 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (obj != null) { 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Font font = (Font)obj; 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ((this.style == font.style) && (this.size == font.size) 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.name.equals(font.name) && (this.pointSize == font.pointSize) && (this 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTransform()).equals(font.getTransform())); 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (ClassCastException e) { 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the map of font's attributes. 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the map of font's attributes. 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unchecked") 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Map<TextAttribute, ?> getAttributes() { 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (Map<TextAttribute, ?>)fRequestedAttributes.clone(); 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the keys of all available attributes. 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the keys array of all available attributes. 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Attribute[] getAvailableAttributes() { 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Attribute[] attrs = { 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextAttribute.FAMILY, TextAttribute.POSTURE, TextAttribute.SIZE, 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextAttribute.TRANSFORM, TextAttribute.WEIGHT, TextAttribute.SUPERSCRIPT, 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextAttribute.WIDTH 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return attrs; 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the baseline for this character. 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the character. 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the baseline for this character. 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte getBaselineFor(char c) { 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: implement using TT BASE table data 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the family name of the Font. 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the family name of the Font. 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getFamily() { 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fRequestedAttributes != null) { 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.get(TextAttribute.FAMILY); 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the family name of this Font associated with the specified 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * locale. 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param l 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the locale. 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the family name of this Font associated with the specified 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * locale. 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getFamily(Locale l) { 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (l == null) { 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.01='{0}' parameter is null 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(Messages.getString("awt.01", "Locale")); //$NON-NLS-1$ //$NON-NLS-2$ 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getFamily(); 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets a Font with the specified attribute set. 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attributes 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the attributes to be assigned to the new Font. 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font. 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Font getFont(Map<? extends Attribute, ?> attributes) { 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Font fnt = (Font)attributes.get(TextAttribute.FONT); 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fnt != null) { 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return fnt; 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Font(attributes); 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets a Font object from the system properties list with the specified 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * name or returns the specified Font if there is no such property. 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sp 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified property name. 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param f 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the Font. 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font object from the system properties list with the 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified name or the specified Font if there is no such 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * property. 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Font getFont(String sp, Font f) { 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String pr = System.getProperty(sp); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pr == null) { 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return f; 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return decode(pr); 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets a Font object from the system properties list with the specified 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * name. 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sp 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system property name. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font, or null if there is no such property with the specified 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * name. 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Font getFont(String sp) { 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getFont(sp, null); 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the font name. 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the font name. 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getFontName() { 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fRequestedAttributes != null) { 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fRequestedAttributes.get(TextAttribute.FAMILY); 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the font name associated with the specified locale. 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param l 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the locale. 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the font name associated with the specified locale. 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getFontName(Locale l) { 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getFamily(); 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a LineMetrics object created with the specified parameters. 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param chars 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the chars array. 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end offset. 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the LineMetrics for the specified parameters. 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LineMetrics getLineMetrics(char[] chars, int start, int end, FontRenderContext frc) { 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (frc == null) { 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.00=FontRenderContext is null 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // FontMetrics fm = AndroidGraphics2D.getInstance().getFontMetrics(); 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontMetrics fm = new FontMetricsImpl(this); 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] fmet = { 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fm.getAscent(), fm.getDescent(), fm.getLeading() 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LineMetricsImpl(chars.length, fmet, null); 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a LineMetrics object created with the specified parameters. 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param iter 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the CharacterIterator. 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end offset. 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the LineMetrics for the specified parameters. 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LineMetrics getLineMetrics(CharacterIterator iter, int start, int end, 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontRenderContext frc) { 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (frc == null) { 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.00=FontRenderContext is null 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String resultString; 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int iterCount; 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iterCount = end - start; 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iterCount < 0) { 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultString = ""; //$NON-NLS-1$ 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] chars = new char[iterCount]; 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int i = 0; 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (char c = iter.setIndex(start); c != CharacterIterator.DONE && (i < iterCount); c = iter 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .next()) { 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project chars[i] = c; 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i++; 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultString = new String(chars); 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.getLineMetrics(resultString, frc); 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a LineMetrics object created with the specified parameters. 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the String. 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the LineMetrics for the specified parameters. 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LineMetrics getLineMetrics(String str, FontRenderContext frc) { 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // FontMetrics fm = AndroidGraphics2D.getInstance().getFontMetrics(); 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontMetrics fm = new FontMetricsImpl(this); 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float[] fmet = { 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fm.getAscent(), fm.getDescent(), fm.getLeading() 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Log.i("FONT FMET", fmet.toString()); 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new LineMetricsImpl(str.length(), fmet, null); 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a LineMetrics object created with the specified parameters. 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the String. 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end offset. 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the LineMetrics for the specified parameters. 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LineMetrics getLineMetrics(String str, int start, int end, FontRenderContext frc) { 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.getLineMetrics(str.substring(start, end), frc); 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the logical bounds of the specified String in the specified 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FontRenderContext. The logical bounds contains the origin, ascent, 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * advance, and height. 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ci 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified CharacterIterator. 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end offset. 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Rectangle2D object. 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getStringBounds(CharacterIterator ci, int start, int end, 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontRenderContext frc) { 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int first = ci.getBeginIndex(); 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int finish = ci.getEndIndex(); 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] chars; 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start < first) { 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.95=Wrong start index: {0} 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(Messages.getString("awt.95", start)); //$NON-NLS-1$ 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (end > finish) { 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.96=Wrong finish index: {0} 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(Messages.getString("awt.96", end)); //$NON-NLS-1$ 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start > end) { 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.97=Wrong range length: {0} 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(Messages.getString("awt.97", //$NON-NLS-1$ 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (end - start))); 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (frc == null) { 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project chars = new char[end - start]; 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ci.setIndex(start); 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < chars.length; i++) { 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project chars[i] = ci.current(); 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ci.next(); 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.getStringBounds(chars, 0, chars.length, frc); 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the logical bounds of the specified String in the specified 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FontRenderContext. The logical bounds contains the origin, ascent, 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * advance, and height. 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified String. 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Rectangle2D object. 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getStringBounds(String str, FontRenderContext frc) { 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] chars = str.toCharArray(); 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.getStringBounds(chars, 0, chars.length, frc); 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the logical bounds of the specified String in the specified 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FontRenderContext. The logical bounds contains the origin, ascent, 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * advance, and height. 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param str 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified String. 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end offset. 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Rectangle2D object. 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getStringBounds(String str, int start, int end, FontRenderContext frc) { 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.getStringBounds((str.substring(start, end)), frc); 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the logical bounds of the specified String in the specified 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FontRenderContext. The logical bounds contains the origin, ascent, 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * advance, and height. 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param chars 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the specified character array. 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset. 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the end offset. 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Rectangle2D object. 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getStringBounds(char[] chars, int start, int end, FontRenderContext frc) { 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start < 0) { 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.95=Wrong start index: {0} 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(Messages.getString("awt.95", start)); //$NON-NLS-1$ 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (end > chars.length) { 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.96=Wrong finish index: {0} 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(Messages.getString("awt.96", end)); //$NON-NLS-1$ 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start > end) { 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.97=Wrong range length: {0} 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IndexOutOfBoundsException(Messages.getString("awt.97", //$NON-NLS-1$ 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (end - start))); 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (frc == null) { 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int TRANSFORM_MASK = AffineTransform.TYPE_GENERAL_ROTATION 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | AffineTransform.TYPE_GENERAL_TRANSFORM; 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rectangle2D bounds; 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AffineTransform transform = getTransform(); 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX: for transforms where an angle between basis vectors is not 90 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // degrees Rectanlge2D class doesn't fit as Logical bounds. 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((transform.getType() & TRANSFORM_MASK) == 0) { 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int width = 0; 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = start; i < end; i++) { 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project width += peer.charWidth(chars[i]); 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // LineMetrics nlm = peer.getLineMetrics(); 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LineMetrics nlm = getLineMetrics(chars, start, end, frc); 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bounds = transform.createTransformedShape( 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Rectangle2D.Float(0, -nlm.getAscent(), width, nlm.getHeight())) 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getBounds2D(); 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int len = end - start; 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] subChars = new char[len]; 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.arraycopy(chars, start, subChars, 0, len); 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bounds = createGlyphVector(frc, subChars).getLogicalBounds(); 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bounds; 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the character's maximum bounds as defined in the specified 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * FontRenderContext. 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the character's maximum bounds. 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getMaxCharBounds(FontRenderContext frc) { 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (frc == null) { 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.00=FontRenderContext is null 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(Messages.getString("awt.00")); //$NON-NLS-1$ 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rectangle2D bounds = peer.getMaxCharBounds(frc); 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AffineTransform transform = getTransform(); 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // !! Documentation doesn't describe meaning of max char bounds 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // for the fonts that have rotate transforms. For all transforms 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // returned bounds are the bounds of transformed maxCharBounds 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Rectangle2D that corresponds to the font with identity transform. 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: resolve this issue to return correct bounds 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bounds = transform.createTransformedShape(bounds).getBounds2D(); 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bounds; 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a new GlyphVector object performing full layout of the text. 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param frc 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the FontRenderContext. 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param chars 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the character array to be layout. 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param start 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the start offset of the text to use for the GlyphVector. 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param count 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the count of characters to use for the GlyphVector. 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the flag indicating text direction: LAYOUT_RIGHT_TO_LEFT, 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * LAYOUT_LEFT_TO_RIGHT. 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the GlyphVector. 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public GlyphVector layoutGlyphVector(FontRenderContext frc, char[] chars, int start, int count, 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags) { 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // TODO: implement method for bidirectional text. 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // At the moment only LTR and RTL texts supported. 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start < 0) { 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.95=Wrong start index: {0} 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.95", //$NON-NLS-1$ 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project start)); 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (count < 0) { 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.98=Wrong count value, can not be negative: {0} 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.98", //$NON-NLS-1$ 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project count)); 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (start + count > chars.length) { 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // awt.99=Wrong [start + count] is out of range: {0} 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ArrayIndexOutOfBoundsException(Messages.getString("awt.99", //$NON-NLS-1$ 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (start + count))); 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char[] out = new char[count]; 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.arraycopy(chars, start, out, 0, count); 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new CommonGlyphVector(out, frc, this, flags); 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the String representation of this Font. 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the String representation of this Font. 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String stl = "plain"; //$NON-NLS-1$ 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String result; 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.isBold() && this.isItalic()) { 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stl = "bolditalic"; //$NON-NLS-1$ 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.isBold() && !this.isItalic()) { 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stl = "bold"; //$NON-NLS-1$ 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!this.isBold() && this.isItalic()) { 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stl = "italic"; //$NON-NLS-1$ 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = this.getClass().getName() + "[family=" + this.getFamily() + //$NON-NLS-1$ 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ",name=" + this.name + //$NON-NLS-1$ 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ",style=" + stl + //$NON-NLS-1$ 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ",size=" + this.size + "]"; //$NON-NLS-1$ //$NON-NLS-2$ 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result; 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the postscript name of this Font. 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the postscript name of this Font. 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getPSName() { 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return peer.getPSName(); 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the logical name of this Font. 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the logical name of this Font. 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getName() { 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (this.name); 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the peer of this Font. 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the peer of this Font. 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @deprecated Font rendering is platform independent now. 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public java.awt.peer.FontPeer getPeer() { 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fontPeer == null) { 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontPeer = (FontPeerImpl)Toolkit.getDefaultToolkit().getGraphicsFactory().getFontPeer( 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this); 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return fontPeer; 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the transform acting on this Font (from the Font's attributes). 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the transformation of this Font. 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AffineTransform getTransform() { 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object transform = fRequestedAttributes.get(TextAttribute.TRANSFORM); 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (transform != null) { 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (transform instanceof TransformAttribute) { 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ((TransformAttribute)transform).getTransform(); 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (transform instanceof AffineTransform) { 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new AffineTransform((AffineTransform)transform); 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform = new AffineTransform(); 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (AffineTransform)transform; 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if this font is transformed or not. 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if this font is transformed, false otherwise. 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isTransformed() { 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.transformed; 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if this font has plain style or not. 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if this font has plain style, false otherwise. 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isPlain() { 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (this.style == PLAIN); 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if this font has italic style or not. 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if this font has italic style, false otherwise. 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isItalic() { 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (this.style & ITALIC) != 0; 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if this font has bold style or not. 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if this font has bold style, false otherwise. 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isBold() { 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (this.style & BOLD) != 0; 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this Font has uniform line metrics. 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if this Font has uniform line metrics, false otherwise. 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasUniformLineMetrics() { 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return peer.hasUniformLineMetrics(); 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns hash code of this Font object. 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the hash code of this Font object. 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int hashCode() { 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashCode hash = new HashCode(); 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hash.append(this.name); 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hash.append(this.style); 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hash.append(this.size); 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return hash.hashCode(); 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the style of this Font. 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the style of this Font. 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getStyle() { 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.style; 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the size of this Font. 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the size of this Font. 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSize() { 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.size; 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the number of glyphs for this Font. 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the number of glyphs for this Font. 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getNumGlyphs() { 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (numGlyphs == -1) { 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.numGlyphs = peer.getNumGlyphs(); 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.numGlyphs; 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the glyphCode which is used as default glyph when this Font does not 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * have a glyph for a specified Unicode. 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the missing glyph code. 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMissingGlyphCode() { 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (missingGlyphCode == -1) { 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.missingGlyphCode = peer.getMissingGlyphCode(); 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.missingGlyphCode; 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the float value of font's size. 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the float value of font's size. 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getSize2D() { 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.pointSize; 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the italic angle of this Font. 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the italic angle of this Font. 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getItalicAngle() { 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FontPeerImpl peer = (FontPeerImpl)this.getPeer(); 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return peer.getItalicAngle(); 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates the font with the specified font format and font file. 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fontFormat 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the font format. 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fontFile 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the file object represented the input data for the font. 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font. 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws FontFormatException 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is thrown if fontFile does not contain the required font 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tables for the specified format. 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * signals that an I/O exception has occurred. 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Font createFont(int fontFormat, File fontFile) throws FontFormatException, 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IOException { 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ???AWT not supported 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputStream is = new FileInputStream(fontFile); 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return createFont(fontFormat, is); 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project is.close(); 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates the font with the specified font format and input stream. 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fontFormat 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the font format. 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fontStream 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the input stream represented input data for the font. 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the Font. 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws FontFormatException 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is thrown if fontFile does not contain the required font 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tables for the specified format. 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * signals that an I/O exception has occurred. 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Font createFont(int fontFormat, InputStream fontStream) 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws FontFormatException, IOException { 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ???AWT not supported 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BufferedInputStream buffStream; 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int bRead = 0; 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int size = 8192; 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // memory page size, for the faster reading 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte buf[] = new byte[size]; 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fontFormat != TRUETYPE_FONT) { // awt.9A=Unsupported font format 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(Messages.getString("awt.9A")); //$NON-NLS-1$ 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Get font file in system-specific directory */ 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project File fontFile = Toolkit.getDefaultToolkit().getGraphicsFactory().getFontManager() 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTempFontFile(); 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // BEGIN android-modified 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffStream = new BufferedInputStream(fontStream, 8192); 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // END android-modified 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FileOutputStream fOutStream = new FileOutputStream(fontFile); 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bRead = buffStream.read(buf, 0, size); 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (bRead != -1) { 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fOutStream.write(buf, 0, bRead); 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bRead = buffStream.read(buf, 0, size); 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffStream.close(); 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fOutStream.close(); 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Font font = null; 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project font = Toolkit.getDefaultToolkit().getGraphicsFactory().embedFont( 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fontFile.getAbsolutePath()); 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (font == null) { // awt.9B=Can't create font - bad font data 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new FontFormatException(Messages.getString("awt.9B")); //$NON-NLS-1$ 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return font; 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1542