19b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk/* 265c80f824711f084c4ece9204f543a7809534294Jason Sams * Copyright (C) 2008-2012 The Android Open Source Project 39b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * 49b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 59b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * you may not use this file except in compliance with the License. 69b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * You may obtain a copy of the License at 79b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * 89b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 99b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * 109b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 119b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 129b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * See the License for the specific language governing permissions and 149b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk * limitations under the License. 159b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk */ 169b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 179b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukpackage android.renderscript; 189b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 19e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport java.io.File; 209b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukimport java.io.IOException; 219b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukimport java.io.InputStream; 2227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchoukimport java.util.HashMap; 23e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport java.util.Map; 24e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 25e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport android.os.Environment; 269b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 279b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukimport android.content.res.AssetManager; 28e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport android.content.res.Resources; 299b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukimport android.util.Log; 309b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukimport android.util.TypedValue; 319b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 329c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 33a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide 3465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 35a90842283e322b1210e2bea5850b05177e3d87afTim Murray * <p>This class gives users a simple way to draw hardware accelerated text. 3611518acc8c416023d8c2192b441a1767205676d9Robert Ly * Internally, the glyphs are rendered using the Freetype library and an internal cache of 3711518acc8c416023d8c2192b441a1767205676d9Robert Ly * rendered glyph bitmaps is maintained. Each font object represents a combination of a typeface, 3811518acc8c416023d8c2192b441a1767205676d9Robert Ly * and point size. You can create multiple font objects to represent styles such as bold or italic text, 3911518acc8c416023d8c2192b441a1767205676d9Robert Ly * faces, and different font sizes. During creation, the Android system quieries device's screen DPI to 4011518acc8c416023d8c2192b441a1767205676d9Robert Ly * ensure proper sizing across multiple device configurations.</p> 4111518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>Fonts are rendered using screen-space positions and no state setup beyond binding a 42c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * font to the RenderScript is required. A note of caution on performance, though the state changes 4311518acc8c416023d8c2192b441a1767205676d9Robert Ly * are transparent to the user, they do happen internally, and it is more efficient to 4411518acc8c416023d8c2192b441a1767205676d9Robert Ly * render large batches of text in sequence. It is also more efficient to render multiple 4511518acc8c416023d8c2192b441a1767205676d9Robert Ly * characters at once instead of one by one to improve draw call batching.</p> 4611518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>Font color and transparency are not part of the font object and you can freely modify 47a90842283e322b1210e2bea5850b05177e3d87afTim Murray * them in the script to suit the user's rendering needs. Font colors work as a state machine. 4811518acc8c416023d8c2192b441a1767205676d9Robert Ly * Every new call to draw text uses the last color set in the script.</p> 499b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk **/ 509b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchoukpublic class Font extends BaseObj { 519b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 5227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk //These help us create a font by family name 5327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static final String[] sSansNames = { 5427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk "sans-serif", "arial", "helvetica", "tahoma", "verdana" 5527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk }; 5627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 5727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static final String[] sSerifNames = { 5827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk "serif", "times", "times new roman", "palatino", "georgia", "baskerville", 5927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk "goudy", "fantasy", "cursive", "ITC Stone Serif" 6027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk }; 6127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 6227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static final String[] sMonoNames = { 6327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk "monospace", "courier", "courier new", "monaco" 6427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk }; 6527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 6627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static class FontFamily { 6727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk String[] mNames; 6827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk String mNormalFileName; 6927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk String mBoldFileName; 7027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk String mItalicFileName; 7127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk String mBoldItalicFileName; 7227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 7327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 7427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static Map<String, FontFamily> sFontFamilyMap; 7527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 7665c80f824711f084c4ece9204f543a7809534294Jason Sams /** 7765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 7865c80f824711f084c4ece9204f543a7809534294Jason Sams */ 7927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk public enum Style { 8065c80f824711f084c4ece9204f543a7809534294Jason Sams /** 8165c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 8265c80f824711f084c4ece9204f543a7809534294Jason Sams */ 8327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk NORMAL, 8465c80f824711f084c4ece9204f543a7809534294Jason Sams /** 8565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 8665c80f824711f084c4ece9204f543a7809534294Jason Sams */ 8727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk BOLD, 8865c80f824711f084c4ece9204f543a7809534294Jason Sams /** 8965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 9065c80f824711f084c4ece9204f543a7809534294Jason Sams */ 9127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk ITALIC, 9265c80f824711f084c4ece9204f543a7809534294Jason Sams /** 9365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 9465c80f824711f084c4ece9204f543a7809534294Jason Sams */ 9527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk BOLD_ITALIC; 9627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 9727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 9827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static void addFamilyToMap(FontFamily family) { 9927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk for(int i = 0; i < family.mNames.length; i ++) { 10027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk sFontFamilyMap.put(family.mNames[i], family); 10127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 10227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 10327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 10427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk private static void initFontFamilyMap() { 10527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk sFontFamilyMap = new HashMap<String, FontFamily>(); 10627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 10727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk FontFamily sansFamily = new FontFamily(); 10827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk sansFamily.mNames = sSansNames; 109beb2b5cfdb79ac9147296e3a6bd21970a947a6f4Christian Robertson sansFamily.mNormalFileName = "Roboto-Regular.ttf"; 110beb2b5cfdb79ac9147296e3a6bd21970a947a6f4Christian Robertson sansFamily.mBoldFileName = "Roboto-Bold.ttf"; 111beb2b5cfdb79ac9147296e3a6bd21970a947a6f4Christian Robertson sansFamily.mItalicFileName = "Roboto-Italic.ttf"; 112beb2b5cfdb79ac9147296e3a6bd21970a947a6f4Christian Robertson sansFamily.mBoldItalicFileName = "Roboto-BoldItalic.ttf"; 11327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk addFamilyToMap(sansFamily); 11427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 11527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk FontFamily serifFamily = new FontFamily(); 11627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk serifFamily.mNames = sSerifNames; 11727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk serifFamily.mNormalFileName = "DroidSerif-Regular.ttf"; 11827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk serifFamily.mBoldFileName = "DroidSerif-Bold.ttf"; 11927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk serifFamily.mItalicFileName = "DroidSerif-Italic.ttf"; 12027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk serifFamily.mBoldItalicFileName = "DroidSerif-BoldItalic.ttf"; 12127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk addFamilyToMap(serifFamily); 12227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 12327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk FontFamily monoFamily = new FontFamily(); 12427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk monoFamily.mNames = sMonoNames; 12527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk monoFamily.mNormalFileName = "DroidSansMono.ttf"; 12627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk monoFamily.mBoldFileName = "DroidSansMono.ttf"; 12727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk monoFamily.mItalicFileName = "DroidSansMono.ttf"; 12827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk monoFamily.mBoldItalicFileName = "DroidSansMono.ttf"; 12927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk addFamilyToMap(monoFamily); 13027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 13127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 13227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk static { 13327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk initFontFamilyMap(); 13427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 13527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 13627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk static String getFontFileName(String familyName, Style style) { 13727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk FontFamily family = sFontFamilyMap.get(familyName); 13827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk if(family != null) { 13927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk switch(style) { 14027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk case NORMAL: 14127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk return family.mNormalFileName; 14227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk case BOLD: 14327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk return family.mBoldFileName; 14427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk case ITALIC: 14527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk return family.mItalicFileName; 14627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk case BOLD_ITALIC: 14727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk return family.mBoldItalicFileName; 14827f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 14927f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 15027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk // Fallback if we could not find the desired family 15127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk return "DroidSans.ttf"; 15227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 15327f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 1549b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk Font(int id, RenderScript rs) { 1550de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 1569b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 1579b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 1589c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 15965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 16027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk * Takes a specific file name as an argument 16127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk */ 162b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public Font createFromFile(RenderScript rs, Resources res, String path, float pointSize) { 1639b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk rs.validate(); 164b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int dpi = res.getDisplayMetrics().densityDpi; 165b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int fontId = rs.nFontCreateFromFile(path, pointSize, dpi); 1669b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 167b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fontId == 0) { 168b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create font from file " + path); 1699b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 170b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Font rsFont = new Font(fontId, rs); 1719b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk 172b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return rsFont; 1739b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk } 17427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk 17565c80f824711f084c4ece9204f543a7809534294Jason Sams /** 17665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 17765c80f824711f084c4ece9204f543a7809534294Jason Sams */ 178b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public Font createFromFile(RenderScript rs, Resources res, File path, float pointSize) { 179e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return createFromFile(rs, res, path.getAbsolutePath(), pointSize); 180e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 181e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 18265c80f824711f084c4ece9204f543a7809534294Jason Sams /** 18365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 18465c80f824711f084c4ece9204f543a7809534294Jason Sams */ 185b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public Font createFromAsset(RenderScript rs, Resources res, String path, float pointSize) { 186b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk rs.validate(); 187b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk AssetManager mgr = res.getAssets(); 188b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int dpi = res.getDisplayMetrics().densityDpi; 189b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 190b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int fontId = rs.nFontCreateFromAsset(mgr, path, pointSize, dpi); 191b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fontId == 0) { 192b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create font from asset " + path); 193b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 194b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Font rsFont = new Font(fontId, rs); 195b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return rsFont; 196e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 197e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 19865c80f824711f084c4ece9204f543a7809534294Jason Sams /** 19965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 20065c80f824711f084c4ece9204f543a7809534294Jason Sams */ 201b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public Font createFromResource(RenderScript rs, Resources res, int id, float pointSize) { 202b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk String name = "R." + Integer.toString(id); 203b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 204b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk rs.validate(); 205b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk InputStream is = null; 206b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk try { 207b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk is = res.openRawResource(id); 208b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } catch (Exception e) { 209b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to open resource " + id); 210b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 211b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 212b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int dpi = res.getDisplayMetrics().densityDpi; 213b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 214b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int fontId = 0; 215b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if (is instanceof AssetManager.AssetInputStream) { 216b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); 217b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fontId = rs.nFontCreateFromAssetStream(name, pointSize, dpi, asset); 218b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } else { 219b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unsupported asset stream created"); 220b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 221b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 222b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fontId == 0) { 223b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create font from resource " + id); 224b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 225b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk Font rsFont = new Font(fontId, rs); 226b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return rsFont; 227e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 228e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2299c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 23065c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 23127f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk * Accepts one of the following family names as an argument 2323d782666d73c3ce0ffb77e71db7309bc3297ecb8Stephen Hines * and will attempt to produce the best match with a system font: 2333d782666d73c3ce0ffb77e71db7309bc3297ecb8Stephen Hines * 23427f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk * "sans-serif" "arial" "helvetica" "tahoma" "verdana" 23527f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk * "serif" "times" "times new roman" "palatino" "georgia" "baskerville" 23627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk * "goudy" "fantasy" "cursive" "ITC Stone Serif" 23727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk * "monospace" "courier" "courier new" "monaco" 2383d782666d73c3ce0ffb77e71db7309bc3297ecb8Stephen Hines * 2393d782666d73c3ce0ffb77e71db7309bc3297ecb8Stephen Hines * Returns default font if no match could be found. 24027f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk */ 241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public Font create(RenderScript rs, Resources res, String familyName, Style fontStyle, float pointSize) { 24227f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk String fileName = getFontFileName(familyName, fontStyle); 243e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk String fontPath = Environment.getRootDirectory().getAbsolutePath(); 244e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk fontPath += "/fonts/" + fileName; 245e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return createFromFile(rs, res, fontPath, pointSize); 24627f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchouk } 247e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2489b949fce39f0f39ce9275b71d7c347210775e7a8Alex Sakhartchouk} 249