This commit is contained in:
Horis
2025-03-15 13:11:56 +08:00
parent 9ccd60f064
commit fdfce95013
5 changed files with 40 additions and 35 deletions
@@ -20,7 +20,6 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine import io.legado.app.help.coroutine.Coroutine
import io.legado.app.help.globalExecutor import io.legado.app.help.globalExecutor
import io.legado.app.model.webBook.WebBook import io.legado.app.model.webBook.WebBook
import io.legado.app.ui.book.manga.config.MangaColorFilterConfig
import io.legado.app.ui.book.manga.entities.MangaChapter import io.legado.app.ui.book.manga.entities.MangaChapter
import io.legado.app.ui.book.manga.entities.MangaContent import io.legado.app.ui.book.manga.entities.MangaContent
import io.legado.app.ui.book.manga.entities.MangaContentData import io.legado.app.ui.book.manga.entities.MangaContentData
@@ -589,6 +588,5 @@ object ReadManga : CoroutineScope by MainScope() {
fun loadFail(msg: String) fun loadFail(msg: String)
fun sureNewProgress(progress: BookProgress) fun sureNewProgress(progress: BookProgress)
fun showLoading() fun showLoading()
fun colorFilter(config: MangaColorFilterConfig)
} }
} }
@@ -71,7 +71,8 @@ import kotlinx.coroutines.withContext
import java.text.DecimalFormat import java.text.DecimalFormat
class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(), class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewModel>(),
ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack { ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack,
MangaColorFilterDialog.Callback {
private val mLayoutManager by lazy { private val mLayoutManager by lazy {
LinearLayoutManager( LinearLayoutManager(
@@ -428,11 +429,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
} }
} }
override fun colorFilter(config: MangaColorFilterConfig) {
mAdapter.setMangaImageColorFilter(config)
updateWindowBrightness(config.l)
}
override val oldBook: Book? override val oldBook: Book?
get() = ReadManga.book get() = ReadManga.book
@@ -445,6 +441,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
} }
} }
override fun updateColorFilter(config: MangaColorFilterConfig) {
mAdapter.setMangaImageColorFilter(config)
updateWindowBrightness(config.l)
}
@SuppressLint("StringFormatMatches") @SuppressLint("StringFormatMatches")
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
@@ -1,13 +1,18 @@
package io.legado.app.ui.book.manga.config package io.legado.app.ui.book.manga.config
import android.os.Parcelable import io.legado.app.utils.GSON
import kotlinx.parcelize.Parcelize
@Parcelize
data class MangaColorFilterConfig( data class MangaColorFilterConfig(
var r: Int = 0, var r: Int = 0,
var g: Int = 0, var g: Int = 0,
var b: Int = 0, var b: Int = 0,
var a: Int = 0, var a: Int = 0,
var l: Int = 0 var l: Int = 0
) : Parcelable ) {
fun toJson(): String {
if (r == 0 && g == 0 && b == 0 && a == 0 && l == 0) {
return ""
}
return GSON.toJson(this)
}
}
@@ -9,7 +9,6 @@ import io.legado.app.R
import io.legado.app.base.BaseDialogFragment import io.legado.app.base.BaseDialogFragment
import io.legado.app.databinding.DialogMangaColorFilterBinding import io.legado.app.databinding.DialogMangaColorFilterBinding
import io.legado.app.help.config.AppConfig import io.legado.app.help.config.AppConfig
import io.legado.app.model.ReadManga
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
import io.legado.app.utils.fromJsonObject import io.legado.app.utils.fromJsonObject
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
@@ -20,6 +19,7 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
private val mConfig = private val mConfig =
GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull() GSON.fromJsonObject<MangaColorFilterConfig>(AppConfig.mangaColorFilter).getOrNull()
?: MangaColorFilterConfig() ?: MangaColorFilterConfig()
private val callback get() = activity as? Callback
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
@@ -46,30 +46,34 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi
binding.run { binding.run {
dsbBrightness.onChanged = { dsbBrightness.onChanged = {
mConfig.l = it mConfig.l = it
ReadManga.mCallback?.colorFilter(mConfig) callback?.updateColorFilter(mConfig)
} }
dsbR.onChanged = { dsbR.onChanged = {
mConfig.r = it mConfig.r = it
ReadManga.mCallback?.colorFilter(mConfig) callback?.updateColorFilter(mConfig)
} }
dsbG.onChanged = { dsbG.onChanged = {
mConfig.g = it mConfig.g = it
ReadManga.mCallback?.colorFilter(mConfig) callback?.updateColorFilter(mConfig)
} }
dsbB.onChanged = { dsbB.onChanged = {
mConfig.b = it mConfig.b = it
ReadManga.mCallback?.colorFilter(mConfig) callback?.updateColorFilter(mConfig)
} }
dsbA.onChanged = { dsbA.onChanged = {
mConfig.a = it mConfig.a = it
ReadManga.mCallback?.colorFilter(mConfig) callback?.updateColorFilter(mConfig)
} }
} }
} }
override fun onDismiss(dialog: DialogInterface) { override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog) super.onDismiss(dialog)
AppConfig.mangaColorFilter = GSON.toJson(mConfig) AppConfig.mangaColorFilter = mConfig.toJson()
}
interface Callback {
fun updateColorFilter(config: MangaColorFilterConfig)
} }
} }
@@ -105,23 +105,21 @@ class MangaAdapter(private val context: Context) :
} }
fun setImageColorFilter() { fun setImageColorFilter() {
binding.image.run { require(
require( mConfig.r in 0..255 &&
mConfig.r in 0..255 && mConfig.g in 0..255 &&
mConfig.g in 0..255 && mConfig.b in 0..255 &&
mConfig.b in 0..255 && mConfig.a in 0..255
mConfig.a in 0..255 ) {
) { "ARGB values must be between 0-255"
"ARGB values must be between 0-255"
}
val matrix = floatArrayOf(
(255 - mConfig.r) / 255f, 0f, 0f, 0f, 0f,
0f, (255 - mConfig.g) / 255f, 0f, 0f, 0f,
0f, 0f, (255 - mConfig.b) / 255f, 0f, 0f,
0f, 0f, 0f, (255 - mConfig.a) / 255f, 0f
)
colorFilter = ColorMatrixColorFilter(ColorMatrix(matrix))
} }
val matrix = floatArrayOf(
(255 - mConfig.r) / 255f, 0f, 0f, 0f, 0f,
0f, (255 - mConfig.g) / 255f, 0f, 0f, 0f,
0f, 0f, (255 - mConfig.b) / 255f, 0f, 0f,
0f, 0f, 0f, (255 - mConfig.a) / 255f, 0f
)
binding.image.colorFilter = ColorMatrixColorFilter(ColorMatrix(matrix))
} }
} }