mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 15:57:25 +00:00
Improve the long press to zoom feature.
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user