| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import 'package:flutter/gestures.dart';
- import 'package:flutter/widgets.dart';
- import 'package:xterm/ui/terminal_view.dart';
- import 'package:xterm/ui/gesture/gesture_detector.dart';
- import 'package:xterm/ui/render.dart';
- class TerminalGestureHandler extends StatefulWidget {
- const TerminalGestureHandler({
- super.key,
- required this.terminalView,
- this.child,
- this.onTapUp,
- this.onSingleTapUp,
- this.onTapDown,
- this.onSecondaryTapDown,
- });
- final TerminalViewState terminalView;
- final Widget? child;
- final GestureTapUpCallback? onTapUp;
- final GestureTapUpCallback? onSingleTapUp;
- final GestureTapDownCallback? onTapDown;
- final GestureTapDownCallback? onSecondaryTapDown;
- @override
- State<TerminalGestureHandler> createState() => _TerminalGestureHandlerState();
- }
- class _TerminalGestureHandlerState extends State<TerminalGestureHandler> {
- TerminalViewState get terminalView => widget.terminalView;
- RenderTerminal get renderTerminal => terminalView.renderTerminal;
- DragStartDetails? _lastDragStartDetails;
- LongPressStartDetails? _lastLongPressStartDetails;
- @override
- Widget build(BuildContext context) {
- return TerminalGestureDetector(
- child: widget.child,
- onTapUp: widget.onTapUp,
- onSingleTapUp: widget.onSingleTapUp,
- onTapDown: widget.onTapDown,
- onSecondaryTapDown: widget.onSecondaryTapDown,
- onLongPressStart: onLongPressStart,
- onLongPressMoveUpdate: onLongPressMoveUpdate,
- // onLongPressUp: onLongPressUp,
- onDragStart: onDragStart,
- onDragUpdate: onDragUpdate,
- onDoubleTapDown: onDoubleTapDown,
- );
- }
- void onDoubleTapDown(TapDownDetails details) {
- renderTerminal.selectWord(
- details.globalPosition,
- );
- }
- void onLongPressStart(LongPressStartDetails details) {
- _lastLongPressStartDetails = details;
- renderTerminal.selectWord(details.globalPosition);
- }
- void onLongPressMoveUpdate(LongPressMoveUpdateDetails details) {
- renderTerminal.selectWord(
- _lastLongPressStartDetails!.globalPosition,
- details.globalPosition,
- );
- }
- // void onLongPressUp() {}
- void onDragStart(DragStartDetails details) {
- _lastDragStartDetails = details;
- details.kind == PointerDeviceKind.mouse
- ? renderTerminal.selectPosition(details.globalPosition)
- : renderTerminal.selectWord(details.globalPosition);
- }
- void onDragUpdate(DragUpdateDetails details) {
- renderTerminal.selectPosition(
- _lastDragStartDetails!.globalPosition,
- details.globalPosition,
- );
- }
- }
|