Bladeren bron

feat: tap events trigger a left mouse click on the terminal

Georg Wechslberger 3 jaren geleden
bovenliggende
commit
a6e3677eb7
2 gewijzigde bestanden met toevoegingen van 34 en 2 verwijderingen
  1. 22 2
      lib/src/ui/gesture/gesture_handler.dart
  2. 12 0
      lib/src/ui/render.dart

+ 22 - 2
lib/src/ui/gesture/gesture_handler.dart

@@ -1,5 +1,7 @@
 import 'package:flutter/gestures.dart';
 import 'package:flutter/widgets.dart';
+import 'package:xterm/src/core/mouse/button.dart';
+import 'package:xterm/src/core/mouse/button_state.dart';
 import 'package:xterm/src/terminal_view.dart';
 import 'package:xterm/src/ui/gesture/gesture_detector.dart';
 import 'package:xterm/src/ui/render.dart';
@@ -48,8 +50,8 @@ class _TerminalGestureHandlerState extends State<TerminalGestureHandler> {
     return TerminalGestureDetector(
       child: widget.child,
       onTapUp: widget.onTapUp,
-      onSingleTapUp: widget.onSingleTapUp,
-      onTapDown: widget.onTapDown,
+      onSingleTapUp: onSingleTapUp,
+      onTapDown: onTapDown,
       onSecondaryTapDown: widget.onSecondaryTapDown,
       onSecondaryTapUp: widget.onSecondaryTapUp,
       onLongPressStart: onLongPressStart,
@@ -61,6 +63,24 @@ class _TerminalGestureHandlerState extends State<TerminalGestureHandler> {
     );
   }
 
+  void onTapDown(TapDownDetails details) {
+    widget.onTapDown?.call(details);
+    renderTerminal.mouseEvent(
+      TerminalMouseButton.left,
+      TerminalMouseButtonState.down,
+      details.localPosition,
+    );
+  }
+
+  void onSingleTapUp(TapUpDetails details) {
+    widget.onSingleTapUp?.call(details);
+    renderTerminal.mouseEvent(
+      TerminalMouseButton.left,
+      TerminalMouseButtonState.up,
+      details.localPosition,
+    );
+  }
+
   void onDoubleTapDown(TapDownDetails details) {
     renderTerminal.selectWord(details.localPosition);
   }

+ 12 - 0
lib/src/ui/render.dart

@@ -10,6 +10,8 @@ import 'package:xterm/src/core/buffer/cell_offset.dart';
 import 'package:xterm/src/core/buffer/range.dart';
 import 'package:xterm/src/core/cell.dart';
 import 'package:xterm/src/core/buffer/line.dart';
+import 'package:xterm/src/core/mouse/button.dart';
+import 'package:xterm/src/core/mouse/button_state.dart';
 import 'package:xterm/src/terminal.dart';
 import 'package:xterm/src/ui/char_metrics.dart';
 import 'package:xterm/src/ui/controller.dart';
@@ -291,6 +293,16 @@ class RenderTerminal extends RenderBox with RelayoutWhenSystemFontsChangeMixin {
     }
   }
 
+  /// Send a mouse event at [offset] with [button] being currently in [buttonState].
+  void mouseEvent(
+    TerminalMouseButton button,
+    TerminalMouseButtonState buttonState,
+    Offset offset,
+  ) {
+    final position = getCellOffset(offset);
+    _terminal.mouseInput(button, buttonState, position);
+  }
+
   void _notifyEditableRect() {
     final cursor = localToGlobal(_cursorOffset);