mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-31 16:18:22 +08:00
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user