diff --git a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt index cef701d59..5a1942f50 100644 --- a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt @@ -388,6 +388,18 @@ object ReadBookConfig { config.dottedLine = value } + var dottedBase: Float + get() = config.dottedBase + set(value) { + config.dottedBase = value + } + + var dottedRatio: Float + get() = config.dottedRatio + set(value) { + config.dottedRatio = value + } + var paddingBottom: Int get() = config.paddingBottom set(value) { @@ -607,6 +619,8 @@ object ReadBookConfig { var paragraphIndent: String = "  ",//段落缩进 var underline: Boolean = false, //下划线 var dottedLine: Boolean = false, //虚线 + var dottedBase: Float = 6f, //长度 + var dottedRatio: Float = 6f, var paddingBottom: Int = 6, var paddingLeft: Int = 16, var paddingRight: Int = 16, diff --git a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt index 66397f25c..1718e27bf 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt @@ -134,6 +134,12 @@ class BgTextConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_bg binding.swDottedline.isChecked = dottedLine binding.swDottedline.isEnabled = underline binding.sbBgAlpha.value = ReadBookConfig.bgAlpha.toFloat() + binding.dottedRatio.valueFormat = { + (ReadBookConfig.dottedRatio * 100).toInt().toString() + } + binding.dottedBase.valueFormat = { + (ReadBookConfig.dottedBase * 100).toInt().toString() + } } @SuppressLint("InflateParams") @@ -239,6 +245,14 @@ class BgTextConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_bg postEvent(EventBus.UP_CONFIG, arrayListOf(3)) } }) + binding.dottedRatio.onChanged = { + ReadBookConfig.dottedRatio = it / 100f + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) + } + binding.dottedBase.onChanged = { + ReadBookConfig.dottedBase = it / 100f + postEvent(EventBus.UP_CONFIG, arrayListOf(6, 9, 11)) + } } private fun exportConfig(uri: Uri) { diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt index 505e0a5df..f91997d83 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt @@ -2,7 +2,6 @@ package io.legado.app.ui.book.read.page.entities import android.annotation.SuppressLint import android.graphics.Canvas -import android.graphics.DashPathEffect import android.graphics.Paint.FontMetrics import android.os.Build import androidx.annotation.Keep @@ -157,19 +156,15 @@ data class TextLine( if (checkFastDraw()) { fastDrawTextLine(view, canvas) } else { - for (i in columns.indices) { - columns[i].draw(view, canvas) - } + for (i in columns.indices) columns[i].draw(view, canvas) } - // 墨水屏模式下的朗读和搜索下划线 + if (AppConfig.isEInkMode && (isReadAloud || searchResultColumnCount > 0)) { - val underlinePaint = PaintPool.obtain() - underlinePaint.set(ChapterProvider.contentPaint) - underlinePaint.strokeWidth = 1.dpToPx().toFloat() + val linePaint = ChapterProvider.linePaint val lineY = height - 1.dpToPx() - canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, underlinePaint) - PaintPool.recycle(underlinePaint) + canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, linePaint) } + if (ReadBookConfig.underline && !isImage && ReadBook.book?.isImage != true) { drawUnderline(canvas, ReadBookConfig.dottedLine) } @@ -215,20 +210,14 @@ data class TextLine( * 绘制下划线 */ private fun drawUnderline(canvas: Canvas, dottedLine: Boolean) { + val paint = ChapterProvider.linePaint + paint.pathEffect = + if (dottedLine && !AppConfig.isEInkMode) + ChapterProvider.dashEffect + else + null val lineY = height - 1.dpToPx() - val paint = ChapterProvider.contentPaint - val oldEffect = paint.pathEffect - if (dottedLine) { - paint.pathEffect = DashPathEffect(floatArrayOf(6f, 6f), 0f) - } - canvas.drawLine( - lineStart + indentWidth, - lineY, - lineEnd, - lineY, - paint - ) - paint.pathEffect = oldEffect + canvas.drawLine(lineStart + indentWidth, lineY, lineEnd, lineY, paint) } diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt index 20b16b545..38eb3ad10 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt @@ -1,6 +1,8 @@ package io.legado.app.ui.book.read.page.provider import android.annotation.SuppressLint +import android.graphics.DashPathEffect +import android.graphics.Paint import android.graphics.Paint.FontMetrics import android.graphics.RectF import android.graphics.Typeface @@ -17,6 +19,8 @@ import io.legado.app.data.entities.BookChapter import io.legado.app.help.book.BookContent import io.legado.app.help.config.AppConfig import io.legado.app.help.config.ReadBookConfig +import io.legado.app.help.config.ReadBookConfig.dottedBase +import io.legado.app.help.config.ReadBookConfig.dottedRatio import io.legado.app.model.ImageProvider import io.legado.app.model.ReadBook import io.legado.app.ui.book.read.page.entities.TextChapter @@ -53,6 +57,17 @@ object ChapterProvider { const val indentChar = " " + val linePaint: Paint by lazy { + Paint(contentPaint).apply { + clearShadowLayer() + isAntiAlias = true + strokeWidth = 1.dpToPx().toFloat() + style = Paint.Style.STROKE + } + } + + val dashEffect = DashPathEffect(floatArrayOf(dottedBase, dottedRatio), 0f) + @JvmStatic var viewWidth = 0 private set diff --git a/app/src/main/res/layout/dialog_read_bg_text.xml b/app/src/main/res/layout/dialog_read_bg_text.xml index d88eb6c71..21454e8db 100644 --- a/app/src/main/res/layout/dialog_read_bg_text.xml +++ b/app/src/main/res/layout/dialog_read_bg_text.xml @@ -143,6 +143,33 @@ android:text="@string/text_dottedline" tools:ignore="TouchTargetSizeCheck" /> + + + + + + + + + +