From 1aac04301b67f7bcef72d78a808f5065037cd919 Mon Sep 17 00:00:00 2001 From: bangae1 Date: Sun, 17 Aug 2025 21:12:08 +0900 Subject: [PATCH] =?UTF-8?q?f11=20=EC=A0=84=EC=B2=B4=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...remote_frame_buffer_Listener_detector.dart | 79 +++++++++++++- .../remote_frame_buffer_mouse_detector.dart | 101 ------------------ lib/rfb/remote_frame_buffer_widget.dart | 2 + 3 files changed, 80 insertions(+), 102 deletions(-) delete mode 100644 lib/rfb/remote_frame_buffer_mouse_detector.dart diff --git a/lib/rfb/remote_frame_buffer_Listener_detector.dart b/lib/rfb/remote_frame_buffer_Listener_detector.dart index 3a168cb..a127828 100644 --- a/lib/rfb/remote_frame_buffer_Listener_detector.dart +++ b/lib/rfb/remote_frame_buffer_Listener_detector.dart @@ -8,13 +8,90 @@ import 'remote_frame_buffer_isolate_messages.dart'; import 'package:fpdart/fpdart.dart'; class RemoteFrameBufferListenerDetector extends Listener { + final Image _image; + final Size _remoteFrameBufferWidgetSize; final Option _sendPort; RemoteFrameBufferListenerDetector({ super.key, + required final Image image, + required final Size remoteFrameBufferWidgetSize, required final Option sendPort, super.child, - }) : _sendPort = sendPort; + }) : _image = image, + _remoteFrameBufferWidgetSize = remoteFrameBufferWidgetSize, + _sendPort = sendPort; + + int oldX = 0; + int oldY = 0; + PointerDownEventListener? get onPointerDown => + (final PointerDownEvent details) => _sendPort.match( + () {}, + (final SendPort sendPort) { + int dx = (details.localPosition.dx / + _remoteFrameBufferWidgetSize.width * + _image.width) + .toInt(); + int dy = (details.localPosition.dy / + _remoteFrameBufferWidgetSize.height * + _image.height) + .toInt(); + sendPort.send( + RemoteFrameBufferIsolateSendMessage.pointerEvent( + button1Down: true, + button2Down: false, + button3Down: false, + button4Down: false, + button5Down: false, + button6Down: false, + button7Down: false, + button8Down: false, + x: dx, + y: dy, + ), + ); + + oldX = dx; + oldY = dy; + } + ); + + PointerUpEventListener? get onPointerUp => + (final PointerUpEvent details) => _sendPort.match( + () {}, + (final SendPort sendPort) { + int dx = (details.localPosition.dx / + _remoteFrameBufferWidgetSize.width * + _image.width) + .toInt(); + int dy = (details.localPosition.dy / + _remoteFrameBufferWidgetSize.height * + _image.height) + .toInt(); + int diffX = oldX - dx; + int diffY = oldY - dy; + if(diffX > 5 && diffY > 5) { + dx = oldX; + dy = oldY; + } + sendPort.send( + RemoteFrameBufferIsolateSendMessage.pointerEvent( + button1Down: false, + button2Down: false, + button3Down: false, + button4Down: false, + button5Down: false, + button6Down: false, + button7Down: false, + button8Down: false, + x: dx, + y: dy, + ), + ); + oldX = 0; + oldY = 0; + } + ); @override PointerSignalEventListener? get onPointerSignal => diff --git a/lib/rfb/remote_frame_buffer_mouse_detector.dart b/lib/rfb/remote_frame_buffer_mouse_detector.dart deleted file mode 100644 index a3cd8fe..0000000 --- a/lib/rfb/remote_frame_buffer_mouse_detector.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'dart:isolate'; -import 'dart:ui'; - -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart' hide Image; -import 'remote_frame_buffer_isolate_messages.dart'; -import 'package:fpdart/fpdart.dart'; - -class RemoteFrameBufferMouseDetector extends MouseRegion { - final Image _image; - final Size _remoteFrameBufferWidgetSize; - final Option _sendPort; - - RemoteFrameBufferMouseDetector({ - super.key, - required final Image image, - required final Size remoteFrameBufferWidgetSize, - required final Option sendPort, - super.child, - }) : _image = image, - _remoteFrameBufferWidgetSize = remoteFrameBufferWidgetSize, - _sendPort = sendPort; - - // @override - // PointerHoverEventListener? get onHover => - // (final PointerEvent details) => _sendPort.match( - // () {}, - // (final SendPort sendPort) => sendPort.send( - // RemoteFrameBufferIsolateSendMessage.pointerEvent( - // button1Down: false, - // button2Down: false, - // button3Down: false, - // button4Down: false, - // button5Down: false, - // button6Down: false, - // button7Down: false, - // button8Down: false, - // x: (details.localPosition.dx / - // _remoteFrameBufferWidgetSize.width * - // _image.width) - // .toInt(), - // y: (details.localPosition.dy / - // _remoteFrameBufferWidgetSize.height * - // _image.height) - // .toInt(), - // ), - // ), - // ); - - @override - PointerEnterEventListener? get onEnter => - (final PointerEnterEvent details) => _sendPort.match( - () {}, - (final SendPort sendPort) => sendPort.send( - RemoteFrameBufferIsolateSendMessage.pointerEvent( - button1Down: true, - button2Down: false, - button3Down: false, - button4Down: false, - button5Down: false, - button6Down: false, - button7Down: false, - button8Down: false, - x: (details.localPosition.dx / - _remoteFrameBufferWidgetSize.width * - _image.width) - .toInt(), - y: (details.localPosition.dy / - _remoteFrameBufferWidgetSize.height * - _image.height) - .toInt(), - ), - ), - ); - - @override - PointerExitEventListener? get onExit => - (final PointerExitEvent details) => _sendPort.match( - () {}, - (final SendPort sendPort) => sendPort.send( - RemoteFrameBufferIsolateSendMessage.pointerEvent( - button1Down: false, - button2Down: false, - button3Down: false, - button4Down: false, - button5Down: false, - button6Down: false, - button7Down: false, - button8Down: false, - x: (details.localPosition.dx / - _remoteFrameBufferWidgetSize.width * - _image.width) - .toInt(), - y: (details.localPosition.dy / - _remoteFrameBufferWidgetSize.height * - _image.height) - .toInt(), - ), - ), - ); -} diff --git a/lib/rfb/remote_frame_buffer_widget.dart b/lib/rfb/remote_frame_buffer_widget.dart index e239fed..1e82546 100644 --- a/lib/rfb/remote_frame_buffer_widget.dart +++ b/lib/rfb/remote_frame_buffer_widget.dart @@ -141,6 +141,8 @@ class RemoteFrameBufferWidgetState extends State { SizeTrackingWidget( sizeValueNotifier: _sizeValueNotifier, child: RemoteFrameBufferListenerDetector( + image: image, + remoteFrameBufferWidgetSize: MediaQuery.of(context).size, sendPort: _isolateSendPort, child: RemoteFrameBufferGestureDetector( image: image,