From a806634bc0a7341f5b41d2059ba8d29251c40079 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Fri, 19 Aug 2022 10:03:13 +0300 Subject: [PATCH] Add text outline to reader info bar --- .../kotatsu/reader/ui/ReaderInfoBarView.kt | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt index 7e59978d0..4df4e3e53 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderInfoBarView.kt @@ -21,6 +21,7 @@ import org.koitharu.kotatsu.reader.ui.pager.ReaderUiState import org.koitharu.kotatsu.utils.ext.getThemeColor import org.koitharu.kotatsu.utils.ext.measureDimension import org.koitharu.kotatsu.utils.ext.printStackTraceDebug +import org.koitharu.kotatsu.utils.ext.resolveDp class ReaderInfoBarView @JvmOverloads constructor( context: Context, @@ -35,6 +36,14 @@ class ReaderInfoBarView @JvmOverloads constructor( private var insetLeft: Int = 0 private var insetRight: Int = 0 private var insetTop: Int = 0 + private val colorText = ColorUtils.setAlphaComponent( + context.getThemeColor(materialR.attr.colorOnSurface, Color.BLACK), + 200, + ) + private val colorOutline = ColorUtils.setAlphaComponent( + context.getThemeColor(materialR.attr.colorSurface, Color.WHITE), + 200, + ) private var timeText = timeFormat.format(Date()) private var text: String = "" @@ -46,11 +55,7 @@ class ReaderInfoBarView @JvmOverloads constructor( get() = width - paddingLeft - paddingRight - insetLeft - insetRight init { - paint.color = ColorUtils.setAlphaComponent( - context.getThemeColor(materialR.attr.colorOnSurface, Color.BLACK), - 160, - ) - paint.setShadowLayer(20f, 0f, 0f, context.getThemeColor(materialR.attr.colorOnSurfaceInverse, Color.WHITE)) + paint.strokeWidth = context.resources.resolveDp(2f) val insetStart = getSystemUiDimensionOffset("status_bar_padding_start") val insetEnd = getSystemUiDimensionOffset("status_bar_padding_end") val isRtl = layoutDirection == LAYOUT_DIRECTION_RTL @@ -72,9 +77,9 @@ class ReaderInfoBarView @JvmOverloads constructor( super.onDraw(canvas) val ty = innerHeight / 2f + textBounds.height() / 2f - textBounds.bottom paint.textAlign = Paint.Align.LEFT - canvas.drawText(text, (paddingLeft + insetLeft).toFloat(), paddingTop + insetTop + ty, paint) + canvas.drawTextOutline(text, (paddingLeft + insetLeft).toFloat(), paddingTop + insetTop + ty) paint.textAlign = Paint.Align.RIGHT - canvas.drawText(timeText, (width - paddingRight - insetRight).toFloat(), paddingTop + insetTop + ty, paint) + canvas.drawTextOutline(timeText, (width - paddingRight - insetRight).toFloat(), paddingTop + insetTop + ty) } override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { @@ -122,6 +127,15 @@ class ReaderInfoBarView @JvmOverloads constructor( paint.getTextBounds(str, 0, str.length, textBounds) } + private fun Canvas.drawTextOutline(text: String, x: Float, y: Float) { + paint.color = colorOutline + paint.style = Paint.Style.STROKE + drawText(text, x, y, paint) + paint.color = colorText + paint.style = Paint.Style.FILL + drawText(text, x, y, paint) + } + private inner class TimeReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) {