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 2890b9487..475adb565 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 @@ -256,6 +256,10 @@ object SettingsReaderScreen : SearchableSettings { val dualPageSplit by dualPageSplitPref.collectAsState() val rotateToFit by rotateToFitPref.collectAsState() + // KMK --> + val pagedDisableZoomIn by readerPreferences.pagedDisableZoomIn().collectAsState() + // KMK <-- + return Preference.PreferenceGroup( title = stringResource(MR.strings.pager_viewer), preferenceItems = persistentListOf( @@ -311,6 +315,17 @@ object SettingsReaderScreen : SearchableSettings { title = stringResource(MR.strings.pref_landscape_zoom), enabled = imageScaleType == 1, ), + // KMK --> + Preference.PreferenceItem.SwitchPreference( + preference = readerPreferences.pagedDisableZoomIn(), + title = stringResource(KMR.strings.pref_paged_disable_zoom_in), + ), + Preference.PreferenceItem.SwitchPreference( + preference = readerPreferences.pagedDoubleTapZoomEnabled(), + title = stringResource(MR.strings.pref_double_tap_zoom), + enabled = !pagedDisableZoomIn, + ), + // KMK <-- Preference.PreferenceItem.SwitchPreference( preference = readerPreferences.navigateToPan(), title = stringResource(MR.strings.pref_navigate_pan), diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt index d0017aa41..43c64cd24 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/ColorFilterPage.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.reader.settings -import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -21,7 +20,7 @@ import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.util.collectAsState @Composable -internal fun ColumnScope.ColorFilterPage(screenModel: ReaderSettingsScreenModel) { +internal fun ColorFilterPage(screenModel: ReaderSettingsScreenModel) { val customBrightness by screenModel.preferences.customBrightness().collectAsState() CheckboxItem( label = stringResource(MR.strings.pref_custom_brightness), diff --git a/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt b/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt index 735037702..4de74e913 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt @@ -1,6 +1,5 @@ package eu.kanade.presentation.reader.settings -import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -30,9 +29,8 @@ private val flashColors = listOf( MR.strings.pref_flash_style_white_black to ReaderPreferences.FlashColor.WHITE_BLACK, ) -@Suppress("UnusedReceiverParameter") @Composable -internal fun ColumnScope.GeneralPage(screenModel: ReaderSettingsScreenModel) { +internal fun GeneralPage(screenModel: ReaderSettingsScreenModel) { val readerTheme by screenModel.preferences.readerTheme().collectAsState() val flashPageState by screenModel.preferences.flashOnPageChange().collectAsState() 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 a05769911..d9f0e1291 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 @@ -1,6 +1,5 @@ package eu.kanade.presentation.reader.settings -import androidx.compose.foundation.layout.ColumnScope import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -27,7 +26,7 @@ import tachiyomi.presentation.core.util.collectAsState import java.text.NumberFormat @Composable -internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) { +internal fun ReadingModePage(screenModel: ReaderSettingsScreenModel) { HeadingItem(MR.strings.pref_category_for_this_series) val manga by screenModel.mangaFlow.collectAsState() @@ -65,7 +64,7 @@ internal fun ColumnScope.ReadingModePage(screenModel: ReaderSettingsScreenModel) } @Composable -private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenModel) { +private fun PagerViewerSettings(screenModel: ReaderSettingsScreenModel) { HeadingItem(MR.strings.pager_viewer) val navigationModePager by screenModel.preferences.navigationModePager().collectAsState() @@ -171,6 +170,20 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod pref = screenModel.preferences.invertDoublePages(), ) + // KMK --> + CheckboxItem( + label = stringResource(KMR.strings.pref_paged_disable_zoom_in), + pref = screenModel.preferences.pagedDisableZoomIn(), + ) + val pagedDisableZoomIn by screenModel.preferences.pagedDisableZoomIn().collectAsState() + if (!pagedDisableZoomIn) { + CheckboxItem( + label = stringResource(MR.strings.pref_double_tap_zoom), + pref = screenModel.preferences.pagedDoubleTapZoomEnabled(), + ) + } + // KMK <-- + val centerMarginType by screenModel.preferences.centerMarginType().collectAsState() SettingsChipRow(SYMR.strings.pref_center_margin) { ReaderPreferences.CenterMarginTypes.mapIndexed { index, it -> @@ -185,7 +198,7 @@ private fun ColumnScope.PagerViewerSettings(screenModel: ReaderSettingsScreenMod } @Composable -private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenModel) { +private fun WebtoonViewerSettings(screenModel: ReaderSettingsScreenModel) { val numberFormat = remember { NumberFormat.getPercentInstance() } HeadingItem(MR.strings.webtoon_viewer) @@ -279,7 +292,7 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM // SY --> @Composable -private fun ColumnScope.WebtoonWithGapsViewerSettings(screenModel: ReaderSettingsScreenModel) { +private fun WebtoonWithGapsViewerSettings(screenModel: ReaderSettingsScreenModel) { HeadingItem(MR.strings.vertical_plus_viewer) CheckboxItem( @@ -290,7 +303,7 @@ private fun ColumnScope.WebtoonWithGapsViewerSettings(screenModel: ReaderSetting // SY <-- @Composable -private fun ColumnScope.TapZonesItems( +private fun TapZonesItems( selected: Int, onSelect: (Int) -> Unit, invertMode: ReaderPreferences.TappingInvertMode, 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 6af0b0b05..c5d130829 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 @@ -54,6 +54,8 @@ class ReaderPreferences( fun webtoonDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_webtoon", true) // KMK --> + fun pagedDoubleTapZoomEnabled() = preferenceStore.getBoolean("pref_enable_double_tap_zoom_paged", true) + fun webtoonPinchToZoomEnabled() = preferenceStore.getBoolean("pref_enable_pinch_to_zoom_webtoon", true) // KMK <-- @@ -87,6 +89,10 @@ class ReaderPreferences( fun webtoonDisableZoomOut() = preferenceStore.getBoolean("webtoon_disable_zoom_out", false) + // KMK --> + fun pagedDisableZoomIn() = preferenceStore.getBoolean("paged_disable_zoom_in", false) + // KMK <-- + // endregion // region Split two page spread 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 97fdeb59e..61a3e91e5 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 @@ -292,7 +292,17 @@ open class ReaderPageImageView @JvmOverloads constructor( private fun SubsamplingScaleImageView.setupZoom(config: Config?) { // 5x zoom maxScale = scale * MAX_ZOOM_SCALE - setDoubleTapZoomScale(scale * 2) + // KMK --> + if (config?.disableZoomIn == true) { + isZoomEnabled = false + } else { + if (config?.doubleTapZoom == false) { + setDoubleTapZoomScale(scale) + } else { + // KMK <-- + setDoubleTapZoomScale(scale * 2) + } + } when (config?.zoomStartPosition) { ZoomStartPosition.LEFT -> setScaleAndCenter(scale, PointF(0F, 0F)) @@ -453,6 +463,10 @@ open class ReaderPageImageView @JvmOverloads constructor( val cropBorders: Boolean = false, val zoomStartPosition: ZoomStartPosition = ZoomStartPosition.CENTER, val landscapeZoom: Boolean = false, + // KMK --> + val disableZoomIn: Boolean = false, + val doubleTapZoom: Boolean = true, + // KMK <-- ) enum class ZoomStartPosition { 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 8e3a0096e..77fd32bde 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 @@ -49,6 +49,14 @@ class PagerConfig( var landscapeZoom = false private set + // KMK --> + var disableZoomIn = false + private set + + var doubleTapZoom = true + private set + // KMK <-- + // SY --> var usePageTransitions = false @@ -71,7 +79,6 @@ class PagerConfig( var pageCanvasColor = Color.WHITE var centerMarginType = CenterMarginType.NONE - // SY <-- init { @@ -116,6 +123,7 @@ class PagerConfig( .drop(1) .onEach { navigationModeChangedListener?.invoke() } .launchIn(scope) + // KMK --> readerPreferences.smallerTapZone().changes() .drop(1) @@ -147,6 +155,19 @@ class PagerConfig( { imagePropertyChangedListener?.invoke() }, ) + // KMK --> + readerPreferences.pagedDisableZoomIn() + .register( + { disableZoomIn = it }, + { imagePropertyChangedListener?.invoke() }, + ) + readerPreferences.pagedDoubleTapZoomEnabled() + .register( + { doubleTapZoom = it }, + { imagePropertyChangedListener?.invoke() }, + ) + // KMK <-- + // SY --> readerPreferences.pageTransitionsPager() .register({ usePageTransitions = it }, { imagePropertyChangedListener?.invoke() }) 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 09e2e7277..0e4a46154 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 @@ -216,6 +216,10 @@ class PagerPageHolder( cropBorders = viewer.config.imageCropBorders, zoomStartPosition = viewer.config.imageZoomType, landscapeZoom = viewer.config.landscapeZoom, + // KMK --> + disableZoomIn = viewer.config.disableZoomIn, + doubleTapZoom = viewer.config.doubleTapZoom, + // KMK <-- ), ) if (!isAnimated) { diff --git a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml index 6b7fef106..201f354b4 100644 --- a/i18n-kmk/src/commonMain/moko-resources/base/strings.xml +++ b/i18n-kmk/src/commonMain/moko-resources/base/strings.xml @@ -26,6 +26,7 @@ Smaller tap zones Failed to open folder Pinch to zoom + Disable zoom in