diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2014-06-21 23:33:11 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-06-20 21:00:34 +0000 |
commit | b33729565421c892f2da95f548abdd50b6fad0f6 (patch) | |
tree | 4abb056afcda7e1c17be7eea0db1d60d653e615e /tools/layoutlib | |
parent | 0a1335d770c2b1cb3f1d3451f1ee7f5b567c3858 (diff) | |
parent | 86837dc24a64af7fb007e5f2ff6b3e1cfe98f844 (diff) | |
download | frameworks_base-b33729565421c892f2da95f548abdd50b6fad0f6.zip frameworks_base-b33729565421c892f2da95f548abdd50b6fad0f6.tar.gz frameworks_base-b33729565421c892f2da95f548abdd50b6fad0f6.tar.bz2 |
Merge "LayoutLib: Better support for compact/elegant fonts." into lmp-preview-dev
Diffstat (limited to 'tools/layoutlib')
-rw-r--r-- | tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java | 4 | ||||
-rw-r--r-- | tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java | 40 |
2 files changed, 31 insertions, 13 deletions
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java index 6ee307e..c7c2e97 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java @@ -81,8 +81,8 @@ public class Paint_Delegate { private float mTextScaleX; private float mTextSkewX; private int mHintingMode = Paint.HINTING_ON; - // Variant of the font. - private FontVariant mFontVariant = FontVariant.NONE; + // Variant of the font. A paint's variant can only be compact or elegant. + private FontVariant mFontVariant = FontVariant.COMPACT; private Xfermode_Delegate mXfermode; private ColorFilter_Delegate mColorFilter; diff --git a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java index 908bb64..20ccd0c 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java @@ -70,28 +70,46 @@ public final class Typeface_Delegate { return sManager.getDelegate(nativeTypeface); } + /** + * Return a list of fonts that match the style and variant. The list is ordered according to + * preference of fonts. + * + * @param variant The variant preferred. Can only be {@link FontVariant#COMPACT} or + * {@link FontVariant#ELEGANT} + */ public List<Font> getFonts(FontVariant variant) { + assert variant != FontVariant.NONE; List<Font> fonts = new ArrayList<Font>(mFontFamilies.length); - // If we are unable to find fonts matching the variant, we return the fonts from the - // other variant since we always want to draw something, rather than nothing. - // TODO: check this behaviour with platform. - List<Font> otherVariantFonts = new ArrayList<Font>(); - for (FontFamily_Delegate ffd : mFontFamilies) { + for (int i = 0; i < mFontFamilies.length; i++) { + FontFamily_Delegate ffd = mFontFamilies[i]; if (ffd != null) { Font font = ffd.getFont(mStyle); if (font != null) { - if (ffd.getVariant() == variant || ffd.getVariant() == FontVariant.NONE) { + FontVariant ffdVariant = ffd.getVariant(); + if (ffdVariant == FontVariant.NONE) { + fonts.add(font); + continue; + } + // We cannot open each font and get locales supported, etc to match the fonts. + // As a workaround, we hardcode certain assumptions like Elegant and Compact + // always appear in pairs. + assert i < mFontFamilies.length - 1; + FontFamily_Delegate ffd2 = mFontFamilies[++i]; + assert ffd2 != null; + FontVariant ffd2Variant = ffd2.getVariant(); + Font font2 = ffd2.getFont(mStyle); + assert ffd2Variant != FontVariant.NONE && ffd2Variant != ffdVariant + && font2 != null; + // Add the font with the matching variant to the list. + if (variant == ffd.getVariant()) { fonts.add(font); } else { - otherVariantFonts.add(font); + fonts.add(font2); } } } } - if (fonts.size() > 0) { - return fonts; - } - return otherVariantFonts; + return fonts; } // ---- native methods ---- |