Apply color config on-the-fly

This commit is contained in:
Koitharu
2023-10-12 12:12:58 +03:00
parent f7e7c84317
commit b313c64648
4 changed files with 30 additions and 5 deletions

View File

@@ -3,10 +3,12 @@ package org.koitharu.kotatsu.reader.ui.config
import android.content.SharedPreferences
import android.graphics.Bitmap
import android.view.View
import androidx.annotation.CheckResult
import androidx.lifecycle.MediatorLiveData
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageDecoder
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder
import com.davemorrissey.labs.subscaleview.decoder.SkiaPooledImageRegionDecoder
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -16,6 +18,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koitharu.kotatsu.core.model.ZoomMode
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.util.ext.isLowRamDevice
import org.koitharu.kotatsu.reader.domain.ReaderColorFilter
class ReaderSettings(
@@ -51,11 +54,19 @@ class ReaderSettings(
view.background = bg.resolve(view.context)
}
fun applyBitmapConfig(ssiv: SubsamplingScaleImageView) {
@CheckResult
fun applyBitmapConfig(ssiv: SubsamplingScaleImageView): Boolean {
val config = bitmapConfig
if (ssiv.regionDecoderFactory.bitmapConfig != config) {
ssiv.regionDecoderFactory = SkiaImageRegionDecoder.Factory(config)
return if (ssiv.regionDecoderFactory.bitmapConfig != config) {
ssiv.regionDecoderFactory = if (ssiv.context.isLowRamDevice()) {
SkiaImageRegionDecoder.Factory(config)
} else {
SkiaPooledImageRegionDecoder.Factory(config)
}
ssiv.bitmapDecoderFactory = SkiaImageDecoder.Factory(config)
true
} else {
false
}
}

View File

@@ -84,6 +84,14 @@ class PageHolderDelegate(
job?.cancel()
}
fun reload() {
if (state == State.SHOWN ) {
file?.let {
callback.onImageReady(it.toUri())
}
}
}
override fun onReady() {
state = State.SHOWING
error = null

View File

@@ -46,7 +46,10 @@ open class PageHolder(
override fun onConfigChanged() {
super.onConfigChanged()
binding.zoomControl.isVisible = settings.isZoomControlsEnabled
settings.applyBitmapConfig(binding.ssiv)
@Suppress("SENSELESS_COMPARISON")
if (settings.applyBitmapConfig(binding.ssiv) && delegate != null) {
delegate.reload()
}
}
@SuppressLint("SetTextI18n")

View File

@@ -40,7 +40,10 @@ class WebtoonHolder(
override fun onConfigChanged() {
super.onConfigChanged()
settings.applyBitmapConfig(binding.ssiv)
@Suppress("SENSELESS_COMPARISON")
if (settings.applyBitmapConfig(binding.ssiv) && delegate != null) {
delegate.reload()
}
}
override fun onBind(data: ReaderPage) {