diff --git a/lib/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart b/lib/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart index 589c08cc3..c04b8f962 100644 --- a/lib/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart +++ b/lib/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart @@ -10,6 +10,11 @@ class CustomHorizontalDragGestureRecognizer }); Offset? _initialPosition; + Offset? get initialPosition => _initialPosition; + + @override + DeviceGestureSettings get gestureSettings => _gestureSettings; + final _gestureSettings = DeviceGestureSettings(touchSlop: touchSlopH); @override void addAllowedPointer(PointerDownEvent event) { diff --git a/lib/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart b/lib/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart index c0e4be60f..5b1a6a3fa 100644 --- a/lib/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart +++ b/lib/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart @@ -1,18 +1,17 @@ +import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'; import 'package:flutter/gestures.dart'; typedef IsBoundaryAllowed = bool Function(Offset? initialPosition, OffsetPair lastPosition); class ImageHorizontalDragGestureRecognizer - extends HorizontalDragGestureRecognizer { + extends CustomHorizontalDragGestureRecognizer { ImageHorizontalDragGestureRecognizer({ super.debugOwner, super.supportedDevices, super.allowedButtonsFilter, }); - Offset? _initialPosition; - IsBoundaryAllowed? isBoundaryAllowed; int? _pointer; @@ -26,20 +25,16 @@ class ImageHorizontalDragGestureRecognizer super.addPointer(event); } - @override - void addAllowedPointer(PointerDownEvent event) { - super.addAllowedPointer(event); - _initialPosition = event.position; - } - @override bool hasSufficientGlobalDistanceToAccept( PointerDeviceKind pointerDeviceKind, double? deviceTouchSlop, ) { - return globalDistanceMoved.abs() > - computeHitSlop(pointerDeviceKind, gestureSettings) && - (isBoundaryAllowed?.call(_initialPosition, lastPosition) ?? true); + return super.hasSufficientGlobalDistanceToAccept( + pointerDeviceKind, + deviceTouchSlop, + ) && + (isBoundaryAllowed?.call(initialPosition, lastPosition) ?? true); } @override diff --git a/lib/common/widgets/image_viewer/gallery_viewer.dart b/lib/common/widgets/image_viewer/gallery_viewer.dart index 8d052c9b3..b388c9ddc 100644 --- a/lib/common/widgets/image_viewer/gallery_viewer.dart +++ b/lib/common/widgets/image_viewer/gallery_viewer.dart @@ -118,8 +118,7 @@ class _GalleryViewerState extends State if (PlatformUtils.isDesktop) { _tapGestureRecognizer.onSecondaryTapUp = _showDesktopMenu; } - _horizontalDragGestureRecognizer = ImageHorizontalDragGestureRecognizer() - ..gestureSettings = gestureSettings; + _horizontalDragGestureRecognizer = ImageHorizontalDragGestureRecognizer(); _longPressGestureRecognizer = LongPressGestureRecognizer() ..onLongPress = _onLongPress ..gestureSettings = gestureSettings; diff --git a/lib/common/widgets/image_viewer/image.dart b/lib/common/widgets/image_viewer/image.dart index 7e0833b47..75b5aa9b1 100644 --- a/lib/common/widgets/image_viewer/image.dart +++ b/lib/common/widgets/image_viewer/image.dart @@ -605,8 +605,8 @@ class _ImageState extends State with WidgetsBindingObserver { imgRatio > StyleString.imgMaxRatio && imgHeight > widget.containerSize.height; if (isLongPic) { - minScale = - widget.containerSize.width / widget.containerSize.height * imgRatio; + final compatWidth = math.min(650.0, widget.containerSize.width); + minScale = compatWidth / widget.containerSize.height * imgRatio; maxScale = math.max(widget.maxScale, minScale * 3); } result = Viewer( diff --git a/lib/common/widgets/image_viewer/viewer.dart b/lib/common/widgets/image_viewer/viewer.dart index b17b2c655..2915e05cf 100644 --- a/lib/common/widgets/image_viewer/viewer.dart +++ b/lib/common/widgets/image_viewer/viewer.dart @@ -17,6 +17,8 @@ import 'dart:math' as math; +import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart' + show touchSlopH; import 'package:PiliPlus/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart'; @@ -138,17 +140,16 @@ class _ViewerState extends State with SingleTickerProviderStateMixin { _tapGestureRecognizer = widget.tapGestureRecognizer; _horizontalDragGestureRecognizer = widget.horizontalDragGestureRecognizer; - final gestureSettings = MediaQuery.maybeGestureSettingsOf(Get.context!); _scaleGestureRecognizer = ScaleGestureRecognizer(debugOwner: this) ..dragStartBehavior = .start ..onStart = _onScaleStart ..onUpdate = _onScaleUpdate ..onEnd = _onScaleEnd - ..gestureSettings = gestureSettings; + ..gestureSettings = DeviceGestureSettings(touchSlop: touchSlopH); _doubleTapGestureRecognizer = DoubleTapGestureRecognizer(debugOwner: this) ..onDoubleTapDown = _onDoubleTapDown ..onDoubleTap = _onDoubleTap - ..gestureSettings = gestureSettings; + ..gestureSettings = MediaQuery.maybeGestureSettingsOf(Get.context!); } @override @@ -418,9 +419,9 @@ class _ViewerState extends State with SingleTickerProviderStateMixin { final dx = (1 - _scale) * containerWidth / 2; final dxOffset = (imageWidth - containerWidth) / 2; if (initialPosition.dx < lastPosition.global.dx) { - return _position.dx == dx + dxOffset; + return _round(_position.dx) == _round(dx + dxOffset); } else { - return _position.dx == dx - dxOffset; + return _round(_position.dx) == _round(dx - dxOffset); } } diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index 24e047279..aa0f46532 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -238,8 +238,6 @@ class _MainAppState extends PopScopeState static void _onBack() { if (Platform.isAndroid) { Utils.channel.invokeMethod('back'); - } else { - SystemNavigator.pop(); } }