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-base:2.4.0'
implementation 'io.coil-kt:coil-svg: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 'com.github.solkin:disk-lru-cache:1.4'
implementation 'io.noties.markwon:core:4.6.2' implementation 'io.noties.markwon:core:4.6.2'

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

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

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

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

Loading…
Cancel
Save