add minimize button on fullscreen toolbar

Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow 2023-07-27 20:45:29 +08:00
parent 5d6b1223cc
commit 4d2036512a
3 changed files with 49 additions and 3 deletions

View File

@ -1389,6 +1389,13 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
isMaximized = await wc.isMaximized(); isMaximized = await wc.isMaximized();
break; break;
} }
if (Platform.isWindows) {
const kMinOffset = -10000;
if (position.dx < kMinOffset || position.dy < kMinOffset) {
debugPrint("Invalid position: $position, ignore saving position");
return;
}
}
final pos = LastWindowPosition( final pos = LastWindowPosition(
sz.width, sz.height, position.dx, position.dy, isMaximized); sz.width, sz.height, position.dx, position.dy, isMaximized);

View File

@ -360,6 +360,9 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
triggerAutoHide() => _debouncerHide.value = _debouncerHide.value + 1; triggerAutoHide() => _debouncerHide.value = _debouncerHide.value + 1;
void _minimize() async =>
await WindowController.fromWindowId(windowId).minimize();
@override @override
initState() { initState() {
super.initState(); super.initState();
@ -467,6 +470,12 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
toolbarItems.add(_VoiceCallMenu(id: widget.id, ffi: widget.ffi)); toolbarItems.add(_VoiceCallMenu(id: widget.id, ffi: widget.ffi));
} }
toolbarItems.add(_RecordMenu(ffi: widget.ffi)); toolbarItems.add(_RecordMenu(ffi: widget.ffi));
if (!isWebDesktop) {
toolbarItems.add(_MinimizeMenu(
state: widget.state,
onPressed: _minimize,
));
}
toolbarItems.add(_CloseMenu(id: widget.id, ffi: widget.ffi)); toolbarItems.add(_CloseMenu(id: widget.id, ffi: widget.ffi));
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -549,6 +558,30 @@ class _PinMenu extends StatelessWidget {
} }
} }
class _MinimizeMenu extends StatelessWidget {
final ToolbarState state;
final Function() onPressed;
bool get isFullscreen => stateGlobal.fullscreen;
const _MinimizeMenu({
Key? key,
required this.state,
required this.onPressed,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Offstage(
offstage: !isFullscreen,
child: _IconMenuButton(
assetName: 'assets/minimize_black_24dp.svg',
tooltip: 'Minimize',
onPressed: onPressed,
color: _ToolbarTheme.blueColor,
hoverColor: _ToolbarTheme.hoverBlueColor,
));
}
}
class _FullscreenMenu extends StatelessWidget { class _FullscreenMenu extends StatelessWidget {
final ToolbarState state; final ToolbarState state;
final Function(bool) setFullscreen; final Function(bool) setFullscreen;
@ -1597,11 +1630,11 @@ class _IconMenuButtonState extends State<_IconMenuButton> {
final icon = widget.icon ?? final icon = widget.icon ??
SvgPicture.asset( SvgPicture.asset(
widget.assetName!, widget.assetName!,
color: Colors.white, colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
width: _ToolbarTheme.buttonSize, width: _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize,
); );
final button = SizedBox( var button = SizedBox(
width: _ToolbarTheme.buttonSize, width: _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize, height: _ToolbarTheme.buttonSize,
child: MenuItemButton( child: MenuItemButton(
@ -1625,6 +1658,12 @@ class _IconMenuButtonState extends State<_IconMenuButton> {
).marginSymmetric( ).marginSymmetric(
horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin, horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin,
vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin); vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin);
if (widget.tooltip != null) {
button = Tooltip(
message: widget.tooltip!,
child: button,
);
}
if (widget.topLevel) { if (widget.topLevel) {
return MenuBar(children: [button]); return MenuBar(children: [button]);
} else { } else {

View File

@ -65,7 +65,7 @@ class StateGlobal {
? kMaximizeEdgeSize ? kMaximizeEdgeSize
: kWindowEdgeSize; : kWindowEdgeSize;
print( print(
"fullscreen: ${fullscreen}, resizeEdgeSize: ${_resizeEdgeSize.value}"); "fullscreen: $fullscreen, resizeEdgeSize: ${_resizeEdgeSize.value}");
_windowBorderWidth.value = fullscreen ? 0 : kWindowBorderWidth; _windowBorderWidth.value = fullscreen ? 0 : kWindowBorderWidth;
WindowController.fromWindowId(windowId) WindowController.fromWindowId(windowId)
.setFullscreen(_fullscreen) .setFullscreen(_fullscreen)