Skip to content

Commit 6adcdaf

Browse files
authored
fix: measuring component size for inline and code blocks (#214)
Inline code and code block styles modifies typeface, meaning that this change counts for measuring layout using `StaticLayout`. We have to use proper base class (like `MetricAffectingSpan`) to calculate it properly
1 parent 9c7b434 commit 6adcdaf

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

android/src/main/java/com/swmansion/enriched/spans/EnrichedCodeBlockSpan.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,19 @@ import android.graphics.Paint
55
import android.graphics.RectF
66
import android.graphics.Typeface
77
import android.text.TextPaint
8-
import android.text.style.CharacterStyle
98
import android.text.style.LineBackgroundSpan
9+
import android.text.style.MetricAffectingSpan
1010
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
1111
import com.swmansion.enriched.styles.HtmlStyle
1212

13-
class EnrichedCodeBlockSpan(private val htmlStyle: HtmlStyle) : CharacterStyle(), LineBackgroundSpan, EnrichedBlockSpan {
14-
override fun updateDrawState(paint: TextPaint?) {
15-
paint?.typeface = Typeface.MONOSPACE
16-
paint?.color = htmlStyle.codeBlockColor
13+
class EnrichedCodeBlockSpan(private val htmlStyle: HtmlStyle) : MetricAffectingSpan(), LineBackgroundSpan, EnrichedBlockSpan {
14+
override fun updateDrawState(paint: TextPaint) {
15+
paint.typeface = Typeface.MONOSPACE
16+
paint.color = htmlStyle.codeBlockColor
17+
}
18+
19+
override fun updateMeasureState(paint: TextPaint) {
20+
paint.typeface = Typeface.MONOSPACE
1721
}
1822

1923
override fun drawBackground(

android/src/main/java/com/swmansion/enriched/spans/EnrichedInlineCodeSpan.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@ package com.swmansion.enriched.spans
22

33
import android.graphics.Typeface
44
import android.text.TextPaint
5-
import android.text.style.BackgroundColorSpan
5+
import android.text.style.MetricAffectingSpan
66
import com.swmansion.enriched.spans.interfaces.EnrichedInlineSpan
77
import com.swmansion.enriched.styles.HtmlStyle
88

9-
class EnrichedInlineCodeSpan(private val htmlStyle: HtmlStyle) : BackgroundColorSpan(htmlStyle.inlineCodeBackgroundColor), EnrichedInlineSpan {
9+
class EnrichedInlineCodeSpan(private val htmlStyle: HtmlStyle) : MetricAffectingSpan(), EnrichedInlineSpan {
1010
override fun updateDrawState(textPaint: TextPaint) {
11-
super.updateDrawState(textPaint)
12-
11+
val typeface = Typeface.create(Typeface.MONOSPACE, Typeface.NORMAL)
12+
textPaint.typeface = typeface
1313
textPaint.color = htmlStyle.inlineCodeColor
14-
textPaint.typeface = Typeface.create(Typeface.MONOSPACE, Typeface.NORMAL)
14+
textPaint.bgColor = htmlStyle.inlineCodeBackgroundColor
15+
}
16+
17+
override fun updateMeasureState(textPaint: TextPaint) {
18+
val typeface = Typeface.create(Typeface.MONOSPACE, Typeface.NORMAL)
19+
textPaint.typeface = typeface
1520
}
1621
}

0 commit comments

Comments
 (0)