Allow disabling reader's zoom out (#302)
* Allow disabling reader's zoom out (#62) * Renamed disable zoom out pref and string * Zoom to default rate if the scale is inferior * Fixed null value check and formatting * Fixed detekt (cherry picked from commit c15f3f2fd5b11cc9c2088ae2fa444f4fe35ea740) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonFrame.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt
This commit is contained in:
parent
133c34dee2
commit
db99ab526a
@ -387,17 +387,16 @@ object SettingsReaderScreen : SearchableSettings {
|
|||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = readerPreferences.webtoonDoubleTapZoomEnabled(),
|
pref = readerPreferences.webtoonDoubleTapZoomEnabled(),
|
||||||
title = stringResource(MR.strings.pref_double_tap_zoom),
|
title = stringResource(MR.strings.pref_double_tap_zoom),
|
||||||
enabled = true,
|
),
|
||||||
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
|
pref = readerPreferences.webtoonDisableZoomOut(),
|
||||||
|
title = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
|
||||||
),
|
),
|
||||||
// SY -->
|
// SY -->
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
Preference.PreferenceItem.SwitchPreference(
|
||||||
pref = readerPreferences.pageTransitionsWebtoon(),
|
pref = readerPreferences.pageTransitionsWebtoon(),
|
||||||
title = stringResource(MR.strings.pref_page_transitions),
|
title = stringResource(MR.strings.pref_page_transitions),
|
||||||
),
|
),
|
||||||
Preference.PreferenceItem.SwitchPreference(
|
|
||||||
pref = readerPreferences.webtoonEnableZoomOut(),
|
|
||||||
title = stringResource(SYMR.strings.enable_zoom_out),
|
|
||||||
),
|
|
||||||
// SY <--
|
// SY <--
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -217,11 +217,6 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
label = stringResource(MR.strings.pref_page_transitions),
|
label = stringResource(MR.strings.pref_page_transitions),
|
||||||
pref = screenModel.preferences.pageTransitionsWebtoon(),
|
pref = screenModel.preferences.pageTransitionsWebtoon(),
|
||||||
)
|
)
|
||||||
|
|
||||||
CheckboxItem(
|
|
||||||
label = stringResource(SYMR.strings.enable_zoom_out),
|
|
||||||
pref = screenModel.preferences.webtoonEnableZoomOut(),
|
|
||||||
)
|
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
|
val dualPageSplitWebtoon by screenModel.preferences.dualPageSplitWebtoon().collectAsState()
|
||||||
@ -254,6 +249,10 @@ private fun ColumnScope.WebtoonViewerSettings(screenModel: ReaderSettingsScreenM
|
|||||||
label = stringResource(MR.strings.pref_double_tap_zoom),
|
label = stringResource(MR.strings.pref_double_tap_zoom),
|
||||||
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
pref = screenModel.preferences.webtoonDoubleTapZoomEnabled(),
|
||||||
)
|
)
|
||||||
|
CheckboxItem(
|
||||||
|
label = stringResource(MR.strings.pref_webtoon_disable_zoom_out),
|
||||||
|
pref = screenModel.preferences.webtoonDisableZoomOut(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
|
@ -78,7 +78,7 @@ class ReaderPreferences(
|
|||||||
|
|
||||||
fun skipDupe() = preferenceStore.getBoolean("skip_dupe", false)
|
fun skipDupe() = preferenceStore.getBoolean("skip_dupe", false)
|
||||||
|
|
||||||
fun markReadDupe() = preferenceStore.getBoolean("mark_read_dupe", false)
|
fun webtoonDisableZoomOut() = preferenceStore.getBoolean("webtoon_disable_zoom_out", false)
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@ -162,8 +162,6 @@ class ReaderPreferences(
|
|||||||
|
|
||||||
fun useAutoWebtoon() = preferenceStore.getBoolean("eh_use_auto_webtoon", true)
|
fun useAutoWebtoon() = preferenceStore.getBoolean("eh_use_auto_webtoon", true)
|
||||||
|
|
||||||
fun webtoonEnableZoomOut() = preferenceStore.getBoolean("webtoon_enable_zoom_out", false)
|
|
||||||
|
|
||||||
fun continuousVerticalTappingByPage() = preferenceStore.getBoolean("continuous_vertical_tapping_by_page", false)
|
fun continuousVerticalTappingByPage() = preferenceStore.getBoolean("continuous_vertical_tapping_by_page", false)
|
||||||
|
|
||||||
fun cropBordersContinuousVertical() = preferenceStore.getBoolean("crop_borders_continues_vertical", false)
|
fun cropBordersContinuousVertical() = preferenceStore.getBoolean("crop_borders_continues_vertical", false)
|
||||||
@ -183,6 +181,8 @@ class ReaderPreferences(
|
|||||||
fun centerMarginType() = preferenceStore.getInt("center_margin_type", PagerConfig.CenterMarginType.NONE)
|
fun centerMarginType() = preferenceStore.getInt("center_margin_type", PagerConfig.CenterMarginType.NONE)
|
||||||
|
|
||||||
fun cacheArchiveMangaOnDisk() = preferenceStore.getBoolean("cache_archive_manga_on_disk", false)
|
fun cacheArchiveMangaOnDisk() = preferenceStore.getBoolean("cache_archive_manga_on_disk", false)
|
||||||
|
|
||||||
|
fun markReadDupe() = preferenceStore.getBoolean("mark_read_dupe", false)
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
enum class TappingInvertMode(
|
enum class TappingInvertMode(
|
||||||
|
@ -29,6 +29,11 @@ class WebtoonConfig(
|
|||||||
var imageCropBorders = false
|
var imageCropBorders = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
var zoomOutDisabled = false
|
||||||
|
private set
|
||||||
|
|
||||||
|
var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null
|
||||||
|
|
||||||
var sidePadding = 0
|
var sidePadding = 0
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@ -42,14 +47,9 @@ class WebtoonConfig(
|
|||||||
// SY -->
|
// SY -->
|
||||||
var usePageTransitions = false
|
var usePageTransitions = false
|
||||||
|
|
||||||
var enableZoomOut = false
|
|
||||||
private set
|
|
||||||
|
|
||||||
var continuousCropBorders = false
|
var continuousCropBorders = false
|
||||||
private set
|
private set
|
||||||
|
|
||||||
var zoomPropertyChangedListener: ((Boolean) -> Unit)? = null
|
|
||||||
|
|
||||||
// SY <--
|
// SY <--
|
||||||
init {
|
init {
|
||||||
readerPreferences.cropBordersWebtoon()
|
readerPreferences.cropBordersWebtoon()
|
||||||
@ -86,6 +86,12 @@ class WebtoonConfig(
|
|||||||
{ imagePropertyChangedListener?.invoke() },
|
{ imagePropertyChangedListener?.invoke() },
|
||||||
)
|
)
|
||||||
|
|
||||||
|
readerPreferences.webtoonDisableZoomOut()
|
||||||
|
.register(
|
||||||
|
{ zoomOutDisabled = it },
|
||||||
|
{ zoomPropertyChangedListener?.invoke(it) }
|
||||||
|
)
|
||||||
|
|
||||||
readerPreferences.webtoonDoubleTapZoomEnabled()
|
readerPreferences.webtoonDoubleTapZoomEnabled()
|
||||||
.register(
|
.register(
|
||||||
{ doubleTapZoom = it },
|
{ doubleTapZoom = it },
|
||||||
@ -99,9 +105,6 @@ class WebtoonConfig(
|
|||||||
.launchIn(scope)
|
.launchIn(scope)
|
||||||
|
|
||||||
// SY -->
|
// SY -->
|
||||||
readerPreferences.webtoonEnableZoomOut()
|
|
||||||
.register({ enableZoomOut = it }, { zoomPropertyChangedListener?.invoke(it) })
|
|
||||||
|
|
||||||
readerPreferences.cropBordersContinuousVertical()
|
readerPreferences.cropBordersContinuousVertical()
|
||||||
.register({ continuousCropBorders = it }, { imagePropertyChangedListener?.invoke() })
|
.register({ continuousCropBorders = it }, { imagePropertyChangedListener?.invoke() })
|
||||||
|
|
||||||
|
@ -33,13 +33,11 @@ class WebtoonFrame(context: Context) : FrameLayout(context) {
|
|||||||
scaleDetector.isQuickScaleEnabled = value
|
scaleDetector.isQuickScaleEnabled = value
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
var zoomOutDisabled = false
|
||||||
var enableZoomOut = false
|
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
recycler?.canZoomOut = value
|
recycler?.zoomOutDisabled = value
|
||||||
}
|
}
|
||||||
// SY <--
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recycler view added in this frame.
|
* Recycler view added in this frame.
|
||||||
|
@ -33,19 +33,15 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
private var firstVisibleItemPosition = 0
|
private var firstVisibleItemPosition = 0
|
||||||
private var lastVisibleItemPosition = 0
|
private var lastVisibleItemPosition = 0
|
||||||
private var currentScale = DEFAULT_RATE
|
private var currentScale = DEFAULT_RATE
|
||||||
|
var zoomOutDisabled = false
|
||||||
// SY -->
|
|
||||||
var canZoomOut = false
|
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
if (!value) {
|
if (value && currentScale < DEFAULT_RATE) {
|
||||||
zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f)
|
zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val minRate
|
private val minRate
|
||||||
get() = if (canZoomOut) MIN_RATE else DEFAULT_RATE
|
get() = if (zoomOutDisabled) DEFAULT_RATE else MIN_RATE
|
||||||
// SY <--
|
|
||||||
|
|
||||||
private val listener = GestureListener()
|
private val listener = GestureListener()
|
||||||
private val detector = Detector()
|
private val detector = Detector()
|
||||||
@ -179,9 +175,7 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
fun onScale(scaleFactor: Float) {
|
fun onScale(scaleFactor: Float) {
|
||||||
currentScale *= scaleFactor
|
currentScale *= scaleFactor
|
||||||
currentScale = currentScale.coerceIn(
|
currentScale = currentScale.coerceIn(
|
||||||
// SY -->
|
|
||||||
minRate,
|
minRate,
|
||||||
// SY <--
|
|
||||||
MAX_SCALE_RATE,
|
MAX_SCALE_RATE,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -208,8 +202,8 @@ class WebtoonRecyclerView @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun onScaleEnd() {
|
fun onScaleEnd() {
|
||||||
if (scaleX < /* SY --> */ minRate /* SY <-- */) {
|
if (scaleX < minRate) {
|
||||||
zoom(currentScale, /* SY --> */ minRate /* SY <-- */, x, 0f, y, 0f)
|
zoom(currentScale, minRate, x, 0f, y, 0f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,17 +159,15 @@ class WebtoonViewer(
|
|||||||
frame.doubleTapZoom = it
|
frame.doubleTapZoom = it
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.zoomPropertyChangedListener = {
|
||||||
|
frame.zoomOutDisabled = it
|
||||||
|
}
|
||||||
|
|
||||||
config.navigationModeChangedListener = {
|
config.navigationModeChangedListener = {
|
||||||
val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay
|
val showOnStart = config.navigationOverlayOnStart || config.forceNavigationOverlay
|
||||||
activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart)
|
activity.binding.navigationOverlay.setNavigation(config.navigator, showOnStart)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SY -->
|
|
||||||
config.zoomPropertyChangedListener = {
|
|
||||||
frame.enableZoomOut = it
|
|
||||||
}
|
|
||||||
// SY <--
|
|
||||||
|
|
||||||
frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
|
frame.layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
|
||||||
frame.addView(recycler)
|
frame.addView(recycler)
|
||||||
}
|
}
|
||||||
|
@ -458,6 +458,7 @@
|
|||||||
<string name="pref_high">High</string>
|
<string name="pref_high">High</string>
|
||||||
<string name="pref_low">Low</string>
|
<string name="pref_low">Low</string>
|
||||||
<string name="pref_lowest">Lowest</string>
|
<string name="pref_lowest">Lowest</string>
|
||||||
|
<string name="pref_webtoon_disable_zoom_out">Disable zoom out</string>
|
||||||
|
|
||||||
<!-- Downloads section -->
|
<!-- Downloads section -->
|
||||||
<string name="pref_category_delete_chapters">Delete chapters</string>
|
<string name="pref_category_delete_chapters">Delete chapters</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user