From 3352426bed516fdf8b8c8b50a549bbf5d497f75b Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Sun, 16 Mar 2025 20:03:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/read/page/provider/TextChapterLayout.kt | 13 ++----------- .../java/io/legado/app/utils/PaintExtensions.kt | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt index 009b2d232..59c1aaedd 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/TextChapterLayout.kt @@ -803,19 +803,10 @@ class TextChapterLayout( var i = 0 while (i < length) { val clusterBaseIndex = i++ - var extra = 0f - while (i < length) { - val c = text[i] - val w = widthsArray[start + i] - if (w > 0 || isZeroWidthChar(c)) { - if (!c.isLowSurrogate()) { - break - } - extra = w - } + widths.add(widthsArray[start + clusterBaseIndex]) + while (i < length && widthsArray[start + i] == 0f && !isZeroWidthChar(text[i])) { i++ } - widths.add(widthsArray[start + clusterBaseIndex] + extra) stringList.add(text.substring(clusterBaseIndex, i)) } return stringList to widths diff --git a/app/src/main/java/io/legado/app/utils/PaintExtensions.kt b/app/src/main/java/io/legado/app/utils/PaintExtensions.kt index e2a0877f8..ae4505aa4 100644 --- a/app/src/main/java/io/legado/app/utils/PaintExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/PaintExtensions.kt @@ -11,7 +11,17 @@ fun TextPaint.getTextWidthsCompat(text: String, widths: FloatArray) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { val letterSpacing = letterSpacing * textSize val letterSpacingHalf = letterSpacing * 0.5f - widths[0] += letterSpacingHalf - widths[text.lastIndex] += letterSpacingHalf + for (i in widths.indices) { + if (widths[i] > 0) { + widths[i] += letterSpacingHalf + break + } + } + for (i in text.lastIndex downTo 0) { + if (widths[i] > 0) { + widths[i] += letterSpacingHalf + break + } + } } }