mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-12-13 19:47:17 +00:00
flutter_desktop: fix resize scale && Pin peer menu bar
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
@@ -25,11 +25,13 @@ class _MenubarTheme {
|
||||
class RemoteMenubar extends StatefulWidget {
|
||||
final String id;
|
||||
final FFI ffi;
|
||||
final List<Function(bool)> onEnterOrLeaveImage;
|
||||
|
||||
const RemoteMenubar({
|
||||
Key? key,
|
||||
required this.id,
|
||||
required this.ffi,
|
||||
required this.onEnterOrLeaveImage,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
@@ -39,12 +41,38 @@ class RemoteMenubar extends StatefulWidget {
|
||||
class _RemoteMenubarState extends State<RemoteMenubar> {
|
||||
final RxBool _show = false.obs;
|
||||
final Rx<Color> _hideColor = Colors.white12.obs;
|
||||
final _rxHideReplay = rxdart.ReplaySubject<int>();
|
||||
final _pinMenubar = false.obs;
|
||||
bool _isCursorOverImage = false;
|
||||
|
||||
bool get isFullscreen => Get.find<RxBool>(tag: 'fullscreen').isTrue;
|
||||
void setFullscreen(bool v) {
|
||||
void _setFullscreen(bool v) {
|
||||
Get.find<RxBool>(tag: 'fullscreen').value = v;
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
widget.onEnterOrLeaveImage.add((enter) {
|
||||
if (enter) {
|
||||
_rxHideReplay.add(0);
|
||||
_isCursorOverImage = true;
|
||||
} else {
|
||||
_isCursorOverImage = false;
|
||||
}
|
||||
});
|
||||
|
||||
_rxHideReplay
|
||||
.throttleTime(const Duration(milliseconds: 5000),
|
||||
trailing: true, leading: false)
|
||||
.listen((int v) {
|
||||
if (_pinMenubar.isFalse && _show.isTrue && _isCursorOverImage) {
|
||||
_show.value = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Align(
|
||||
@@ -76,6 +104,7 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
|
||||
Widget _buildMenubar(BuildContext context) {
|
||||
final List<Widget> menubarItems = [];
|
||||
if (!isWebDesktop) {
|
||||
menubarItems.add(_buildPinMenubar(context));
|
||||
menubarItems.add(_buildFullscreen(context));
|
||||
if (widget.ffi.ffiModel.isPeerAndroid) {
|
||||
menubarItems.add(IconButton(
|
||||
@@ -111,11 +140,24 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
|
||||
]));
|
||||
}
|
||||
|
||||
Widget _buildPinMenubar(BuildContext context) {
|
||||
return IconButton(
|
||||
tooltip: translate('Pin menubar'),
|
||||
onPressed: () {
|
||||
_pinMenubar.value = !_pinMenubar.value;
|
||||
},
|
||||
icon: Obx(() => Icon(
|
||||
Icons.push_pin,
|
||||
color: _pinMenubar.isTrue ? _MenubarTheme.commonColor : Colors.grey,
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildFullscreen(BuildContext context) {
|
||||
return IconButton(
|
||||
tooltip: translate(isFullscreen ? 'Exit Fullscreen' : 'Fullscreen'),
|
||||
onPressed: () {
|
||||
setFullscreen(!isFullscreen);
|
||||
_setFullscreen(!isFullscreen);
|
||||
},
|
||||
icon: Obx(() => isFullscreen
|
||||
? const Icon(
|
||||
@@ -250,7 +292,6 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
|
||||
),
|
||||
tooltip: translate('Display Settings'),
|
||||
position: mod_menu.PopupMenuPosition.under,
|
||||
onSelected: (String item) {},
|
||||
itemBuilder: (BuildContext context) => _getDisplayMenu()
|
||||
.map((entry) => entry.build(
|
||||
context,
|
||||
@@ -273,7 +314,6 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
|
||||
),
|
||||
tooltip: translate('Keyboard Settings'),
|
||||
position: mod_menu.PopupMenuPosition.under,
|
||||
onSelected: (String item) {},
|
||||
itemBuilder: (BuildContext context) => _getKeyboardMenu()
|
||||
.map((entry) => entry.build(
|
||||
context,
|
||||
|
||||
Reference in New Issue
Block a user