f11 전체 화면 추가

This commit is contained in:
2025-08-17 21:12:08 +09:00
parent b05c778fcc
commit 1aac04301b
3 changed files with 80 additions and 102 deletions

View File

@@ -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> _sendPort;
RemoteFrameBufferListenerDetector({
super.key,
required final Image image,
required final Size remoteFrameBufferWidgetSize,
required final Option<SendPort> 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 =>

View File

@@ -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> _sendPort;
RemoteFrameBufferMouseDetector({
super.key,
required final Image image,
required final Size remoteFrameBufferWidgetSize,
required final Option<SendPort> 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(),
),
),
);
}

View File

@@ -141,6 +141,8 @@ class RemoteFrameBufferWidgetState extends State<RemoteFrameBufferWidget> {
SizeTrackingWidget(
sizeValueNotifier: _sizeValueNotifier,
child: RemoteFrameBufferListenerDetector(
image: image,
remoteFrameBufferWidgetSize: MediaQuery.of(context).size,
sendPort: _isolateSendPort,
child: RemoteFrameBufferGestureDetector(
image: image,