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 a1a8af978..2890b9487 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
@@ -25,6 +25,7 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.text.NumberFormat
+@Suppress("unused")
object SettingsReaderScreen : SearchableSettings {
private fun readResolve(): Any = SettingsReaderScreen
@@ -441,6 +442,12 @@ object SettingsReaderScreen : SearchableSettings {
preference = readerPreferences.webtoonDoubleTapZoomEnabled(),
title = stringResource(MR.strings.pref_double_tap_zoom),
),
+ // KMK -->
+ Preference.PreferenceItem.SwitchPreference(
+ preference = readerPreferences.webtoonPinchToZoomEnabled(),
+ title = stringResource(KMR.strings.pref_pinch_to_zoom),
+ ),
+ // KMK <--
Preference.PreferenceItem.SwitchPreference(
preference = readerPreferences.webtoonDisableZoomOut(),
title = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
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 64d4b01a2..a05769911 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
@@ -265,6 +265,12 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
label = stringResource(MR.strings.pref_double_tap_zoom),
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
)
+ // KMK -->
+ CheckboxItem(
+ label = stringResource(KMR.strings.pref_pinch_to_zoom),
+ pref = screenModel.preferences.webtoonPinchToZoomEnabled(),
+ )
+ // KMK <--
CheckboxItem(
label = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
pref = screenModel.preferences.webtoonDisableZoomOut(),
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 5885b0cad..6af0b0b05 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
@@ -53,6 +53,10 @@ class ReaderPreferences(
fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_webtoon", true)
+ // KMK -->
+ fun webtoonPinchToZoomEnabled() = preferenceStore.getBoolean("pref_enable_pinch_to_zoom_webtoon", true)
+ // KMK <--
+
fun imageScaleType() = preferenceStore.getInt("pref_image_scale_type_key", 1)
fun zoomStart() = preferenceStore.getInt("pref_zoom_start_key", 1)
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
index 2a9d6afd2..45bf57032 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonConfig.kt
@@ -42,6 +42,13 @@ class WebtoonConfig(
var doubleTapZoomChangedListener: ((Boolean) -> Unit)? = null
+ // KMK -->
+ var pinchToZoom = true
+ private set
+
+ var pinchToZoomChangedListener: ((Boolean) -> Unit)? = null
+ // KMK <--
+
// SY -->
var usePageTransitions = false
@@ -102,6 +109,14 @@ class WebtoonConfig(
{ doubleTapZoomChangedListener?.invoke(it) },
)
+ // KMK -->
+ readerPreferences.webtoonPinchToZoomEnabled()
+ .register(
+ { pinchToZoom = it },
+ { pinchToZoomChangedListener?.invoke(it) },
+ )
+ // KMK <--
+
readerPreferences.readerTheme().changes()
.drop(1)
.distinctUntilChanged()
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
index 17aafc6fd..69e33358d 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt
@@ -33,6 +33,14 @@ class WebtoonFrame(context: Context) : FrameLayout(context) {
scaleDetector.isQuickScaleEnabled = value
}
+ // KMK -->
+ var pinchToZoom = true
+ set(value) {
+ field = value
+ recycler?.pinchToZoom = value
+ }
+ // KMK <--
+
var zoomOutDisabled = false
set(value) {
field = value
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
index 95cef7345..8624d51be 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
@@ -49,6 +49,10 @@ class WebtoonRecyclerView @JvmOverloads constructor(
var doubleTapZoom = true
+ // KMK -->
+ var pinchToZoom = true
+ // KMK <--
+
var tapListener: ((MotionEvent) -> Unit)? = null
var longTapListener: ((MotionEvent) -> Boolean)? = null
@@ -174,6 +178,10 @@ class WebtoonRecyclerView @JvmOverloads constructor(
}
fun onScale(scaleFactor: Float) {
+ // KMK ->
+ if (!detector.isQuickScaling && !pinchToZoom) return
+ // KMK <--
+
currentScale *= scaleFactor
currentScale = currentScale.coerceIn(
minRate,
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
index 532447c6c..86d29399b 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonViewer.kt
@@ -169,6 +169,12 @@ class WebtoonViewer(
frame.doubleTapZoom = it
}
+ // KMK -->
+ config.pinchToZoomChangedListener = {
+ frame.pinchToZoom = it
+ }
+ // KMK <--
+
config.zoomPropertyChangedListener = {
frame.zoomOutDisabled = it
}
diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
index 7f6baff6d..6b7fef106 100644
--- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
+++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml
@@ -25,6 +25,8 @@
Copy combined page to clipboard
Smaller tap zones
Failed to open folder
+ Pinch to zoom
+
Custom theme style