Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-02-14 18:41:35 +08:00
parent 511ff71f5f
commit 9c7c6f9e4e
6 changed files with 21 additions and 23 deletions

View File

@@ -10,6 +10,11 @@ class CustomHorizontalDragGestureRecognizer
}); });
Offset? _initialPosition; Offset? _initialPosition;
Offset? get initialPosition => _initialPosition;
@override
DeviceGestureSettings get gestureSettings => _gestureSettings;
final _gestureSettings = DeviceGestureSettings(touchSlop: touchSlopH);
@override @override
void addAllowedPointer(PointerDownEvent event) { void addAllowedPointer(PointerDownEvent event) {

View File

@@ -1,18 +1,17 @@
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
typedef IsBoundaryAllowed = typedef IsBoundaryAllowed =
bool Function(Offset? initialPosition, OffsetPair lastPosition); bool Function(Offset? initialPosition, OffsetPair lastPosition);
class ImageHorizontalDragGestureRecognizer class ImageHorizontalDragGestureRecognizer
extends HorizontalDragGestureRecognizer { extends CustomHorizontalDragGestureRecognizer {
ImageHorizontalDragGestureRecognizer({ ImageHorizontalDragGestureRecognizer({
super.debugOwner, super.debugOwner,
super.supportedDevices, super.supportedDevices,
super.allowedButtonsFilter, super.allowedButtonsFilter,
}); });
Offset? _initialPosition;
IsBoundaryAllowed? isBoundaryAllowed; IsBoundaryAllowed? isBoundaryAllowed;
int? _pointer; int? _pointer;
@@ -26,20 +25,16 @@ class ImageHorizontalDragGestureRecognizer
super.addPointer(event); super.addPointer(event);
} }
@override
void addAllowedPointer(PointerDownEvent event) {
super.addAllowedPointer(event);
_initialPosition = event.position;
}
@override @override
bool hasSufficientGlobalDistanceToAccept( bool hasSufficientGlobalDistanceToAccept(
PointerDeviceKind pointerDeviceKind, PointerDeviceKind pointerDeviceKind,
double? deviceTouchSlop, double? deviceTouchSlop,
) { ) {
return globalDistanceMoved.abs() > return super.hasSufficientGlobalDistanceToAccept(
computeHitSlop(pointerDeviceKind, gestureSettings) && pointerDeviceKind,
(isBoundaryAllowed?.call(_initialPosition, lastPosition) ?? true); deviceTouchSlop,
) &&
(isBoundaryAllowed?.call(initialPosition, lastPosition) ?? true);
} }
@override @override

View File

@@ -118,8 +118,7 @@ class _GalleryViewerState extends State<GalleryViewer>
if (PlatformUtils.isDesktop) { if (PlatformUtils.isDesktop) {
_tapGestureRecognizer.onSecondaryTapUp = _showDesktopMenu; _tapGestureRecognizer.onSecondaryTapUp = _showDesktopMenu;
} }
_horizontalDragGestureRecognizer = ImageHorizontalDragGestureRecognizer() _horizontalDragGestureRecognizer = ImageHorizontalDragGestureRecognizer();
..gestureSettings = gestureSettings;
_longPressGestureRecognizer = LongPressGestureRecognizer() _longPressGestureRecognizer = LongPressGestureRecognizer()
..onLongPress = _onLongPress ..onLongPress = _onLongPress
..gestureSettings = gestureSettings; ..gestureSettings = gestureSettings;

View File

@@ -605,8 +605,8 @@ class _ImageState extends State<Image> with WidgetsBindingObserver {
imgRatio > StyleString.imgMaxRatio && imgRatio > StyleString.imgMaxRatio &&
imgHeight > widget.containerSize.height; imgHeight > widget.containerSize.height;
if (isLongPic) { if (isLongPic) {
minScale = final compatWidth = math.min(650.0, widget.containerSize.width);
widget.containerSize.width / widget.containerSize.height * imgRatio; minScale = compatWidth / widget.containerSize.height * imgRatio;
maxScale = math.max(widget.maxScale, minScale * 3); maxScale = math.max(widget.maxScale, minScale * 3);
} }
result = Viewer( result = Viewer(

View File

@@ -17,6 +17,8 @@
import 'dart:math' as math; 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_horizontal_drag_gesture_recognizer.dart';
import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart'; import 'package:PiliPlus/common/widgets/gesture/image_tap_gesture_recognizer.dart';
import 'package:PiliPlus/utils/extension/num_ext.dart'; import 'package:PiliPlus/utils/extension/num_ext.dart';
@@ -138,17 +140,16 @@ class _ViewerState extends State<Viewer> with SingleTickerProviderStateMixin {
_tapGestureRecognizer = widget.tapGestureRecognizer; _tapGestureRecognizer = widget.tapGestureRecognizer;
_horizontalDragGestureRecognizer = widget.horizontalDragGestureRecognizer; _horizontalDragGestureRecognizer = widget.horizontalDragGestureRecognizer;
final gestureSettings = MediaQuery.maybeGestureSettingsOf(Get.context!);
_scaleGestureRecognizer = ScaleGestureRecognizer(debugOwner: this) _scaleGestureRecognizer = ScaleGestureRecognizer(debugOwner: this)
..dragStartBehavior = .start ..dragStartBehavior = .start
..onStart = _onScaleStart ..onStart = _onScaleStart
..onUpdate = _onScaleUpdate ..onUpdate = _onScaleUpdate
..onEnd = _onScaleEnd ..onEnd = _onScaleEnd
..gestureSettings = gestureSettings; ..gestureSettings = DeviceGestureSettings(touchSlop: touchSlopH);
_doubleTapGestureRecognizer = DoubleTapGestureRecognizer(debugOwner: this) _doubleTapGestureRecognizer = DoubleTapGestureRecognizer(debugOwner: this)
..onDoubleTapDown = _onDoubleTapDown ..onDoubleTapDown = _onDoubleTapDown
..onDoubleTap = _onDoubleTap ..onDoubleTap = _onDoubleTap
..gestureSettings = gestureSettings; ..gestureSettings = MediaQuery.maybeGestureSettingsOf(Get.context!);
} }
@override @override
@@ -418,9 +419,9 @@ class _ViewerState extends State<Viewer> with SingleTickerProviderStateMixin {
final dx = (1 - _scale) * containerWidth / 2; final dx = (1 - _scale) * containerWidth / 2;
final dxOffset = (imageWidth - containerWidth) / 2; final dxOffset = (imageWidth - containerWidth) / 2;
if (initialPosition.dx < lastPosition.global.dx) { if (initialPosition.dx < lastPosition.global.dx) {
return _position.dx == dx + dxOffset; return _round(_position.dx) == _round(dx + dxOffset);
} else { } else {
return _position.dx == dx - dxOffset; return _round(_position.dx) == _round(dx - dxOffset);
} }
} }

View File

@@ -238,8 +238,6 @@ class _MainAppState extends PopScopeState<MainApp>
static void _onBack() { static void _onBack() {
if (Platform.isAndroid) { if (Platform.isAndroid) {
Utils.channel.invokeMethod('back'); Utils.channel.invokeMethod('back');
} else {
SystemNavigator.pop();
} }
} }