Skip to content

Commit b26fa0c

Browse files
author
Victoria Lease
committed
Fix fake bold for fallback fonts in frameworks.
This change is analogous to Ic0e9f1bbd8cae9fdd3a6d1d015bb9224c8be545c in WebView, and depends upon the same Skia change that that CL makes use of. This flips the "fake bold" flag on for bold fonts in TextView.setTypeface(), with the expectation that Skia will ignore the flag if the final typeface used to render the glyphs is already bold. It also does the same for StyleSpans, TextAppearanceSpans, TypefaceSpans, and the Switch widget. With this, fake bold should work uniformly across all scripts - if fake bold works for a primary typeface, it should also work for all fallback typefaces. Bug: 6629786 Change-Id: Id3b8639ab0df83052ffd82809cb12adaacc1d46b
1 parent f27f2f8 commit b26fa0c

File tree

5 files changed

+9
-2
lines changed

5 files changed

+9
-2
lines changed

core/java/android/text/style/StyleSpan.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ private static void apply(Paint paint, int style) {
9898
}
9999

100100
int fake = want & ~tf.getStyle();
101+
fake |= tf.getStyle() & Typeface.BOLD;
101102

102103
if ((fake & Typeface.BOLD) != 0) {
103104
paint.setFakeBoldText(true);

core/java/android/text/style/TextAppearanceSpan.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ public void updateMeasureState(TextPaint ds) {
235235
}
236236

237237
int fake = style & ~tf.getStyle();
238+
fake |= tf.getStyle() & Typeface.BOLD;
238239

239240
if ((fake & Typeface.BOLD) != 0) {
240241
ds.setFakeBoldText(true);

core/java/android/text/style/TypefaceSpan.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ private static void apply(Paint paint, String family) {
8282

8383
Typeface tf = Typeface.create(family, oldStyle);
8484
int fake = oldStyle & ~tf.getStyle();
85+
fake |= tf.getStyle() & Typeface.BOLD;
8586

8687
if ((fake & Typeface.BOLD) != 0) {
8788
paint.setFakeBoldText(true);

core/java/android/widget/Switch.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,12 @@ public void setSwitchTypeface(Typeface tf, int style) {
259259
// now compute what (if any) algorithmic styling is needed
260260
int typefaceStyle = tf != null ? tf.getStyle() : 0;
261261
int need = style & ~typefaceStyle;
262+
need |= typefaceStyle & Typeface.BOLD;
262263
mTextPaint.setFakeBoldText((need & Typeface.BOLD) != 0);
263264
mTextPaint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
264265
} else {
265-
mTextPaint.setFakeBoldText(false);
266+
int typefaceStyle = tf != null ? tf.getStyle() : 0;
267+
mTextPaint.setFakeBoldText((typefaceStyle & Typeface.BOLD) != 0);
266268
mTextPaint.setTextSkewX(0);
267269
setSwitchTypeface(tf);
268270
}

core/java/android/widget/TextView.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1237,10 +1237,12 @@ public void setTypeface(Typeface tf, int style) {
12371237
// now compute what (if any) algorithmic styling is needed
12381238
int typefaceStyle = tf != null ? tf.getStyle() : 0;
12391239
int need = style & ~typefaceStyle;
1240+
need |= typefaceStyle & Typeface.BOLD; // keep bold in
12401241
mTextPaint.setFakeBoldText((need & Typeface.BOLD) != 0);
12411242
mTextPaint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
12421243
} else {
1243-
mTextPaint.setFakeBoldText(false);
1244+
int typefaceStyle = tf != null ? tf.getStyle() : 0;
1245+
mTextPaint.setFakeBoldText((typefaceStyle & Typeface.BOLD) != 0);
12441246
mTextPaint.setTextSkewX(0);
12451247
setTypeface(tf);
12461248
}

0 commit comments

Comments
 (0)