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
* 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"
@ -126,14 +126,15 @@ fun String.withLineBreaksAtWidth(
): String {
val measurer = rememberTextMeasurer()
return remember(this, widthPx, monospacedTextStyle) {
val characterSizePx = measurer
.measure("*", monospacedTextStyle)
.size
.width
val perLineCharacterLimit = floor(widthPx / characterSizePx).toInt()
if (widthPx > 0) {
if (widthPx > 0 && this.isNotEmpty()) {
val stringLengthPx = measurer
.measure(text = this, softWrap = false, style = monospacedTextStyle)
.size
.width
val linesRequired = stringLengthPx / widthPx
val charsPerLine = floor(this.length / linesRequired).toInt()
this
.chunked(perLineCharacterLimit)
.chunked(size = charsPerLine)
.joinToString(separator = "\n")
} else {
this