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();
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(
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;
void _minimize() async =>
await WindowController.fromWindowId(windowId).minimize();
@override
initState() {
super.initState();
@ -467,6 +470,12 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
toolbarItems.add(_VoiceCallMenu(id: widget.id, 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));
return Column(
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 {
final ToolbarState state;
final Function(bool) setFullscreen;
@ -1597,11 +1630,11 @@ class _IconMenuButtonState extends State<_IconMenuButton> {
final icon = widget.icon ??
SvgPicture.asset(
widget.assetName!,
color: Colors.white,
colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
width: _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize,
);
final button = SizedBox(
var button = SizedBox(
width: _ToolbarTheme.buttonSize,
height: _ToolbarTheme.buttonSize,
child: MenuItemButton(
@ -1625,6 +1658,12 @@ class _IconMenuButtonState extends State<_IconMenuButton> {
).marginSymmetric(
horizontal: widget.hMargin ?? _ToolbarTheme.buttonHMargin,
vertical: widget.vMargin ?? _ToolbarTheme.buttonVMargin);
if (widget.tooltip != null) {
button = Tooltip(
message: widget.tooltip!,
child: button,
);
}
if (widget.topLevel) {
return MenuBar(children: [button]);
} else {

View File

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