feat(webtoon): Add option to enable/disable pinch to zoom in webtoon viewer (#1101)
* feat: Add option to disable pinch to zoom in webtoon viewer * Change default settings & also include settings for Paged mode * refactor webtoon --------- Co-authored-by: Cuong-Tran <cuongtran.tm@gmail.com>
This commit is contained in:
parent
91a208ada2
commit
242b980e57
8 changed files with 56 additions and 0 deletions
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -169,6 +169,12 @@ class WebtoonViewer(
|
|||
frame.doubleTapZoom = it
|
||||
}
|
||||
|
||||
// KMK -->
|
||||
config.pinchToZoomChangedListener = {
|
||||
frame.pinchToZoom = it
|
||||
}
|
||||
// KMK <--
|
||||
|
||||
config.zoomPropertyChangedListener = {
|
||||
frame.zoomOutDisabled = it
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@
|
|||
<string name="action_copy_to_clipboard_combined_page">Copy combined page to clipboard</string>
|
||||
<string name="pref_viewer_nav_smaller_tap_zone">Smaller tap zones</string>
|
||||
<string name="error_opening_folder">Failed to open folder</string>
|
||||
<string name="pref_pinch_to_zoom">Pinch to zoom</string>
|
||||
|
||||
<!-- Preferences -->
|
||||
<!-- Appearance section -->
|
||||
<string name="pref_custom_theme_style">Custom theme style</string>
|
||||
|
|
|
|||
Loading…
Reference in a new issue