diff --git a/libraries/htmlrenderer/api/src/main/kotlin/io/element/android/libraries/htmlrenderer/api/ui/HtmlMessageContent.kt b/libraries/htmlrenderer/api/src/main/kotlin/io/element/android/libraries/htmlrenderer/api/ui/HtmlMessageContent.kt index 3c464a2ea8..e779b5086f 100644 --- a/libraries/htmlrenderer/api/src/main/kotlin/io/element/android/libraries/htmlrenderer/api/ui/HtmlMessageContent.kt +++ b/libraries/htmlrenderer/api/src/main/kotlin/io/element/android/libraries/htmlrenderer/api/ui/HtmlMessageContent.kt @@ -70,6 +70,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.rememberTextMeasurer +import androidx.compose.ui.text.style.ResolvedTextDirection import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Dp @@ -513,7 +514,7 @@ private fun Modifier.drawInlineCodeBackgrounds( val lineEnd = minOf(range.end, layout.getLineEnd(line, visibleEnd = true)) if (lineEnd <= lineStart) continue val startX = layout.getHorizontalPosition(lineStart, usePrimaryDirection = true) - val endX = layout.getHorizontalPosition(lineEnd, usePrimaryDirection = true) + val endX = layout.getHorizontalPosition(lineEnd, usePrimaryDirection = true).takeUnless { it == 0f } ?: layout.getLineEndPosition(line) val left = minOf(startX, endX) - horizontalPadding val right = maxOf(startX, endX) + horizontalPadding val topLeft = Offset(left, layout.getLineTop(line)) @@ -540,6 +541,16 @@ private fun Modifier.drawInlineCodeBackgrounds( } } +private fun TextLayoutResult.getLineEndPosition(line: Int): Float { + val lineEnd = getLineEnd(line, visibleEnd = true) + val direction = getParagraphDirection(lineEnd) + return if (direction == ResolvedTextDirection.Ltr) { + getLineRight(line) + } else { + getLineLeft(line) + } +} + /** * Detects taps and long presses on link-annotated ranges ([LINK_ANNOTATION_TAG]) without consuming the touch events if none are detected, and invokes the * appropriate callbacks in [context].