tmp commit

Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow 2023-08-09 07:39:16 +08:00
parent 8999bbf297
commit 933c99110c

View File

@ -62,11 +62,11 @@ class InputModel {
int _lastButtons = 0; int _lastButtons = 0;
Offset lastMousePos = Offset.zero; Offset lastMousePos = Offset.zero;
get id => parent.target?.id ?? "";
late final SessionID sessionId; late final SessionID sessionId;
bool get keyboardPerm => parent.target!.ffiModel.keyboard; bool get keyboardPerm => parent.target!.ffiModel.keyboard;
String get id => parent.target?.id ?? '';
String? get peerPlatform => parent.target?.ffiModel.pi.platform;
InputModel(this.parent) { InputModel(this.parent) {
sessionId = parent.target!.sessionId; sessionId = parent.target!.sessionId;
@ -334,11 +334,15 @@ class InputModel {
void onPointerPanZoomStart(PointerPanZoomStartEvent e) { void onPointerPanZoomStart(PointerPanZoomStartEvent e) {
_lastScale = 1.0; _lastScale = 1.0;
_stopFling = true; _stopFling = true;
handlePointerEvent('touch', 'pan_start', e);
if (peerPlatform == kPeerPlatformAndroid) {
handlePointerEvent('touch', 'pan_start', e.position);
}
} }
// https://docs.flutter.dev/release/breaking-changes/trackpad-gestures // https://docs.flutter.dev/release/breaking-changes/trackpad-gestures
void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) { void onPointerPanZoomUpdate(PointerPanZoomUpdateEvent e) {
if (peerPlatform != kPeerPlatformAndroid) {
final scale = ((e.scale - _lastScale) * 1000).toInt(); final scale = ((e.scale - _lastScale) * 1000).toInt();
_lastScale = e.scale; _lastScale = e.scale;
@ -350,13 +354,15 @@ class InputModel {
})); }));
return; return;
} }
}
final delta = e.panDelta; final delta = e.panDelta;
_trackpadLastDelta = delta; _trackpadLastDelta = delta;
var x = delta.dx.toInt(); var x = delta.dx.toInt();
var y = delta.dy.toInt(); var y = delta.dy.toInt();
if (parent.target?.ffiModel.pi.platform == kPeerPlatformLinux) { if (peerPlatform == kPeerPlatformLinux ||
peerPlatform == kPeerPlatformAndroid) {
_trackpadScrollUnsent += (delta * _trackpadSpeed); _trackpadScrollUnsent += (delta * _trackpadSpeed);
x = _trackpadScrollUnsent.dx.truncate(); x = _trackpadScrollUnsent.dx.truncate();
y = _trackpadScrollUnsent.dy.truncate(); y = _trackpadScrollUnsent.dy.truncate();
@ -372,11 +378,15 @@ class InputModel {
} }
} }
if (x != 0 || y != 0) { if (x != 0 || y != 0) {
if (peerPlatform == kPeerPlatformAndroid) {
handlePointerEvent('touch', 'pan_move', e.delta);
} else {
bind.sessionSendMouse( bind.sessionSendMouse(
sessionId: sessionId, sessionId: sessionId,
msg: '{"type": "trackpad", "x": "$x", "y": "$y"}'); msg: '{"type": "trackpad", "x": "$x", "y": "$y"}');
} }
} }
}
void _scheduleFling(double x, double y, int delay) { void _scheduleFling(double x, double y, int delay) {
if ((x == 0 && y == 0) || _stopFling) { if ((x == 0 && y == 0) || _stopFling) {
@ -430,6 +440,11 @@ class InputModel {
} }
void onPointerPanZoomEnd(PointerPanZoomEndEvent e) { void onPointerPanZoomEnd(PointerPanZoomEndEvent e) {
if (peerPlatform == kPeerPlatformAndroid) {
handlePointerEvent('touch', 'pan_end', e.position);
return;
}
bind.sessionSendPointer( bind.sessionSendPointer(
sessionId: sessionId, sessionId: sessionId,
msg: json.encode({ msg: json.encode({
@ -541,23 +556,39 @@ class InputModel {
return Offset(x, y); return Offset(x, y);
} }
void handlePointerEvent(String kind, String type, PointerEvent e) { void handlePointerEvent(String kind, String type, Offset offset) {
if (checkPeerControlProtected(e.position.dx, max(0.0, e.position.dy))) { double x = offset.dx;
double y = max(0.0, offset.dy);
if (_checkPeerControlProtected(x, y)) {
return; return;
} }
// Only touch events are handled for now. So we can just ignore buttons. // Only touch events are handled for now. So we can just ignore buttons.
// to-do: handle mouse events // to-do: handle mouse events
bind.sessionSendPointer(
sessionId: sessionId, final isMoveTypes = ['pan', 'pan_start', 'pan_end'];
msg: json.encode({ final pos = handlePointerDevicePos(
modify({ x,
kind: {type: e.position.toString()} y,
}) isMoveTypes.contains(type),
}), type,
); );
if (pos == null) {
return;
} }
bool checkPeerControlProtected(double x, double y) { final evt = {
kind: {
type: {
'x': '${pos.x}',
'y': '${pos.y}',
}
}
};
bind.sessionSendPointer(
sessionId: sessionId, msg: json.encode({modify(evt)}));
}
bool _checkPeerControlProtected(double x, double y) {
final cursorModel = parent.target!.cursorModel; final cursorModel = parent.target!.cursorModel;
if (cursorModel.isPeerControlProtected) { if (cursorModel.isPeerControlProtected) {
lastMousePos = ui.Offset(x, y); lastMousePos = ui.Offset(x, y);
@ -586,7 +617,7 @@ class InputModel {
}) { }) {
double x = offset.dx; double x = offset.dx;
double y = max(0.0, offset.dy); double y = max(0.0, offset.dy);
if (checkPeerControlProtected(x, y)) { if (_checkPeerControlProtected(x, y)) {
return; return;
} }