feat(reader): Add zoom option for Automatically zoom wide images (#1124)
* feat(reader): Add zoom option for `Automatically zoom wide images` * improve
This commit is contained in:
parent
9e5069a376
commit
683bf172bf
7 changed files with 71 additions and 6 deletions
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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 <--
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -219,6 +219,7 @@ class PagerPageHolder(
|
|||
// KMK -->
|
||||
disableZoomIn = viewer.config.disableZoomIn,
|
||||
doubleTapZoom = viewer.config.doubleTapZoom,
|
||||
landscapeZoomScaleType = viewer.config.landscapeZoomScaleType,
|
||||
// KMK <--
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
<string name="error_opening_folder">Failed to open folder</string>
|
||||
<string name="pref_pinch_to_zoom">Pinch to zoom</string>
|
||||
<string name="pref_paged_disable_zoom_in">Disable zoom in</string>
|
||||
<string name="pref_landscape_zoom_type">Wide images zoom mode</string>
|
||||
<string name="scale_type_double">Double zoom</string>
|
||||
|
||||
<!-- Preferences -->
|
||||
<!-- Appearance section -->
|
||||
|
|
|
|||
Loading…
Reference in a new issue