mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-12-12 02:57:22 +00:00
feat: support track pad scroll on flutter
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
import 'dart:ui' as ui;
|
||||
@@ -39,6 +40,10 @@ class InputModel {
|
||||
var alt = false;
|
||||
var command = false;
|
||||
|
||||
// trackpad
|
||||
var trackpadScrollDistance = Offset.zero;
|
||||
Timer? _flingTimer;
|
||||
|
||||
// mouse
|
||||
final isPhysicalMouse = false.obs;
|
||||
int _lastMouseDownButtons = 0;
|
||||
@@ -236,6 +241,7 @@ class InputModel {
|
||||
if (!enter) {
|
||||
resetModifiers();
|
||||
}
|
||||
_flingTimer?.cancel();
|
||||
bind.sessionEnterOrLeave(id: id, enter: enter);
|
||||
}
|
||||
|
||||
@@ -258,6 +264,57 @@ class InputModel {
|
||||
}
|
||||
}
|
||||
|
||||
int _signOrZero(num x) {
|
||||
if (x == 0) {
|
||||
return 0;
|
||||
} else {
|
||||
return x > 0 ? 1 : -1;
|
||||
}
|
||||
}
|
||||
|
||||
void onPointerPanZoomStart(PointerPanZoomStartEvent e) {}
|
||||
|
||||
// https://docs.flutter.dev/release/breaking-changes/trackpad-gestures
|
||||
// TODO(support zoom in/out)
|
||||
void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) {
|
||||
var delta = e.panDelta;
|
||||
trackpadScrollDistance += delta;
|
||||
bind.sessionSendMouse(
|
||||
id: id,
|
||||
msg:
|
||||
'{"type": "trackpad", "x": "${delta.dx.toInt()}", "y": "${delta.dy.toInt()}"}');
|
||||
}
|
||||
|
||||
// Simple simulation for fling.
|
||||
void _scheduleFling(var x, y, dx, dy) {
|
||||
if (dx <= 0 && dy <= 0) {
|
||||
return;
|
||||
}
|
||||
_flingTimer = Timer(Duration(milliseconds: 10), () {
|
||||
bind.sessionSendMouse(
|
||||
id: id, msg: '{"type": "trackpad", "x": "$x", "y": "$y"}');
|
||||
dx--;
|
||||
dy--;
|
||||
if (dx == 0) {
|
||||
x = 0;
|
||||
}
|
||||
if (dy == 0) {
|
||||
y = 0;
|
||||
}
|
||||
_scheduleFling(x, y, dx, dy);
|
||||
});
|
||||
}
|
||||
|
||||
void onPointerPanZoomEnd(PointerPanZoomEndEvent e) {
|
||||
var x = _signOrZero(trackpadScrollDistance.dx);
|
||||
var y = _signOrZero(trackpadScrollDistance.dy);
|
||||
var dx = trackpadScrollDistance.dx.abs() ~/ 40;
|
||||
var dy = trackpadScrollDistance.dy.abs() ~/ 40;
|
||||
_scheduleFling(x, y, dx, dy);
|
||||
|
||||
trackpadScrollDistance = Offset.zero;
|
||||
}
|
||||
|
||||
void onPointDownImage(PointerDownEvent e) {
|
||||
debugPrint("onPointDownImage");
|
||||
if (e.kind != ui.PointerDeviceKind.mouse) {
|
||||
|
||||
Reference in New Issue
Block a user