1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.graphics; 18 19 import android.content.res.AssetManager; 20 21 import java.io.File; 22 23 /** 24 * The Typeface class specifies the typeface and intrinsic style of a font. 25 * This is used in the paint, along with optionally Paint settings like 26 * textSize, textSkewX, textScaleX to specify 27 * how text appears when drawn (and measured). 28 */ 29 public class Typeface { 30 31 /** The default NORMAL typeface object */ 32 public static final Typeface DEFAULT; 33 /** 34 * The default BOLD typeface object. Note: this may be not actually be 35 * bold, depending on what fonts are installed. Call getStyle() to know 36 * for sure. 37 */ 38 public static final Typeface DEFAULT_BOLD; 39 /** The NORMAL style of the default sans serif typeface. */ 40 public static final Typeface SANS_SERIF; 41 /** The NORMAL style of the default serif typeface. */ 42 public static final Typeface SERIF; 43 /** The NORMAL style of the default monospace typeface. */ 44 public static final Typeface MONOSPACE; 45 46 /* package */ static Typeface[] sDefaults; 47 48 /* package */ int native_instance; 49 50 // Style 51 public static final int NORMAL = 0; 52 public static final int BOLD = 1; 53 public static final int ITALIC = 2; 54 public static final int BOLD_ITALIC = 3; 55 56 /** Returns the typeface's intrinsic style attributes */ getStyle()57 public int getStyle() { 58 return nativeGetStyle(native_instance); 59 } 60 61 /** Returns true if getStyle() has the BOLD bit set. */ isBold()62 public final boolean isBold() { 63 return (getStyle() & BOLD) != 0; 64 } 65 66 /** Returns true if getStyle() has the ITALIC bit set. */ isItalic()67 public final boolean isItalic() { 68 return (getStyle() & ITALIC) != 0; 69 } 70 71 /** 72 * Create a typeface object given a family name, and option style information. 73 * If null is passed for the name, then the "default" font will be chosen. 74 * The resulting typeface object can be queried (getStyle()) to discover what 75 * its "real" style characteristics are. 76 * 77 * @param familyName May be null. The name of the font family. 78 * @param style The style (normal, bold, italic) of the typeface. 79 * e.g. NORMAL, BOLD, ITALIC, BOLD_ITALIC 80 * @return The best matching typeface. 81 */ create(String familyName, int style)82 public static Typeface create(String familyName, int style) { 83 return new Typeface(nativeCreate(familyName, style)); 84 } 85 86 /** 87 * Create a typeface object that best matches the specified existing 88 * typeface and the specified Style. Use this call if you want to pick a new 89 * style from the same family of an existing typeface object. If family is 90 * null, this selects from the default font's family. 91 * 92 * @param family May be null. The name of the existing type face. 93 * @param style The style (normal, bold, italic) of the typeface. 94 * e.g. NORMAL, BOLD, ITALIC, BOLD_ITALIC 95 * @return The best matching typeface. 96 */ create(Typeface family, int style)97 public static Typeface create(Typeface family, int style) { 98 int ni = 0; 99 if (family != null) { 100 ni = family.native_instance; 101 } 102 return new Typeface(nativeCreateFromTypeface(ni, style)); 103 } 104 105 /** 106 * Returns one of the default typeface objects, based on the specified style 107 * 108 * @return the default typeface that corresponds to the style 109 */ defaultFromStyle(int style)110 public static Typeface defaultFromStyle(int style) { 111 return sDefaults[style]; 112 } 113 114 /** 115 * Create a new typeface from the specified font data. 116 * @param mgr The application's asset manager 117 * @param path The file name of the font data in the assets directory 118 * @return The new typeface. 119 */ createFromAsset(AssetManager mgr, String path)120 public static Typeface createFromAsset(AssetManager mgr, String path) { 121 return new Typeface(nativeCreateFromAsset(mgr, path)); 122 } 123 124 /** 125 * Create a new typeface from the specified font file. 126 * 127 * @param path The path to the font data. 128 * @return The new typeface. 129 */ createFromFile(File path)130 public static Typeface createFromFile(File path) { 131 return new Typeface(nativeCreateFromFile(path.getAbsolutePath())); 132 } 133 134 /** 135 * Create a new typeface from the specified font file. 136 * 137 * @param path The full path to the font data. 138 * @return The new typeface. 139 */ createFromFile(String path)140 public static Typeface createFromFile(String path) { 141 return new Typeface(nativeCreateFromFile(path)); 142 } 143 144 // don't allow clients to call this directly Typeface(int ni)145 private Typeface(int ni) { 146 if (0 == ni) { 147 throw new RuntimeException("native typeface cannot be made"); 148 } 149 native_instance = ni; 150 } 151 152 static { 153 DEFAULT = create((String)null, 0); 154 DEFAULT_BOLD = create((String)null, Typeface.BOLD); 155 SANS_SERIF = create("sans-serif", 0); 156 SERIF = create("serif", 0); 157 MONOSPACE = create("monospace", 0); 158 159 sDefaults = new Typeface[] { 160 DEFAULT, 161 DEFAULT_BOLD, 162 create((String)null, Typeface.ITALIC), 163 create((String)null, Typeface.BOLD_ITALIC), 164 }; 165 } 166 finalize()167 protected void finalize() throws Throwable { 168 super.finalize(); 169 nativeUnref(native_instance); 170 } 171 nativeCreate(String familyName, int style)172 private static native int nativeCreate(String familyName, int style); nativeCreateFromTypeface(int native_instance, int style)173 private static native int nativeCreateFromTypeface(int native_instance, int style); nativeUnref(int native_instance)174 private static native void nativeUnref(int native_instance); nativeGetStyle(int native_instance)175 private static native int nativeGetStyle(int native_instance); nativeCreateFromAsset(AssetManager mgr, String path)176 private static native int nativeCreateFromAsset(AssetManager mgr, String path); nativeCreateFromFile(String path)177 private static native int nativeCreateFromFile(String path); 178 179 /** 180 * Set the global gamma coefficients for black and white text. This call is 181 * usually a no-op in shipping products, and only exists for testing during 182 * development. 183 * 184 * @param blackGamma gamma coefficient for black text 185 * @param whiteGamma gamma coefficient for white text 186 * 187 * @hide - this is just for calibrating devices, not for normal apps 188 */ setGammaForText(float blackGamma, float whiteGamma)189 public static native void setGammaForText(float blackGamma, float whiteGamma); 190 } 191