From 4a3444073e0d95126348f33833f1fba7717973d8 Mon Sep 17 00:00:00 2001 From: Cyrus Bakhtiari-Haftlang Date: Tue, 6 Oct 2020 09:29:44 +0200 Subject: [PATCH] Added checks before generating styled typeface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Other changes: • Added flag for enabling merging of styles --- .../core/spans/CustomTypefaceSpan.java | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/markwon-core/src/main/java/io/noties/markwon/core/spans/CustomTypefaceSpan.java b/markwon-core/src/main/java/io/noties/markwon/core/spans/CustomTypefaceSpan.java index 2d5ac089..5b55482c 100644 --- a/markwon-core/src/main/java/io/noties/markwon/core/spans/CustomTypefaceSpan.java +++ b/markwon-core/src/main/java/io/noties/markwon/core/spans/CustomTypefaceSpan.java @@ -23,34 +23,48 @@ public class CustomTypefaceSpan extends MetricAffectingSpan { 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 boolean mergeStyles; + public CustomTypefaceSpan(@NonNull Typeface typeface) { + this(typeface, false); + } + + public CustomTypefaceSpan(@NonNull Typeface typeface, boolean mergeStyles) { this.typeface = typeface; + this.mergeStyles = mergeStyles; + } + + + @Override + public void updateMeasureState(@NonNull TextPaint paint) { + updatePaint(paint); } @Override - public void updateMeasureState(@NonNull TextPaint p) { - updatePaint(p); - } - - @Override - public void updateDrawState(@NonNull TextPaint tp) { - updatePaint(tp); + public void updateDrawState(@NonNull TextPaint paint) { + updatePaint(paint); } private void updatePaint(@NonNull TextPaint paint) { - final Typeface old = paint.getTypeface(); - final int oldStyle; - if (old == null) { - oldStyle = Typeface.NORMAL; + final Typeface oldTypeface = paint.getTypeface(); + if (!mergeStyles || + oldTypeface == null || + oldTypeface.getStyle() == Typeface.NORMAL) { + paint.setTypeface(typeface); } 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); } }