Improve the long press to zoom feature.

This commit is contained in:
nyne
2025-03-28 18:03:44 +08:00
parent fddd959545
commit a8e55e0151

View File

@@ -115,6 +115,10 @@ class _GalleryModeState extends State<_GalleryMode>
var imageStates = <State<ComicImage>>{}; var imageStates = <State<ComicImage>>{};
bool isLongPressing = false;
int fingers = 0;
@override @override
void initState() { void initState() {
reader = context.reader; reader = context.reader;
@@ -144,7 +148,28 @@ class _GalleryModeState extends State<_GalleryMode>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return PhotoViewGallery.builder( return Listener(
onPointerDown: (event) {
fingers++;
},
onPointerUp: (event) {
fingers--;
},
onPointerCancel: (event) {
fingers--;
},
onPointerMove: (event) {
if (isLongPressing) {
var controller = photoViewControllers[reader.page]!;
Offset value = event.delta;
if (isLongPressing) {
controller.updateMultiple(
position: controller.position + value,
);
}
}
},
child: PhotoViewGallery.builder(
backgroundDecoration: BoxDecoration( backgroundDecoration: BoxDecoration(
color: context.colorScheme.surface, color: context.colorScheme.surface,
), ),
@@ -219,6 +244,7 @@ class _GalleryModeState extends State<_GalleryMode>
context.readerScaffold.update(); context.readerScaffold.update();
} }
}, },
),
); );
} }
@@ -312,7 +338,7 @@ class _GalleryModeState extends State<_GalleryMode>
@override @override
void handleLongPressDown(Offset location) { void handleLongPressDown(Offset location) {
if (!appdata.settings['enableLongPressToZoom']) { if (!appdata.settings['enableLongPressToZoom'] || fingers != 1) {
return; return;
} }
var photoViewController = photoViewControllers[reader.page]!; var photoViewController = photoViewControllers[reader.page]!;
@@ -322,16 +348,18 @@ class _GalleryModeState extends State<_GalleryMode>
target, target,
Offset(size.width / 2 - location.dx, size.height / 2 - location.dy), Offset(size.width / 2 - location.dx, size.height / 2 - location.dy),
); );
isLongPressing = true;
} }
@override @override
void handleLongPressUp(Offset location) { void handleLongPressUp(Offset location) {
if (!appdata.settings['enableLongPressToZoom']) { if (!appdata.settings['enableLongPressToZoom'] || !isLongPressing) {
return; return;
} }
var photoViewController = photoViewControllers[reader.page]!; var photoViewController = photoViewControllers[reader.page]!;
double target = photoViewController.getInitialScale!.call()!; double target = photoViewController.getInitialScale!.call()!;
photoViewController.animateScale?.call(target); photoViewController.animateScale?.call(target);
isLongPressing = false;
} }
Timer? keyRepeatTimer; Timer? keyRepeatTimer;