mirror of
https://github.com/gedoor/legado.git
synced 2024-07-06 23:47:49 +08:00
Merge branch 'gedoor:master' into master
This commit is contained in:
commit
bb1aa18f26
@ -1,7 +1,7 @@
|
||||
# 源规则帮助
|
||||
|
||||
* [书源帮助文档](https://alanskycn.gitee.io/teachme/Rule/source.html)
|
||||
* [订阅源帮助文档](https://alanskycn.gitee.io/teachme/Rule/rss.html)
|
||||
* [书源帮助文档](https://celetor.github.io/teachme/Rule/source.html)
|
||||
* [订阅源帮助文档](https://celetor.github.io/teachme/Rule/rss.html)
|
||||
* 辅助键盘❓中可插入URL参数模板,打开帮助,js教程,正则教程,选择文件
|
||||
* 规则标志, {{......}}内使用规则必须有明显的规则标志,没有规则标志当作js执行
|
||||
```
|
||||
|
@ -288,21 +288,26 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
}
|
||||
|
||||
fun setPageIndex(index: Int) {
|
||||
val textChapter = curTextChapter
|
||||
if (textChapter != null) {
|
||||
val pageIndex = durPageIndex
|
||||
if (index > pageIndex) {
|
||||
textChapter.getPage(index - 2)?.recycleRecorders()
|
||||
}
|
||||
if (index < pageIndex) {
|
||||
textChapter.getPage(index + 3)?.recycleRecorders()
|
||||
}
|
||||
}
|
||||
recycleRecorders(durPageIndex, index)
|
||||
durChapterPos = curTextChapter?.getReadLength(index) ?: index
|
||||
saveRead(true)
|
||||
curPageChanged(true)
|
||||
}
|
||||
|
||||
fun recycleRecorders(beforeIndex: Int, afterIndex: Int) {
|
||||
executor.execute {
|
||||
val textChapter = curTextChapter
|
||||
if (textChapter != null) {
|
||||
if (afterIndex > beforeIndex) {
|
||||
textChapter.getPage(afterIndex - 2)?.recycleRecorders()
|
||||
}
|
||||
if (afterIndex < beforeIndex) {
|
||||
textChapter.getPage(afterIndex + 3)?.recycleRecorders()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun openChapter(index: Int, durChapterPos: Int = 0, success: (() -> Unit)? = null) {
|
||||
if (index < chapterSize) {
|
||||
clearTextChapter()
|
||||
|
@ -79,8 +79,8 @@ data class TextLine(
|
||||
}
|
||||
}
|
||||
|
||||
fun getColumnReverseAt(index: Int): BaseColumn {
|
||||
return textColumns[textColumns.lastIndex - index]
|
||||
fun getColumnReverseAt(index: Int, offset: Int = 0): BaseColumn {
|
||||
return textColumns[textColumns.lastIndex - offset - index]
|
||||
}
|
||||
|
||||
fun getColumnsCount(): Int {
|
||||
|
@ -622,7 +622,7 @@ class TextChapterLayout(
|
||||
val spaceSize = words.count { it == " " }
|
||||
textLine.startX = absStartX + startX
|
||||
if (spaceSize > 1) {
|
||||
val d = residualWidth / (spaceSize - 1)
|
||||
val d = residualWidth / spaceSize
|
||||
textLine.wordSpacing = d
|
||||
var x = startX
|
||||
for (index in words.indices) {
|
||||
@ -735,14 +735,25 @@ class TextChapterLayout(
|
||||
* 超出边界处理
|
||||
*/
|
||||
private fun exceed(absStartX: Int, textLine: TextLine, words: List<String>) {
|
||||
var size = words.size
|
||||
if (size < 2) return
|
||||
val visibleEnd = absStartX + visibleWidth
|
||||
val endX = textLine.columns.lastOrNull()?.end?.roundToInt() ?: return
|
||||
val columns = textLine.columns
|
||||
var offset = 0
|
||||
val endColumn = if (words.last() == " ") {
|
||||
size--
|
||||
offset++
|
||||
columns[columns.lastIndex - 1]
|
||||
} else {
|
||||
columns.last()
|
||||
}
|
||||
val endX = endColumn.end.roundToInt()
|
||||
if (endX > visibleEnd) {
|
||||
textLine.exceed = true
|
||||
val cc = (endX - visibleEnd) / words.size
|
||||
for (i in 0..words.lastIndex) {
|
||||
textLine.getColumnReverseAt(i).let {
|
||||
val py = cc * (words.size - i)
|
||||
val cc = (endX - visibleEnd) / size
|
||||
for (i in 0..<size) {
|
||||
textLine.getColumnReverseAt(i, offset).let {
|
||||
val py = cc * (size - i)
|
||||
it.start -= py
|
||||
it.end -= py
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user