Support wide-color-gamut as config

This commit is contained in:
tarsin committed 2022-12-28 11:34:17 +08:00
1 parent a15dc4afdf
commit d5f26643bf
10 files changed
+63 -18

No files matched your search

@@ -56,6 +56,8 @@ import com.hippo.util.ExceptionUtils
import com.hippo.util.ReadableTime
import com.hippo.yorozuya.FileUtils
import com.hippo.yorozuya.IntIdGenerator
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -344,5 +346,8 @@ class EhApplication : SceneApplication(), DefaultLifecycleObserver, ImageLoaderF
@JvmStatic
val favouriteStatusRouter by lazy { FavouriteStatusRouter() }
@JvmStatic
val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore(application)) }
}
}
+2 -4
View File
@@ -69,10 +69,8 @@ class Image private constructor(source: Source, private val byteBuffer: ByteBuff
companion object {
val screenWidth = EhApplication.application.resources.displayMetrics.widthPixels
val screenHeight = EhApplication.application.resources.displayMetrics.heightPixels
private val isWideColorGamut =
EhApplication.application.resources.configuration.isScreenWideColorGamut
val colorSpace =
ColorSpace.get(if (isWideColorGamut) ColorSpace.Named.DISPLAY_P3 else ColorSpace.Named.SRGB)
val isWideColorGamut = EhApplication.application.resources.configuration.isScreenWideColorGamut
var colorSpace = ColorSpace.get(if (isWideColorGamut && EhApplication.readerPreferences.wideColorGamut().get()) ColorSpace.Named.DISPLAY_P3 else ColorSpace.Named.SRGB)
@Throws(DecodeException::class)
@JvmStatic
@@ -23,6 +23,7 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.ContentValues
import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.pm.PackageManager
import android.graphics.Color
import android.graphics.ColorMatrix
@@ -72,16 +73,15 @@ import com.hippo.ehviewer.gallery.DirPageLoader
import com.hippo.ehviewer.gallery.EhPageLoader
import com.hippo.ehviewer.gallery.PageLoader2
import com.hippo.ehviewer.ui.EhActivity
import com.hippo.image.Image
import com.hippo.unifile.UniFile
import com.hippo.util.ExceptionUtils
import com.hippo.yorozuya.FileUtils
import com.hippo.yorozuya.IOUtils
import dev.chrisbanes.insetter.applyInsetter
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
import eu.kanade.tachiyomi.ui.reader.loader.PageLoader
import eu.kanade.tachiyomi.ui.reader.model.ReaderPage
import eu.kanade.tachiyomi.ui.reader.setting.OrientationType
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsSheet
import eu.kanade.tachiyomi.ui.reader.setting.ReadingModeType
import eu.kanade.tachiyomi.ui.reader.viewer.BaseViewer
@@ -260,6 +260,7 @@ class ReaderActivity : EhActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.colorMode = if (Image.isWideColorGamut && readerPreferences.wideColorGamut().get()) ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT else ActivityInfo.COLOR_MODE_DEFAULT
if (savedInstanceState == null) {
onInit()
} else {
@@ -599,7 +600,7 @@ class ReaderActivity : EhActivity() {
const val KEY_PAGE = "page"
const val KEY_CURRENT_INDEX = "current_index"
val readerPreferences by lazy { ReaderPreferences(AndroidPreferenceStore(EhApplication.application)) }
val readerPreferences = EhApplication.readerPreferences
}
/* Tachiyomi funcs */
@@ -646,7 +647,8 @@ class ReaderActivity : EhActivity() {
} else {
if (readerPreferences.fullscreen().get()) {
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
windowInsetsController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
if (animate) {
@@ -702,7 +704,8 @@ class ReaderActivity : EhActivity() {
initBottomShortcuts()
val toolbarBackground = MaterialShapeDrawable.createWithElevationOverlay(this).apply {
elevation = resources.getDimension(com.google.android.material.R.dimen.m3_sys_elevation_level2)
elevation =
resources.getDimension(com.google.android.material.R.dimen.m3_sys_elevation_level2)
alpha = if (isNightMode()) 230 else 242 // 90% dark 95% light
}
binding.toolbarBottom.background = toolbarBackground.copy(this@ReaderActivity)
@@ -748,7 +751,8 @@ class ReaderActivity : EhActivity() {
setTooltip(R.string.pref_crop_borders)
setOnClickListener {
val isPagerType = ReadingModeType.isPagerType(readerPreferences.defaultReadingMode().get())
val isPagerType =
ReadingModeType.isPagerType(readerPreferences.defaultReadingMode().get())
if (isPagerType) {
readerPreferences.cropBorders().toggle()
} else {
@@ -28,6 +28,10 @@ abstract class PageLoader {
mImageCache.evictAll()
}
fun restart() {
mImageCache.evictAll()
}
abstract fun size(): Int
fun request(page: ReaderPage) {
@@ -1,6 +1,8 @@
package eu.kanade.tachiyomi.ui.reader.setting
import android.content.Context
import android.content.pm.ActivityInfo
import android.graphics.ColorSpace
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.annotation.ColorInt
@@ -12,7 +14,9 @@ import androidx.core.widget.NestedScrollView
import androidx.lifecycle.lifecycleScope
import eu.kanade.tachiyomi.core.preference.getAndSet
import com.hippo.ehviewer.databinding.ReaderColorFilterSettingsBinding
import com.hippo.image.Image
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.util.preference.asHotFlow
import eu.kanade.tachiyomi.util.preference.bindToPreference
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@@ -31,9 +35,26 @@ class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attr
init {
addView(binding.root)
binding.wideColorGamut.isEnabled = Image.isWideColorGamut
if (!Image.isWideColorGamut)
readerPreferences.wideColorGamut().set(false)
binding.wideColorGamut.bindToPreference(readerPreferences.wideColorGamut())
readerPreferences.wideColorGamut().asHotFlow {
Image.colorSpace = ColorSpace.get(if (Image.isWideColorGamut && it) ColorSpace.Named.DISPLAY_P3 else ColorSpace.Named.SRGB)
val colorMode = if (Image.isWideColorGamut && it) ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT else ActivityInfo.COLOR_MODE_DEFAULT
(context as ReaderActivity).run {
if (window.colorMode != colorMode) {
window.colorMode = colorMode
mGalleryProvider?.restart()
setGallery()
}
}
}.launchIn((context as ReaderActivity).lifecycleScope)
readerPreferences.colorFilter().changes()
.onEach { setColorFilter(it) }
.launchIn((context as ReaderActivity).lifecycleScope)
.launchIn(context.lifecycleScope)
readerPreferences.colorFilterMode().changes()
.onEach { setColorFilter(readerPreferences.colorFilter().get()) }
@@ -106,5 +106,7 @@ class ReaderPreferences(private val preferenceStore: PreferenceStore) {
fun showNavigationOverlayOnStart() = preferenceStore.getBoolean("reader_navigation_overlay_on_start", false)
fun wideColorGamut() = preferenceStore.getBoolean("wide_color_gamut", false)
// endregion
}