mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-16 06:03:54 +08:00
improve horizontal touch slop
Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import 'package:PiliPlus/utils/storage_pref.dart';
|
import 'package:PiliPlus/utils/storage_pref.dart';
|
||||||
|
import 'package:flutter/foundation.dart' show PlatformDispatcher;
|
||||||
import 'package:flutter/gestures.dart';
|
import 'package:flutter/gestures.dart';
|
||||||
|
|
||||||
mixin InitialPositionMixin on GestureRecognizer {
|
mixin InitialPositionMixin on GestureRecognizer {
|
||||||
@@ -50,20 +51,30 @@ bool _computeHitSlop(
|
|||||||
Offset lastPosition,
|
Offset lastPosition,
|
||||||
) {
|
) {
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case PointerDeviceKind.mouse:
|
case .mouse:
|
||||||
return globalDistanceMoved > kPrecisePointerHitSlop;
|
return globalDistanceMoved > kPrecisePointerHitSlop;
|
||||||
case PointerDeviceKind.stylus:
|
case .stylus:
|
||||||
case PointerDeviceKind.invertedStylus:
|
case .invertedStylus:
|
||||||
case PointerDeviceKind.unknown:
|
case .unknown:
|
||||||
case PointerDeviceKind.touch:
|
case .touch:
|
||||||
return globalDistanceMoved > settings.touchSlop! &&
|
return globalDistanceMoved > settings.touchSlop! &&
|
||||||
_calc(initialPosition!, lastPosition);
|
_calcAngle(initialPosition!, lastPosition);
|
||||||
case PointerDeviceKind.trackpad:
|
case .trackpad:
|
||||||
return globalDistanceMoved > settings.touchSlop!;
|
return globalDistanceMoved > settings.touchSlop!;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _calc(Offset initialPosition, Offset lastPosition) {
|
bool _calcAngle(Offset initialPosition, Offset lastPosition) {
|
||||||
final offset = lastPosition - initialPosition;
|
final offset = lastPosition - initialPosition;
|
||||||
return offset.dx.abs() > offset.dy.abs() * 3;
|
return offset.dx.abs() > offset.dy.abs() * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final deviceTouchSlop = _calcDeviceTouchSlop();
|
||||||
|
|
||||||
|
double _calcDeviceTouchSlop() {
|
||||||
|
final view = PlatformDispatcher.instance.views.first;
|
||||||
|
final physicalTouchSlop = view.gestureSettings.physicalTouchSlop;
|
||||||
|
return physicalTouchSlop == null
|
||||||
|
? kTouchSlop
|
||||||
|
: physicalTouchSlop / view.devicePixelRatio;
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import 'dart:math' show max;
|
|||||||
import 'package:PiliPlus/common/widgets/custom_icon.dart';
|
import 'package:PiliPlus/common/widgets/custom_icon.dart';
|
||||||
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
|
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
|
||||||
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'
|
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'
|
||||||
show touchSlopH;
|
show deviceTouchSlop, touchSlopH;
|
||||||
import 'package:PiliPlus/common/widgets/image_grid/image_grid_view.dart'
|
import 'package:PiliPlus/common/widgets/image_grid/image_grid_view.dart'
|
||||||
show ImageGridView, ImageModel;
|
show ImageGridView, ImageModel;
|
||||||
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
|
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
|
||||||
@@ -236,7 +236,7 @@ List<SettingsModel> get extraSettings => [
|
|||||||
),
|
),
|
||||||
NormalModel(
|
NormalModel(
|
||||||
title: '横向滑动阈值',
|
title: '横向滑动阈值',
|
||||||
getSubtitle: () => '当前:「${Pref.touchSlopH}」',
|
getSubtitle: () => '当前:「${Pref.touchSlopH}」,系统默认值: $deviceTouchSlop',
|
||||||
onTap: _showTouchSlopDialog,
|
onTap: _showTouchSlopDialog,
|
||||||
leading: const Icon(Icons.pan_tool_alt_outlined),
|
leading: const Icon(Icons.pan_tool_alt_outlined),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:math' show pow, sqrt;
|
import 'dart:math' show pow, sqrt;
|
||||||
|
|
||||||
|
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'
|
||||||
|
show deviceTouchSlop;
|
||||||
import 'package:PiliPlus/common/widgets/pair.dart';
|
import 'package:PiliPlus/common/widgets/pair.dart';
|
||||||
import 'package:PiliPlus/http/constants.dart';
|
import 'package:PiliPlus/http/constants.dart';
|
||||||
import 'package:PiliPlus/models/common/bar_hide_type.dart';
|
import 'package:PiliPlus/models/common/bar_hide_type.dart';
|
||||||
@@ -967,8 +969,10 @@ abstract final class Pref {
|
|||||||
static bool get showDynDispute =>
|
static bool get showDynDispute =>
|
||||||
_setting.get(SettingBoxKey.showDynDispute, defaultValue: false);
|
_setting.get(SettingBoxKey.showDynDispute, defaultValue: false);
|
||||||
|
|
||||||
static double get touchSlopH =>
|
static double get touchSlopH => _setting.get(
|
||||||
_setting.get(SettingBoxKey.touchSlopH, defaultValue: 24.0);
|
SettingBoxKey.touchSlopH,
|
||||||
|
defaultValue: deviceTouchSlop + 6.0,
|
||||||
|
);
|
||||||
|
|
||||||
static bool get saveReply =>
|
static bool get saveReply =>
|
||||||
_setting.get(SettingBoxKey.saveReply, defaultValue: true);
|
_setting.get(SettingBoxKey.saveReply, defaultValue: true);
|
||||||
|
|||||||
Reference in New Issue
Block a user