Typeface.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetManager; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Typeface class specifies the typeface and intrinsic style of a font. 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is used in the paint, along with optionally Paint settings like 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * textSize, textSkewX, textScaleX to specify 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * how text appears when drawn (and measured). 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Typeface { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The default NORMAL typeface object */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Typeface DEFAULT; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default BOLD typeface object. Note: this may be not actually be 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bold, depending on what fonts are installed. Call getStyle() to know 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for sure. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Typeface DEFAULT_BOLD; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The NORMAL style of the default sans serif typeface. */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Typeface SANS_SERIF; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The NORMAL style of the default serif typeface. */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Typeface SERIF; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The NORMAL style of the default monospace typeface. */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Typeface MONOSPACE; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static Typeface[] sDefaults; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* package */ int native_instance; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Style 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NORMAL = 0; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int BOLD = 1; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ITALIC = 2; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int BOLD_ITALIC = 3; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Returns the typeface's intrinsic style attributes */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getStyle() { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return nativeGetStyle(native_instance); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Returns true if getStyle() has the BOLD bit set. */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isBold() { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getStyle() & BOLD) != 0; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Returns true if getStyle() has the ITALIC bit set. */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isItalic() { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (getStyle() & ITALIC) != 0; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a typeface object given a family name, and option style information. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If null is passed for the name, then the "default" font will be chosen. 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The resulting typeface object can be queried (getStyle()) to discover what 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its "real" style characteristics are. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param familyName May be null. The name of the font family. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style The style (normal, bold, italic) of the typeface. 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * e.g. NORMAL, BOLD, ITALIC, BOLD_ITALIC 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The best matching typeface. 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Typeface create(String familyName, int style) { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Typeface(nativeCreate(familyName, style)); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a typeface object that best matches the specified existing 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * typeface and the specified Style. Use this call if you want to pick a new 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * style from the same family of an existing typeface object. If family is 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null, this selects from the default font's family. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param family May be null. The name of the existing type face. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param style The style (normal, bold, italic) of the typeface. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * e.g. NORMAL, BOLD, ITALIC, BOLD_ITALIC 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The best matching typeface. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Typeface create(Typeface family, int style) { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int ni = 0; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (family != null) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ni = family.native_instance; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Typeface(nativeCreateFromTypeface(ni, style)); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns one of the default typeface objects, based on the specified style 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the default typeface that corresponds to the style 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Typeface defaultFromStyle(int style) { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sDefaults[style]; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new typeface from the specified font data. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mgr The application's asset manager 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param path The file name of the font data in the assets directory 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The new typeface. 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static Typeface createFromAsset(AssetManager mgr, String path) { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Typeface(nativeCreateFromAsset(mgr, path)); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // don't allow clients to call this directly 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Typeface(int ni) { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project native_instance = ni; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DEFAULT = create((String)null, 0); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DEFAULT_BOLD = create((String)null, Typeface.BOLD); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SANS_SERIF = create("sans-serif", 0); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SERIF = create("serif", 0); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MONOSPACE = create("monospace", 0); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sDefaults = new Typeface[] { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DEFAULT, 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DEFAULT_BOLD, 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project create((String)null, Typeface.ITALIC), 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project create((String)null, Typeface.BOLD_ITALIC), 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project nativeUnref(native_instance); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int nativeCreate(String familyName, int style); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int nativeCreateFromTypeface(int native_instance, 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int style); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void nativeUnref(int native_instance); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int nativeGetStyle(int native_instance); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native int nativeCreateFromAsset(AssetManager mgr, 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String path); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 154