PM-14044: Fix line-breaking logic (#4218)

This commit is contained in:
David Perez 2024-11-01 11:21:48 -05:00 committed by GitHub
parent 51e299998f
commit 2eb41e932b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -21,7 +21,7 @@ import kotlin.math.floor
* This character takes up no space but can be used to ensure a string is not empty. It can also * This character takes up no space but can be used to ensure a string is not empty. It can also
* be used to insert "safe" line-break positions in a string. * be used to insert "safe" line-break positions in a string.
* *
* Note: Is a string only contains this charactor, it is _not_ considered blank. * Note: Is a string only contains this character, it is _not_ considered blank.
*/ */
const val ZERO_WIDTH_CHARACTER: String = "\u200B" const val ZERO_WIDTH_CHARACTER: String = "\u200B"
@ -126,14 +126,15 @@ fun String.withLineBreaksAtWidth(
): String { ): String {
val measurer = rememberTextMeasurer() val measurer = rememberTextMeasurer()
return remember(this, widthPx, monospacedTextStyle) { return remember(this, widthPx, monospacedTextStyle) {
val characterSizePx = measurer if (widthPx > 0 && this.isNotEmpty()) {
.measure("*", monospacedTextStyle) val stringLengthPx = measurer
.measure(text = this, softWrap = false, style = monospacedTextStyle)
.size .size
.width .width
val perLineCharacterLimit = floor(widthPx / characterSizePx).toInt() val linesRequired = stringLengthPx / widthPx
if (widthPx > 0) { val charsPerLine = floor(this.length / linesRequired).toInt()
this this
.chunked(perLineCharacterLimit) .chunked(size = charsPerLine)
.joinToString(separator = "\n") .joinToString(separator = "\n")
} else { } else {
this this