Horis il y a 1 an
Parent
commit
ea33916154

+ 2 - 11
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

+ 12 - 2
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
+            }
+        }
     }
 }