Apply color config on-the-fly
This commit is contained in:
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user