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>>{};
bool isLongPressing = false;
int fingers = 0;
@override
void initState() {
reader = context.reader;
@@ -144,7 +148,28 @@ class _GalleryModeState extends State<_GalleryMode>
@override
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(
color: context.colorScheme.surface,
),
@@ -219,6 +244,7 @@ class _GalleryModeState extends State<_GalleryMode>
context.readerScaffold.update();
}
},
),
);
}
@@ -312,7 +338,7 @@ class _GalleryModeState extends State<_GalleryMode>
@override
void handleLongPressDown(Offset location) {
if (!appdata.settings['enableLongPressToZoom']) {
if (!appdata.settings['enableLongPressToZoom'] || fingers != 1) {
return;
}
var photoViewController = photoViewControllers[reader.page]!;
@@ -322,16 +348,18 @@ class _GalleryModeState extends State<_GalleryMode>
target,
Offset(size.width / 2 - location.dx, size.height / 2 - location.dy),
);
isLongPressing = true;
}
@override
void handleLongPressUp(Offset location) {
if (!appdata.settings['enableLongPressToZoom']) {
if (!appdata.settings['enableLongPressToZoom'] || !isLongPressing) {
return;
}
var photoViewController = photoViewControllers[reader.page]!;
double target = photoViewController.getInitialScale!.call()!;
photoViewController.animateScale?.call(target);
isLongPressing = false;
}
Timer? keyRepeatTimer;