This commit is contained in:
kunfei
2023-04-03 11:25:36 +08:00
parent 195c5ed585
commit bd2581954a
4 changed files with 20 additions and 7 deletions
+1 -1
View File
@@ -2,4 +2,4 @@
* 本应用网络同步和备份采用webDav协议,由用户自己提供同步服务. * 本应用网络同步和备份采用webDav协议,由用户自己提供同步服务.
* 存储权限用来打开本地文件和本地备份恢复. * 存储权限用来打开本地文件和本地备份恢复.
* 其它一些权限是Google Firebase需要. * 其它一些权限是Google Firebase需要.
* 本应用为开源软件,使用中发生任何问题由用户自己承担. * 本应用为开源软件,内置js引擎,因书源调用js发生的任何问题由用户自行承担.
@@ -156,7 +156,7 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
private fun drawUnderline(canvas: Canvas, textLine: TextLine, relativeOffset: Float) { private fun drawUnderline(canvas: Canvas, textLine: TextLine, relativeOffset: Float) {
val lineY = relativeOffset + textLine.lineBottom - 1.dpToPx() val lineY = relativeOffset + textLine.lineBottom - 1.dpToPx()
canvas.drawLine( canvas.drawLine(
textLine.lineStart, textLine.lineStart + textLine.indentWidth,
lineY, lineY,
textLine.lineEnd, textLine.lineEnd,
lineY, lineY,
@@ -17,6 +17,7 @@ data class TextLine(
var lineTop: Float = 0f, var lineTop: Float = 0f,
var lineBase: Float = 0f, var lineBase: Float = 0f,
var lineBottom: Float = 0f, var lineBottom: Float = 0f,
var indentWidth: Float = 0f,
val isTitle: Boolean = false, val isTitle: Boolean = false,
var isParagraphEnd: Boolean = false, var isParagraphEnd: Boolean = false,
var isReadAloud: Boolean = false, var isReadAloud: Boolean = false,
@@ -377,8 +377,8 @@ object ChapterProvider {
0f 0f
} }
addCharsToLineNatural( addCharsToLineNatural(
book, absStartX, textLine, words.toStringArray(), book, absStartX, textLine, words.toStringArray(), textPaint,
textPaint, startX, srcList startX, !isTitle && lineIndex == 0, srcList
) )
} }
else -> { else -> {
@@ -390,7 +390,7 @@ object ChapterProvider {
val startX = (visibleWidth - layout.getLineWidth(lineIndex)) / 2 val startX = (visibleWidth - layout.getLineWidth(lineIndex)) / 2
addCharsToLineNatural( addCharsToLineNatural(
book, absStartX, textLine, words.toStringArray(), book, absStartX, textLine, words.toStringArray(),
textPaint, startX, srcList textPaint, startX, false, srcList
) )
} else { } else {
//中间行 //中间行
@@ -430,7 +430,10 @@ object ChapterProvider {
) { ) {
var x = 0f var x = 0f
if (!ReadBookConfig.textFullJustify) { if (!ReadBookConfig.textFullJustify) {
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, x, srcList) addCharsToLineNatural(
book, absStartX, textLine, words, textPaint,
x, true, srcList
)
return return
} }
val bodyIndent = ReadBookConfig.paragraphIndent val bodyIndent = ReadBookConfig.paragraphIndent
@@ -445,6 +448,7 @@ object ChapterProvider {
) )
) )
x = x1 x = x1
textLine.indentWidth = x
} }
if (words.size > bodyIndent.length) { if (words.size > bodyIndent.length) {
val words1 = words.copyOfRange(bodyIndent.length, words.size) val words1 = words.copyOfRange(bodyIndent.length, words.size)
@@ -471,7 +475,10 @@ object ChapterProvider {
srcList: LinkedList<String>? srcList: LinkedList<String>?
) { ) {
if (!ReadBookConfig.textFullJustify) { if (!ReadBookConfig.textFullJustify) {
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, startX, srcList) addCharsToLineNatural(
book, absStartX, textLine, words, textPaint,
startX, false, srcList
)
return return
} }
val residualWidth = visibleWidth - desiredWidth val residualWidth = visibleWidth - desiredWidth
@@ -519,14 +526,19 @@ object ChapterProvider {
words: Array<String>, words: Array<String>,
textPaint: TextPaint, textPaint: TextPaint,
startX: Float, startX: Float,
hasIndent: Boolean,
srcList: LinkedList<String>? srcList: LinkedList<String>?
) { ) {
val indentLength = ReadBookConfig.paragraphIndent.length
var x = startX var x = startX
words.forEachIndexed { index, char -> words.forEachIndexed { index, char ->
val cw = StaticLayout.getDesiredWidth(char, textPaint) val cw = StaticLayout.getDesiredWidth(char, textPaint)
val x1 = x + cw val x1 = x + cw
addCharToLine(book, absStartX, textLine, char, x, x1, index + 1 == words.size, srcList) addCharToLine(book, absStartX, textLine, char, x, x1, index + 1 == words.size, srcList)
x = x1 x = x1
if (hasIndent && index == indentLength - 1) {
textLine.indentWidth = x
}
} }
exceed(absStartX, textLine, words) exceed(absStartX, textLine, words)
} }