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,21 +334,26 @@ 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) {
final scale = ((e.scale - _lastScale) * 1000).toInt(); if (peerPlatform != kPeerPlatformAndroid) {
_lastScale = e.scale; final scale = ((e.scale - _lastScale) * 1000).toInt();
_lastScale = e.scale;
if (scale != 0) { if (scale != 0) {
bind.sessionSendPointer( bind.sessionSendPointer(
sessionId: sessionId, sessionId: sessionId,
msg: json.encode({ msg: json.encode({
'touch': {'scale': scale} 'touch': {'scale': scale}
})); }));
return; return;
}
} }
final delta = e.panDelta; final delta = e.panDelta;
@ -356,7 +361,8 @@ class InputModel {
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,9 +378,13 @@ class InputModel {
} }
} }
if (x != 0 || y != 0) { if (x != 0 || y != 0) {
bind.sessionSendMouse( if (peerPlatform == kPeerPlatformAndroid) {
sessionId: sessionId, handlePointerEvent('touch', 'pan_move', e.delta);
msg: '{"type": "trackpad", "x": "$x", "y": "$y"}'); } else {
bind.sessionSendMouse(
sessionId: sessionId,
msg: '{"type": "trackpad", "x": "$x", "y": "$y"}');
}
} }
} }
@ -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;
}
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) { 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;
} }