Просмотр исходного кода

feat: 滚动翻页模式时的一些问题

HapeLee 1 месяц назад
Родитель
Сommit
bd5e2cff7f

+ 2 - 1
app/src/main/java/io/legado/app/feature/reader/ReaderCanvasSurface.kt

@@ -119,6 +119,7 @@ import io.legado.app.feature.reader.core.selection.ReaderSelectionLifecyclePolic
 import io.legado.app.feature.reader.core.selection.ReaderSelectionMenuAnchor
 import io.legado.app.feature.reader.core.selection.ReaderSelectionPolicy
 import io.legado.app.feature.reader.core.selection.mergeSelectionBounds
+import io.legado.app.feature.reader.core.selection.selectionPages
 import io.legado.app.feature.reader.core.style.mergeBackgroundBounds
 import io.legado.app.feature.reader.core.transition.CurlPoint
 import io.legado.app.feature.reader.core.transition.PageCurlFrame
@@ -386,7 +387,7 @@ fun ReaderCanvasSurface(
     }
     fun showSelectionMenu(selection: ReaderSelection, window: ReaderPageWindow): Boolean {
         val bounds = pageViewportLayout(window).selectionBounds(selection).map { it.bounds }
-        val text = selection.selectedText(listOfNotNull(window.previous, window.current, window.next))
+        val text = selection.selectedText(window.selectionPages())
         val anchor = ReaderSelectionMenuAnchor.from(bounds) ?: return false
         if (text.isEmpty()) return false
         selectionMenuVisible = true

+ 4 - 0
app/src/main/java/io/legado/app/feature/reader/core/selection/ReaderSelection.kt

@@ -3,6 +3,7 @@ package io.legado.app.feature.reader.core.selection
 import androidx.compose.runtime.Stable
 import io.legado.app.feature.reader.core.model.ReaderElement
 import io.legado.app.feature.reader.core.model.ReaderPage
+import io.legado.app.feature.reader.core.model.ReaderPageWindow
 import io.legado.app.feature.reader.core.model.ReaderRect
 import java.text.BreakIterator
 import java.util.Locale
@@ -12,6 +13,9 @@ enum class ReaderSelectionEndpoint {
     FOCUS,
 }
 
+fun ReaderPageWindow.selectionPages(): List<ReaderPage> =
+    listOfNotNull(previous, current, next, nextPlus)
+
 @Stable
 data class ReaderSelection(
     val chapterIndex: Int,

+ 14 - 0
app/src/test/java/io/legado/app/feature/reader/core/selection/ReaderSelectionViewportLayoutTest.kt

@@ -61,6 +61,20 @@ class ReaderSelectionViewportLayoutTest {
         assertEquals(10f, placement.localY(190f))
     }
 
+    @Test
+    fun scrollWindowSelectionTextIncludesVisibleNextPlusPage() {
+        val current = page(0, 0, 0)
+        val next = page(0, 1, 1)
+        val nextPlus = page(0, 2, 2)
+        val window = ReaderPageWindow(current = current, next = next, nextPlus = nextPlus)
+        val selection = ReaderSelection(chapterIndex = 0, anchor = 2, focus = 2)
+
+        assertEquals(
+            "2",
+            selection.selectedText(window.selectionPages()),
+        )
+    }
+
     @Test fun adjacentPageElementHitUsesItsLocalCoordinates() {
         val current = page(0, 0, 0)
         val next = page(0, 1, 1)