fix: mobile, cursor mode, don't reset canvas (#9843)
Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
		
							parent
							
								
									78088360ca
								
							
						
					
					
						commit
						faf97c770c
					
				| @ -542,7 +542,9 @@ class _RemotePageState extends State<RemotePage> with WidgetsBindingObserver { | |||||||
|               right: 10, |               right: 10, | ||||||
|               child: QualityMonitor(gFFI.qualityMonitorModel), |               child: QualityMonitor(gFFI.qualityMonitorModel), | ||||||
|             ), |             ), | ||||||
|             KeyHelpTools(requestShow: (keyboardIsVisible || _showGestureHelp)), |             KeyHelpTools( | ||||||
|  |                 keyboardIsVisible: keyboardIsVisible, | ||||||
|  |                 showGestureHelp: _showGestureHelp), | ||||||
|             SizedBox( |             SizedBox( | ||||||
|               width: 0, |               width: 0, | ||||||
|               height: 0, |               height: 0, | ||||||
| @ -771,10 +773,14 @@ class _RemotePageState extends State<RemotePage> with WidgetsBindingObserver { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| class KeyHelpTools extends StatefulWidget { | class KeyHelpTools extends StatefulWidget { | ||||||
|   /// need to show by external request, etc [keyboardIsVisible] or [changeTouchMode] |   final bool keyboardIsVisible; | ||||||
|   final bool requestShow; |   final bool showGestureHelp; | ||||||
| 
 | 
 | ||||||
|   KeyHelpTools({required this.requestShow}); |   /// need to show by external request, etc [keyboardIsVisible] or [changeTouchMode] | ||||||
|  |   bool get requestShow => keyboardIsVisible || showGestureHelp; | ||||||
|  | 
 | ||||||
|  |   KeyHelpTools( | ||||||
|  |       {required this.keyboardIsVisible, required this.showGestureHelp}); | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   State<KeyHelpTools> createState() => _KeyHelpToolsState(); |   State<KeyHelpTools> createState() => _KeyHelpToolsState(); | ||||||
| @ -819,7 +825,8 @@ class _KeyHelpToolsState extends State<KeyHelpTools> { | |||||||
|       final size = renderObject.size; |       final size = renderObject.size; | ||||||
|       Offset pos = renderObject.localToGlobal(Offset.zero); |       Offset pos = renderObject.localToGlobal(Offset.zero); | ||||||
|       gFFI.cursorModel.keyHelpToolsVisibilityChanged( |       gFFI.cursorModel.keyHelpToolsVisibilityChanged( | ||||||
|           Rect.fromLTWH(pos.dx, pos.dy, size.width, size.height)); |           Rect.fromLTWH(pos.dx, pos.dy, size.width, size.height), | ||||||
|  |           widget.keyboardIsVisible); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -831,7 +838,8 @@ class _KeyHelpToolsState extends State<KeyHelpTools> { | |||||||
|         inputModel.command; |         inputModel.command; | ||||||
| 
 | 
 | ||||||
|     if (!_pin && !hasModifierOn && !widget.requestShow) { |     if (!_pin && !hasModifierOn && !widget.requestShow) { | ||||||
|       gFFI.cursorModel.keyHelpToolsVisibilityChanged(null); |       gFFI.cursorModel | ||||||
|  |           .keyHelpToolsVisibilityChanged(null, widget.keyboardIsVisible); | ||||||
|       return Offstage(); |       return Offstage(); | ||||||
|     } |     } | ||||||
|     final size = MediaQuery.of(context).size; |     final size = MediaQuery.of(context).size; | ||||||
|  | |||||||
| @ -1515,12 +1515,8 @@ class CanvasModel with ChangeNotifier { | |||||||
|     if (kIgnoreDpi && style == kRemoteViewStyleOriginal) { |     if (kIgnoreDpi && style == kRemoteViewStyleOriginal) { | ||||||
|       _scale = 1.0 / _devicePixelRatio; |       _scale = 1.0 / _devicePixelRatio; | ||||||
|     } |     } | ||||||
|     _x = (size.width - displayWidth * _scale) / 2; |     _resetCanvasOffset(displayWidth, displayHeight); | ||||||
|     _y = (size.height - displayHeight * _scale) / 2; |  | ||||||
|     _imageOverflow.value = _x < 0 || y < 0; |     _imageOverflow.value = _x < 0 || y < 0; | ||||||
|     if (isMobile && style == kRemoteViewStyleOriginal) { |  | ||||||
|       _moveToCenterCursor(); |  | ||||||
|     } |  | ||||||
|     if (notify) { |     if (notify) { | ||||||
|       notifyListeners(); |       notifyListeners(); | ||||||
|     } |     } | ||||||
| @ -1530,6 +1526,14 @@ class CanvasModel with ChangeNotifier { | |||||||
|     tryUpdateScrollStyle(Duration.zero, style); |     tryUpdateScrollStyle(Duration.zero, style); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   _resetCanvasOffset(int displayWidth, int displayHeight) { | ||||||
|  |     _x = (size.width - displayWidth * _scale) / 2; | ||||||
|  |     _y = (size.height - displayHeight * _scale) / 2; | ||||||
|  |     if (isMobile && _lastViewStyle.style == kRemoteViewStyleOriginal) { | ||||||
|  |       _moveToCenterCursor(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   tryUpdateScrollStyle(Duration duration, String? style) async { |   tryUpdateScrollStyle(Duration duration, String? style) async { | ||||||
|     if (_scrollStyle != ScrollStyle.scrollbar) return; |     if (_scrollStyle != ScrollStyle.scrollbar) return; | ||||||
|     style ??= await bind.sessionGetViewStyle(sessionId: sessionId); |     style ??= await bind.sessionGetViewStyle(sessionId: sessionId); | ||||||
| @ -1640,8 +1644,7 @@ class CanvasModel with ChangeNotifier { | |||||||
|     if (isWebDesktop) { |     if (isWebDesktop) { | ||||||
|       updateViewStyle(); |       updateViewStyle(); | ||||||
|     } else { |     } else { | ||||||
|       _x = (size.width - getDisplayWidth() * _scale) / 2; |       _resetCanvasOffset(getDisplayWidth(), getDisplayHeight()); | ||||||
|       _y = (size.height - getDisplayHeight() * _scale) / 2; |  | ||||||
|     } |     } | ||||||
|     notifyListeners(); |     notifyListeners(); | ||||||
|   } |   } | ||||||
| @ -1677,10 +1680,7 @@ class CanvasModel with ChangeNotifier { | |||||||
|     if (kIgnoreDpi && _lastViewStyle.style == kRemoteViewStyleOriginal) { |     if (kIgnoreDpi && _lastViewStyle.style == kRemoteViewStyleOriginal) { | ||||||
|       _scale = 1.0 / _devicePixelRatio; |       _scale = 1.0 / _devicePixelRatio; | ||||||
|     } |     } | ||||||
|     final displayWidth = getDisplayWidth(); |     _resetCanvasOffset(getDisplayWidth(), getDisplayHeight()); | ||||||
|     final displayHeight = getDisplayHeight(); |  | ||||||
|     _x = (size.width - displayWidth * _scale) / 2; |  | ||||||
|     _y = (size.height - displayHeight * _scale) / 2; |  | ||||||
|     bind.sessionSetViewStyle(sessionId: sessionId, value: _lastViewStyle.style); |     bind.sessionSetViewStyle(sessionId: sessionId, value: _lastViewStyle.style); | ||||||
|     notifyListeners(); |     notifyListeners(); | ||||||
|   } |   } | ||||||
| @ -1937,9 +1937,10 @@ class CursorModel with ChangeNotifier { | |||||||
|   // `lastIsBlocked` is only used in common/widgets/remote_input.dart -> _RawTouchGestureDetectorRegionState -> onDoubleTap() |   // `lastIsBlocked` is only used in common/widgets/remote_input.dart -> _RawTouchGestureDetectorRegionState -> onDoubleTap() | ||||||
|   // Because onDoubleTap() doesn't have the `event` parameter, we can't get the touch event's position. |   // Because onDoubleTap() doesn't have the `event` parameter, we can't get the touch event's position. | ||||||
|   bool _lastIsBlocked = false; |   bool _lastIsBlocked = false; | ||||||
|  |   bool _lastKeyboardIsVisible = false; | ||||||
| 
 | 
 | ||||||
|   Rect? get keyHelpToolsRect => _keyHelpToolsRect; |   Rect? get keyHelpToolsRect => _keyHelpToolsRect; | ||||||
|   keyHelpToolsVisibilityChanged(Rect? r) { |   keyHelpToolsVisibilityChanged(Rect? r, bool keyboardIsVisible) { | ||||||
|     _keyHelpToolsRect = r; |     _keyHelpToolsRect = r; | ||||||
|     if (r == null) { |     if (r == null) { | ||||||
|       _lastIsBlocked = false; |       _lastIsBlocked = false; | ||||||
| @ -1949,11 +1950,10 @@ class CursorModel with ChangeNotifier { | |||||||
|       // `lastIsBlocked` will be set when the cursor is moving or touch somewhere else. |       // `lastIsBlocked` will be set when the cursor is moving or touch somewhere else. | ||||||
|       _lastIsBlocked = true; |       _lastIsBlocked = true; | ||||||
|     } |     } | ||||||
|     if (isMobile) { |     if (isMobile && _lastKeyboardIsVisible != keyboardIsVisible) { | ||||||
|       if (r != null || _lastIsBlocked) { |  | ||||||
|       parent.target?.canvasModel.mobileFocusCanvasCursor(); |       parent.target?.canvasModel.mobileFocusCanvasCursor(); | ||||||
|     } |     } | ||||||
|     } |     _lastKeyboardIsVisible = keyboardIsVisible; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   get lastIsBlocked => _lastIsBlocked; |   get lastIsBlocked => _lastIsBlocked; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user