Apply color config on-the-fly

pull/521/head
Koitharu 3 years ago
parent 817ce7e8df
commit f7e7c84317
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -132,7 +132,7 @@ dependencies {
implementation 'io.coil-kt:coil-base:2.4.0'
implementation 'io.coil-kt:coil-svg:2.4.0'
implementation 'com.github.KotatsuApp:subsampling-scale-image-view:169806d928'
implementation 'com.github.KotatsuApp:subsampling-scale-image-view:cf089a264d'
implementation 'com.github.solkin:disk-lru-cache:1.4'
implementation 'io.noties.markwon:core:4.6.2'

@ -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 {

@ -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)
}
}

@ -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

@ -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())
}

Loading…
Cancel
Save