diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
index 475adb565..4938a5352 100644
--- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
+++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt
@@ -10,6 +10,7 @@ import eu.kanade.presentation.more.settings.Preference
import eu.kanade.tachiyomi.ui.reader.setting.ReaderBottomButton
import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
+import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences.Companion.zoomWideImagesAllowedList
import eu.kanade.tachiyomi.ui.reader.setting.ReadingMode
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
import kotlinx.collections.immutable.persistentListOf
@@ -258,6 +259,7 @@ object SettingsReaderScreen : SearchableSettings {
// KMK -->
val pagedDisableZoomIn by readerPreferences.pagedDisableZoomIn().collectAsState()
+ val landscapeZoom by readerPreferences.landscapeZoom().collectAsState()
// KMK <--
return Preference.PreferenceGroup(
@@ -313,9 +315,22 @@ object SettingsReaderScreen : SearchableSettings {
Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.landscapeZoom(),
title = stringResource(MR.strings.pref_landscape_zoom),
- enabled = imageScaleType == 1,
+ // KMK -->
+ enabled = imageScaleType in zoomWideImagesAllowedList,
+ // KMK <--
),
// KMK -->
+ Preference.PreferenceItem.ListPreference(
+ preference = readerPreferences.landscapeZoomType(),
+ entries = persistentListOf(
+ ReaderPreferences.LandscapeZoomScaleType.FIT,
+ ReaderPreferences.LandscapeZoomScaleType.DOUBLE,
+ )
+ .associateWith { stringResource(it.titleRes) }
+ .toImmutableMap(),
+ title = stringResource(KMR.strings.pref_landscape_zoom_type),
+ enabled = landscapeZoom && imageScaleType in zoomWideImagesAllowedList,
+ ),
Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.pagedDisableZoomIn(),
title = stringResource(KMR.strings.pref_paged_disable_zoom_in),
diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt
index d9f0e1291..e7547dac4 100644
--- a/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt
+++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt
@@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import eu.kanade.domain.manga.model.readerOrientation
import eu.kanade.domain.manga.model.readingMode
import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
@@ -123,10 +124,18 @@ private fun PagerViewerSettings(screenModel: ReaderSettingsScreenModel) {
pref = screenModel.preferences.cropBorders(),
)
- CheckboxItem(
- label = stringResource(MR.strings.pref_landscape_zoom),
- pref = screenModel.preferences.landscapeZoom(),
- )
+ // KMK -->
+ if (imageScaleType in listOf(
+ SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE,
+ SubsamplingScaleImageView.SCALE_TYPE_ORIGINAL_SIZE,
+ )
+ ) {
+ // KMK <--
+ CheckboxItem(
+ label = stringResource(MR.strings.pref_landscape_zoom),
+ pref = screenModel.preferences.landscapeZoom(),
+ )
+ }
CheckboxItem(
label = stringResource(MR.strings.pref_navigate_pan),
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
index c5d130829..9d54ca49f 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt
@@ -2,11 +2,13 @@ package eu.kanade.tachiyomi.ui.reader.setting
import android.os.Build
import androidx.compose.ui.graphics.BlendMode
+import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import dev.icerock.moko.resources.StringResource
import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerConfig
import tachiyomi.core.common.preference.PreferenceStore
import tachiyomi.core.common.preference.getEnum
import tachiyomi.i18n.MR
+import tachiyomi.i18n.kmk.KMR
import tachiyomi.i18n.sy.SYMR
class ReaderPreferences(
@@ -73,6 +75,10 @@ class ReaderPreferences(
fun landscapeZoom() = preferenceStore.getBoolean("landscape_zoom", true)
+ // KMK -->
+ fun landscapeZoomType() = preferenceStore.getEnum("landscape_zoom_type", LandscapeZoomScaleType.FIT)
+ // KMK <--
+
fun cropBordersWebtoon() = preferenceStore.getBoolean("crop_borders_webtoon", false)
fun webtoonSidePadding() = preferenceStore.getInt("webtoon_side_padding", WEBTOON_PADDING_MIN)
@@ -224,6 +230,15 @@ class ReaderPreferences(
LOWEST(47),
}
+ // KMK -->
+ enum class LandscapeZoomScaleType(
+ val titleRes: StringResource,
+ ) {
+ FIT(MR.strings.scale_type_fit_screen),
+ DOUBLE(KMR.strings.scale_type_double),
+ }
+ // KMK <--
+
object ArchiveReaderMode {
const val LOAD_FROM_FILE = 0
const val LOAD_INTO_MEMORY = 1
@@ -261,6 +276,13 @@ class ReaderPreferences(
MR.strings.zoom_start_center,
)
+ // KMK -->
+ val zoomWideImagesAllowedList = listOf(
+ SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE,
+ SubsamplingScaleImageView.SCALE_TYPE_ORIGINAL_SIZE,
+ )
+ // KMK <--
+
val ColorFilterMode = buildList {
addAll(
listOf(
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt
index 61a3e91e5..98fd9051b 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderPageImageView.kt
@@ -37,6 +37,7 @@ import com.github.chrisbanes.photoview.PhotoView
import eu.kanade.domain.base.BasePreferences
import eu.kanade.tachiyomi.data.coil.cropBorders
import eu.kanade.tachiyomi.data.coil.customDecoder
+import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences.LandscapeZoomScaleType
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonSubsamplingImageView
import eu.kanade.tachiyomi.util.system.animatorDurationScale
import eu.kanade.tachiyomi.util.view.isVisibleOnScreen
@@ -138,7 +139,11 @@ open class ReaderPageImageView @JvmOverloads constructor(
ZoomStartPosition.CENTER -> center
}
- val targetScale = height.toFloat() / sHeight.toFloat()
+ val targetScale = /* KMK --> */ when (config.landscapeZoomScaleType) {
+ LandscapeZoomScaleType.DOUBLE -> scale * 2
+ // KMK <--
+ else -> height.toFloat() / sHeight.toFloat()
+ }
(animateScaleAndCenter(targetScale, point) ?: return@postDelayed)
.withDuration(500)
.withEasing(EASE_IN_OUT_QUAD)
@@ -466,6 +471,7 @@ open class ReaderPageImageView @JvmOverloads constructor(
// KMK -->
val disableZoomIn: Boolean = false,
val doubleTapZoom: Boolean = true,
+ val landscapeZoomScaleType: LandscapeZoomScaleType = LandscapeZoomScaleType.FIT,
// KMK <--
)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt
index 77fd32bde..0647abdeb 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerConfig.kt
@@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.reader.viewer.pager
import android.graphics.Color
import androidx.annotation.ColorInt
import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences
+import eu.kanade.tachiyomi.ui.reader.setting.ReaderPreferences.LandscapeZoomScaleType
import eu.kanade.tachiyomi.ui.reader.viewer.ReaderPageImageView
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerConfig
import eu.kanade.tachiyomi.ui.reader.viewer.ViewerNavigation
@@ -55,6 +56,9 @@ class PagerConfig(
var doubleTapZoom = true
private set
+
+ var landscapeZoomScaleType = LandscapeZoomScaleType.FIT
+ private set
// KMK <--
// SY -->
@@ -166,6 +170,12 @@ class PagerConfig(
{ doubleTapZoom = it },
{ imagePropertyChangedListener?.invoke() },
)
+
+ readerPreferences.landscapeZoomType()
+ .register(
+ { landscapeZoomScaleType = it },
+ { imagePropertyChangedListener?.invoke() },
+ )
// KMK <--
// SY -->
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt
index 0e4a46154..d12cee69f 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/pager/PagerPageHolder.kt
@@ -219,6 +219,7 @@ class PagerPageHolder(
// KMK -->
disableZoomIn = viewer.config.disableZoomIn,
doubleTapZoom = viewer.config.doubleTapZoom,
+ landscapeZoomScaleType = viewer.config.landscapeZoomScaleType,
// KMK <--
),
)
diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
index 201f354b4..9c2b41d9d 100644
--- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
@@ -27,6 +27,8 @@
Failed to open folder
Pinch to zoom
Disable zoom in
+ Wide images zoom mode
+ Double zoom