Apply color config on-the-fly

This commit is contained in:
Koitharu
2023-10-12 11:31:28 +03:00
parent 817ce7e8df
commit f7e7c84317
5 changed files with 21 additions and 16 deletions

View File

@@ -336,7 +336,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
return policy.isNetworkAllowed(connectivityManager)
}
val enhancedColors: Boolean
val is32BitColorsEnabled: Boolean
get() = prefs.getBoolean(KEY_32BIT_COLOR, false)
fun isTipEnabled(tip: String): Boolean {

View File

@@ -5,7 +5,8 @@ import android.graphics.Bitmap
import android.view.View
import androidx.lifecycle.MediatorLiveData
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.Companion.preferredBitmapConfig
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageDecoder
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageRegionDecoder
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -32,8 +33,12 @@ class ReaderSettings(
val colorFilter: ReaderColorFilter?
get() = colorFilterFlow.value?.takeUnless { it.isEmpty }
val enhancedColors: Boolean
get() = settings.enhancedColors
val bitmapConfig: Bitmap.Config
get() = if (settings.is32BitColorsEnabled) {
Bitmap.Config.ARGB_8888
} else {
Bitmap.Config.RGB_565
}
val isPagesNumbersEnabled: Boolean
get() = settings.isPagesNumbersEnabled
@@ -46,12 +51,11 @@ class ReaderSettings(
view.background = bg.resolve(view.context)
}
fun enhancedColorsMode() {
val modeEnabled = settings.enhancedColors
preferredBitmapConfig = if (modeEnabled) {
Bitmap.Config.ARGB_8888
} else {
Bitmap.Config.RGB_565
fun applyBitmapConfig(ssiv: SubsamplingScaleImageView) {
val config = bitmapConfig
if (ssiv.regionDecoderFactory.bitmapConfig != config) {
ssiv.regionDecoderFactory = SkiaImageRegionDecoder.Factory(config)
ssiv.bitmapDecoderFactory = SkiaImageDecoder.Factory(config)
}
}

View File

@@ -4,12 +4,10 @@ import android.annotation.SuppressLint
import android.graphics.PointF
import android.net.Uri
import android.view.View
import androidx.core.view.drawToBitmap
import androidx.core.view.isVisible
import androidx.lifecycle.LifecycleOwner
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.Companion.preferredBitmapConfig
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver
import org.koitharu.kotatsu.core.model.ZoomMode
@@ -48,6 +46,7 @@ open class PageHolder(
override fun onConfigChanged() {
super.onConfigChanged()
binding.zoomControl.isVisible = settings.isZoomControlsEnabled
settings.applyBitmapConfig(binding.ssiv)
}
@SuppressLint("SetTextI18n")
@@ -86,7 +85,6 @@ open class PageHolder(
binding.ssiv.height / binding.ssiv.sHeight.toFloat(),
)
binding.ssiv.colorFilter = settings.colorFilter?.toColorFilter()
settings.enhancedColorsMode()
when (settings.zoomMode) {
ZoomMode.FIT_CENTER -> {
binding.ssiv.minimumScaleType = SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE

View File

@@ -6,7 +6,6 @@ import androidx.core.view.isVisible
import androidx.lifecycle.LifecycleOwner
import com.davemorrissey.labs.subscaleview.ImageSource
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.davemorrissey.labs.subscaleview.decoder.SkiaPooledImageRegionDecoder
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.core.exceptions.resolve.ExceptionResolver
import org.koitharu.kotatsu.core.os.NetworkState
@@ -34,12 +33,16 @@ class WebtoonHolder(
init {
binding.ssiv.bindToLifecycle(owner)
binding.ssiv.regionDecoderFactory = SkiaPooledImageRegionDecoder.Factory()
binding.ssiv.addOnImageEventListener(delegate)
bindingInfo.buttonRetry.setOnClickListener(this)
bindingInfo.buttonErrorDetails.setOnClickListener(this)
}
override fun onConfigChanged() {
super.onConfigChanged()
settings.applyBitmapConfig(binding.ssiv)
}
override fun onBind(data: ReaderPage) {
delegate.onBind(data.toMangaPage())
}