Added checks before generating styled typeface
Other changes: • Added flag for enabling merging of styles
This commit is contained in:
parent
6284264ca3
commit
4a3444073e
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user