master
kunfei 2 years ago
parent ceda15e90e
commit ea571837c0
  1. 9
      app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt
  2. 57
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt

@ -218,7 +218,9 @@ object ReadBookConfig {
config.paragraphSpacing = value
}
//标题位置 0:居左 1:居中 2:隐藏
/**
* 标题位置 0:居左 1:居中 2:隐藏
*/
var titleMode: Int
get() = config.titleMode
set(value) {
@ -230,6 +232,11 @@ object ReadBookConfig {
config.titleSize = value
}
/**
* 是否标题居中
*/
val isMiddleTitle get() = titleMode == 1
var titleTopSpacing: Int
get() = config.titleTopSpacing
set(value) {

@ -136,7 +136,7 @@ object ChapterProvider {
stringBuilder,
titlePaint,
isTitle = true,
isTitleWithNoContent = contents.isEmpty(),
emptyContent = contents.isEmpty(),
isVolumeTitle = bookChapter.isVolume
).let {
absStartX = it.first
@ -295,7 +295,7 @@ object ChapterProvider {
stringBuilder: StringBuilder,
textPaint: TextPaint,
isTitle: Boolean = false,
isTitleWithNoContent: Boolean = false,
emptyContent: Boolean = false,
isVolumeTitle: Boolean = false,
srcList: LinkedList<String>? = null
): Pair<Int, Float> {
@ -307,7 +307,7 @@ object ChapterProvider {
}
var durY = when {
//标题y轴居中
isTitleWithNoContent && textPages.size == 1 -> {
emptyContent && textPages.size == 1 -> {
val textPage = textPages.last()
if (textPage.lineSize == 0) {
val ty = (visibleHeight - layout.lineCount * textPaint.textHeight) / 2
@ -368,9 +368,9 @@ object ChapterProvider {
textLine.text = words
textLine.isParagraphEnd = true
//标题x轴居中
val startX = if (isTitle && ReadBookConfig.titleMode == 1
|| isTitleWithNoContent
|| isVolumeTitle
val startX = if (
isTitle &&
(ReadBookConfig.isMiddleTitle || emptyContent || isVolumeTitle)
) {
(visibleWidth - layout.getLineWidth(lineIndex)) / 2
} else {
@ -382,12 +382,24 @@ object ChapterProvider {
)
}
else -> {
//中间行
textLine.text = words
addCharsToLineMiddle(
book, absStartX, textLine, words.toStringArray(),
textPaint, desiredWidth, 0f, srcList
)
if (
isTitle &&
(ReadBookConfig.isMiddleTitle || emptyContent || isVolumeTitle)
) {
//标题居中
val startX = (visibleWidth - layout.getLineWidth(lineIndex)) / 2
addCharsToLineNatural(
book, absStartX, textLine, words.toStringArray(),
textPaint, startX, srcList
)
} else {
//中间行
textLine.text = words
addCharsToLineMiddle(
book, absStartX, textLine, words.toStringArray(),
textPaint, desiredWidth, 0f, srcList
)
}
}
}
stringBuilder.append(words)
@ -412,6 +424,7 @@ object ChapterProvider {
textLine: TextLine,
words: Array<String>,
textPaint: TextPaint,
/**自然排版长度**/
desiredWidth: Float,
srcList: LinkedList<String>?
) {
@ -436,7 +449,8 @@ object ChapterProvider {
if (words.size > bodyIndent.length) {
val words1 = words.copyOfRange(bodyIndent.length, words.size)
addCharsToLineMiddle(
book, absStartX, textLine, words1, textPaint, desiredWidth, x, srcList
book, absStartX, textLine, words1,
textPaint, desiredWidth, x, srcList
)
}
}
@ -450,7 +464,9 @@ object ChapterProvider {
textLine: TextLine,
words: Array<String>,
textPaint: TextPaint,
/**自然排版长度**/
desiredWidth: Float,
/**起始x坐标**/
startX: Float,
srcList: LinkedList<String>?
) {
@ -458,9 +474,10 @@ object ChapterProvider {
addCharsToLineNatural(book, absStartX, textLine, words, textPaint, startX, srcList)
return
}
val residualWidth = visibleWidth - desiredWidth
val spaceSize = words.filter { it == " " }.size
if (spaceSize > 0) {
val d = (visibleWidth - desiredWidth) / spaceSize
val d = residualWidth / spaceSize
var x = startX
words.forEachIndexed { index, char ->
val cw = StaticLayout.getDesiredWidth(char, textPaint)
@ -469,17 +486,23 @@ object ChapterProvider {
} else {
(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
}
} else {
val gapCount: Int = words.lastIndex
val d = (visibleWidth - desiredWidth) / gapCount
val d = residualWidth / gapCount
var x = startX
words.forEachIndexed { index, char ->
val cw = StaticLayout.getDesiredWidth(char, textPaint)
val x1 = if (index != words.lastIndex) (x + cw + d) else (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
}
}

Loading…
Cancel
Save