summaryrefslogtreecommitdiffstats
path: root/tools/layoutlib
diff options
context:
space:
mode:
authorDeepanshu Gupta <deepanshu@google.com>2014-06-21 23:33:11 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-06-20 21:00:34 +0000
commitb33729565421c892f2da95f548abdd50b6fad0f6 (patch)
tree4abb056afcda7e1c17be7eea0db1d60d653e615e /tools/layoutlib
parent0a1335d770c2b1cb3f1d3451f1ee7f5b567c3858 (diff)
parent86837dc24a64af7fb007e5f2ff6b3e1cfe98f844 (diff)
downloadframeworks_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.java4
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java40
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 ----