Răsfoiți Sursa

feat: report secondary and tertiary taps as right and middle mouse buttons

Georg Wechslberger 3 ani în urmă
părinte
comite
c643d00b66

+ 9 - 1
lib/src/ui/gesture/gesture_detector.dart

@@ -12,6 +12,8 @@ class TerminalGestureDetector extends StatefulWidget {
     this.onTapDown,
     this.onTapDown,
     this.onSecondaryTapDown,
     this.onSecondaryTapDown,
     this.onSecondaryTapUp,
     this.onSecondaryTapUp,
+    this.onTertiaryTapDown,
+    this.onTertiaryTapUp,
     this.onLongPressStart,
     this.onLongPressStart,
     this.onLongPressMoveUpdate,
     this.onLongPressMoveUpdate,
     this.onLongPressUp,
     this.onLongPressUp,
@@ -34,6 +36,10 @@ class TerminalGestureDetector extends StatefulWidget {
 
 
   final GestureTapDownCallback? onDoubleTapDown;
   final GestureTapDownCallback? onDoubleTapDown;
 
 
+  final GestureTapDownCallback? onTertiaryTapDown;
+
+  final GestureTapUpCallback? onTertiaryTapUp;
+
   final GestureLongPressStartCallback? onLongPressStart;
   final GestureLongPressStartCallback? onLongPressStart;
 
 
   final GestureLongPressMoveUpdateCallback? onLongPressMoveUpdate;
   final GestureLongPressMoveUpdateCallback? onLongPressMoveUpdate;
@@ -110,7 +116,9 @@ class _TerminalGestureDetectorState extends State<TerminalGestureDetector> {
           ..onTapDown = _handleTapDown
           ..onTapDown = _handleTapDown
           ..onTapUp = _handleTapUp
           ..onTapUp = _handleTapUp
           ..onSecondaryTapDown = widget.onSecondaryTapDown
           ..onSecondaryTapDown = widget.onSecondaryTapDown
-          ..onSecondaryTapUp = widget.onSecondaryTapUp;
+          ..onSecondaryTapUp = widget.onSecondaryTapUp
+          ..onTertiaryTapDown = widget.onTertiaryTapDown
+          ..onTertiaryTapUp = widget.onTertiaryTapUp;
       },
       },
     );
     );
 
 

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

@@ -16,6 +16,8 @@ class TerminalGestureHandler extends StatefulWidget {
     this.onTapDown,
     this.onTapDown,
     this.onSecondaryTapDown,
     this.onSecondaryTapDown,
     this.onSecondaryTapUp,
     this.onSecondaryTapUp,
+    this.onTertiaryTapDown,
+    this.onTertiaryTapUp,
   });
   });
 
 
   final TerminalViewState terminalView;
   final TerminalViewState terminalView;
@@ -32,6 +34,10 @@ class TerminalGestureHandler extends StatefulWidget {
 
 
   final GestureTapUpCallback? onSecondaryTapUp;
   final GestureTapUpCallback? onSecondaryTapUp;
 
 
+  final GestureTapDownCallback? onTertiaryTapDown;
+
+  final GestureTapUpCallback? onTertiaryTapUp;
+
   @override
   @override
   State<TerminalGestureHandler> createState() => _TerminalGestureHandlerState();
   State<TerminalGestureHandler> createState() => _TerminalGestureHandlerState();
 }
 }
@@ -52,8 +58,10 @@ class _TerminalGestureHandlerState extends State<TerminalGestureHandler> {
       onTapUp: widget.onTapUp,
       onTapUp: widget.onTapUp,
       onSingleTapUp: onSingleTapUp,
       onSingleTapUp: onSingleTapUp,
       onTapDown: onTapDown,
       onTapDown: onTapDown,
-      onSecondaryTapDown: widget.onSecondaryTapDown,
-      onSecondaryTapUp: widget.onSecondaryTapUp,
+      onSecondaryTapDown: onSecondaryTapDown,
+      onSecondaryTapUp: onSecondaryTapUp,
+      onTertiaryTapDown: onSecondaryTapDown,
+      onTertiaryTapUp: onSecondaryTapUp,
       onLongPressStart: onLongPressStart,
       onLongPressStart: onLongPressStart,
       onLongPressMoveUpdate: onLongPressMoveUpdate,
       onLongPressMoveUpdate: onLongPressMoveUpdate,
       // onLongPressUp: onLongPressUp,
       // onLongPressUp: onLongPressUp,
@@ -81,6 +89,42 @@ class _TerminalGestureHandlerState extends State<TerminalGestureHandler> {
     );
     );
   }
   }
 
 
+  void onSecondaryTapDown(TapDownDetails details) {
+    widget.onSecondaryTapDown?.call(details);
+    renderTerminal.mouseEvent(
+      TerminalMouseButton.right,
+      TerminalMouseButtonState.down,
+      details.localPosition,
+    );
+  }
+
+  void onSecondaryTapUp(TapUpDetails details) {
+    widget.onSecondaryTapUp?.call(details);
+    renderTerminal.mouseEvent(
+      TerminalMouseButton.right,
+      TerminalMouseButtonState.up,
+      details.localPosition,
+    );
+  }
+
+  void onTertiaryTapDown(TapDownDetails details) {
+    widget.onTertiaryTapDown?.call(details);
+    renderTerminal.mouseEvent(
+      TerminalMouseButton.middle,
+      TerminalMouseButtonState.down,
+      details.localPosition,
+    );
+  }
+
+  void onTertiaryTapUp(TapUpDetails details) {
+    widget.onTertiaryTapUp?.call(details);
+    renderTerminal.mouseEvent(
+      TerminalMouseButton.middle,
+      TerminalMouseButtonState.up,
+      details.localPosition,
+    );
+  }
+
   void onDoubleTapDown(TapDownDetails details) {
   void onDoubleTapDown(TapDownDetails details) {
     renderTerminal.selectWord(details.localPosition);
     renderTerminal.selectWord(details.localPosition);
   }
   }