diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b9692100..a2ac82288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. ### Added - mosaic layout +- slideshow: option for no transition ## [v1.7.0] - 2022-09-19 diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 67854960a..f7d0ec753 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -207,6 +207,7 @@ "viewerTransitionParallax": "Parallax", "viewerTransitionFade": "Fade", "viewerTransitionZoomIn": "Zoom in", + "viewerTransitionNone": "None", "wallpaperTargetHome": "Home screen", "wallpaperTargetLock": "Lock screen", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index fe7253960..3d9ee6a81 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -167,6 +167,7 @@ "viewerTransitionParallax": "Parallaxe", "viewerTransitionFade": "Fondu", "viewerTransitionZoomIn": "Zoom", + "viewerTransitionNone": "Aucune", "wallpaperTargetHome": "Écran d’accueil", "wallpaperTargetLock": "Écran de verrouillage", diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index d7f102915..4a1971957 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -167,6 +167,7 @@ "viewerTransitionParallax": "시차", "viewerTransitionFade": "페이드", "viewerTransitionZoomIn": "확대", + "viewerTransitionNone": "없음", "wallpaperTargetHome": "홈 화면", "wallpaperTargetLock": "잠금화면", diff --git a/lib/model/settings/enums/enums.dart b/lib/model/settings/enums/enums.dart index 05f34a63e..2dd1a3bc5 100644 --- a/lib/model/settings/enums/enums.dart +++ b/lib/model/settings/enums/enums.dart @@ -28,6 +28,6 @@ enum VideoControls { play, playSeek, playOutside, none } enum VideoLoopMode { never, shortOnly, always } -enum ViewerTransition { slide, parallax, fade, zoomIn } +enum ViewerTransition { slide, parallax, fade, zoomIn, none } enum WidgetShape { rrect, circle, heart } \ No newline at end of file diff --git a/lib/model/settings/enums/viewer_transition.dart b/lib/model/settings/enums/viewer_transition.dart index 504474851..e5fe2032e 100644 --- a/lib/model/settings/enums/viewer_transition.dart +++ b/lib/model/settings/enums/viewer_transition.dart @@ -15,6 +15,8 @@ extension ExtraViewerTransition on ViewerTransition { return context.l10n.viewerTransitionFade; case ViewerTransition.zoomIn: return context.l10n.viewerTransitionZoomIn; + case ViewerTransition.none: + return context.l10n.viewerTransitionNone; } } @@ -28,6 +30,8 @@ extension ExtraViewerTransition on ViewerTransition { return PageTransitionEffects.fade(pageController, index, zoomIn: false); case ViewerTransition.zoomIn: return PageTransitionEffects.fade(pageController, index, zoomIn: true); + case ViewerTransition.none: + return PageTransitionEffects.none(pageController, index); } } } diff --git a/lib/widgets/viewer/controller.dart b/lib/widgets/viewer/controller.dart index bae8ec799..21f3a006d 100644 --- a/lib/widgets/viewer/controller.dart +++ b/lib/widgets/viewer/controller.dart @@ -119,4 +119,26 @@ class PageTransitionEffects { ), ); }; + + static TransitionBuilder none( + PageController pageController, + int index, + ) => + (context, child) { + double opacity = 0; + double dx = 0; + if (pageController.hasClients && pageController.position.haveDimensions) { + final position = (pageController.page! - index).clamp(-1.0, 1.0); + final width = pageController.position.viewportDimension; + opacity = (1 - position.abs()).roundToDouble().clamp(0, 1); + dx = position * width; + } + return Opacity( + opacity: opacity, + child: Transform.translate( + offset: Offset(dx, 0), + child: child, + ), + ); + }; } diff --git a/untranslated.json b/untranslated.json index 54f8892da..0e10d7809 100644 --- a/untranslated.json +++ b/untranslated.json @@ -1,9 +1,11 @@ { "de": [ + "viewerTransitionNone", "tileLayoutMosaic" ], "el": [ + "viewerTransitionNone", "tileLayoutMosaic" ], @@ -12,6 +14,7 @@ "filterNoDateLabel", "filterNoTitleLabel", "filterRecentlyAddedLabel", + "viewerTransitionNone", "viewDialogReverseSortOrder", "tileLayoutMosaic", "sortOrderNewestFirst", @@ -28,10 +31,12 @@ ], "id": [ + "viewerTransitionNone", "tileLayoutMosaic" ], "it": [ + "viewerTransitionNone", "tileLayoutMosaic" ], @@ -40,6 +45,7 @@ "filterNoDateLabel", "filterNoTitleLabel", "filterRecentlyAddedLabel", + "viewerTransitionNone", "viewDialogReverseSortOrder", "tileLayoutMosaic", "sortOrderNewestFirst", @@ -57,6 +63,7 @@ ], "nl": [ + "viewerTransitionNone", "tileLayoutMosaic" ], @@ -64,6 +71,7 @@ "entryInfoActionEditTitleDescription", "filterNoDateLabel", "filterNoTitleLabel", + "viewerTransitionNone", "viewDialogReverseSortOrder", "tileLayoutMosaic", "sortOrderNewestFirst", @@ -78,6 +86,7 @@ ], "ru": [ + "viewerTransitionNone", "tileLayoutMosaic" ], @@ -96,6 +105,7 @@ "viewerTransitionParallax", "viewerTransitionFade", "viewerTransitionZoomIn", + "viewerTransitionNone", "wallpaperTargetHome", "wallpaperTargetLock", "wallpaperTargetHomeLock", @@ -131,6 +141,7 @@ ], "zh": [ + "viewerTransitionNone", "tileLayoutMosaic" ] }