Added checks before generating styled typeface

Other changes:
  • Added flag for enabling merging of styles
This commit is contained in:
Cyrus Bakhtiari-Haftlang 2020-10-06 09:29:44 +02:00 committed by Dimitry Ivanov
parent 89e89c766e
commit 132756af4e

View File

@ -23,34 +23,48 @@ public class CustomTypefaceSpan extends MetricAffectingSpan {
return new CustomTypefaceSpan(typeface); return new CustomTypefaceSpan(typeface);
} }
@NonNull
public static CustomTypefaceSpan create(@NonNull Typeface typeface, boolean mergeStyles) {
return new CustomTypefaceSpan(typeface, mergeStyles);
}
private final Typeface typeface; private final Typeface typeface;
private final boolean mergeStyles;
public CustomTypefaceSpan(@NonNull Typeface typeface) { public CustomTypefaceSpan(@NonNull Typeface typeface) {
this(typeface, false);
}
public CustomTypefaceSpan(@NonNull Typeface typeface, boolean mergeStyles) {
this.typeface = typeface; this.typeface = typeface;
this.mergeStyles = mergeStyles;
}
@Override
public void updateMeasureState(@NonNull TextPaint paint) {
updatePaint(paint);
} }
@Override @Override
public void updateMeasureState(@NonNull TextPaint p) { public void updateDrawState(@NonNull TextPaint paint) {
updatePaint(p); updatePaint(paint);
}
@Override
public void updateDrawState(@NonNull TextPaint tp) {
updatePaint(tp);
} }
private void updatePaint(@NonNull TextPaint paint) { private void updatePaint(@NonNull TextPaint paint) {
final Typeface old = paint.getTypeface(); final Typeface oldTypeface = paint.getTypeface();
final int oldStyle; if (!mergeStyles ||
if (old == null) { oldTypeface == null ||
oldStyle = Typeface.NORMAL; oldTypeface.getStyle() == Typeface.NORMAL) {
paint.setTypeface(typeface);
} else { } else {
oldStyle = old.getStyle(); final int oldStyle = oldTypeface.getStyle();
@SuppressLint("WrongConstant") final int want = oldStyle | typeface.getStyle();
final Typeface styledTypeface = Typeface.create(typeface, want);
paint.setTypeface(styledTypeface);
} }
@SuppressLint("WrongConstant") final int want = oldStyle | typeface.getStyle();
final Typeface styledTypeface = Typeface.create(typeface, want);
paint.setTypeface(styledTypeface);
} }
} }