| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import 'package:xterm/src/core/buffer/cell_offset.dart';
- import 'package:xterm/src/core/mouse/mode.dart';
- import 'package:xterm/src/core/mouse/button.dart';
- import 'package:xterm/src/core/mouse/reporter.dart';
- import 'package:xterm/src/utils/platform.dart';
- import 'package:xterm/src/core/state.dart';
- import 'button_state.dart';
- class TerminalMouseEvent {
- /// The button that is pressed or released.
- final TerminalMouseButton button;
- /// The current state of the button.
- final TerminalMouseButtonState buttonState;
- /// The position of button state change.
- final CellOffset position;
- /// The state of the terminal.
- final TerminalState state;
- /// The platform of the terminal.
- final TerminalTargetPlatform platform;
- TerminalMouseEvent({
- required this.button,
- required this.buttonState,
- required this.position,
- required this.state,
- required this.platform,
- });
- }
- const defaultMouseHandler = CascadeMouseHandler([
- ClickMouseHandler(),
- UpDownMouseHandler(),
- ]);
- abstract class TerminalMouseHandler {
- const TerminalMouseHandler();
- String? call(TerminalMouseEvent event);
- }
- class CascadeMouseHandler implements TerminalMouseHandler {
- final List<TerminalMouseHandler> _handlers;
- const CascadeMouseHandler(this._handlers);
- @override
- String? call(TerminalMouseEvent event) {
- for (var handler in _handlers) {
- final result = handler(event);
- if (result != null) {
- return result;
- }
- }
- return null;
- }
- }
- class ClickMouseHandler implements TerminalMouseHandler {
- const ClickMouseHandler();
- @override
- String? call(TerminalMouseEvent event) {
- switch (event.state.mouseMode) {
- case MouseMode.clickOnly:
- // Only clicks and only the first 3 buttons are reported.
- if (event.buttonState == TerminalMouseButtonState.down &&
- (event.button.id < 3)) {
- return MouseReporter.report(
- event.button,
- event.buttonState,
- event.position,
- event.state.mouseReportMode,
- );
- }
- return null;
- case MouseMode.none:
- case MouseMode.upDownScroll:
- case MouseMode.upDownScrollDrag:
- case MouseMode.upDownScrollMove:
- return null;
- }
- }
- }
- class UpDownMouseHandler implements TerminalMouseHandler {
- const UpDownMouseHandler();
- @override
- String? call(TerminalMouseEvent event) {
- switch (event.state.mouseMode) {
- case MouseMode.none:
- case MouseMode.clickOnly:
- return null;
- case MouseMode.upDownScroll:
- case MouseMode.upDownScrollDrag:
- case MouseMode.upDownScrollMove:
- return MouseReporter.report(
- event.button,
- event.buttonState,
- event.position,
- event.state.mouseReportMode,
- );
- }
- }
- }
|