new: custom titlebar on linux/win

This commit is contained in:
lollipopkit
2023-12-19 11:00:00 +08:00
parent 48bc6da7b5
commit 0d1a720f03
2 changed files with 40 additions and 28 deletions

View File

@@ -128,7 +128,10 @@ void _setupLogger() {
Future<void> _initDesktopWindow() async { Future<void> _initDesktopWindow() async {
if (!isDesktop) return; if (!isDesktop) return;
await windowManager.ensureInitialized(); await windowManager.ensureInitialized();
await CustomAppBar.updateTitlebarHeight();
const windowOptions = WindowOptions( const windowOptions = WindowOptions(
size: Size(400, 777), size: Size(400, 777),
center: true, center: true,
@@ -136,9 +139,7 @@ Future<void> _initDesktopWindow() async {
skipTaskbar: false, skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden, titleBarStyle: TitleBarStyle.hidden,
); );
windowManager.waitUntilReadyToShow(windowOptions, () async { windowManager.waitUntilReadyToShow(windowOptions, () async {
if (isMacOS) await CustomAppBar.updateTitlebarHeight();
await windowManager.show(); await windowManager.show();
await windowManager.focus(); await windowManager.focus();
}); });

View File

@@ -40,16 +40,27 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
Positioned( Positioned(
right: 0, right: 0,
top: 0, top: 0,
child: GestureDetector(
onVerticalDragStart: (_) {
windowManager.startDragging();
},
onHorizontalDragStart: (_) {
windowManager.startDragging();
},
child: Row( child: Row(
mainAxisSize: MainAxisSize.max,
children: [ children: [
const SizedBox(width: 8), const SizedBox(width: 8),
IconButton( IconButton(
icon: const Icon(Icons.minimize), icon: Transform.translate(
offset: const Offset(0, -3.5),
child: const Icon(Icons.minimize, size: 13),
),
onPressed: () => windowManager.minimize(), onPressed: () => windowManager.minimize(),
), ),
const SizedBox(width: 8), const SizedBox(width: 8),
IconButton( IconButton(
icon: const Icon(Icons.crop_square), icon: const Icon(Icons.crop_square, size: 13),
onPressed: () async { onPressed: () async {
if (await windowManager.isMaximized()) { if (await windowManager.isMaximized()) {
windowManager.unmaximize(); windowManager.unmaximize();
@@ -60,13 +71,13 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
), ),
const SizedBox(width: 8), const SizedBox(width: 8),
IconButton( IconButton(
icon: const Icon(Icons.close), icon: const Icon(Icons.close, size: 14),
onPressed: () => windowManager.close(), onPressed: () => windowManager.close(),
), ),
const SizedBox(width: 8),
], ],
), ),
), ),
),
], ],
); );
} }
@@ -78,7 +89,7 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
break; break;
// Draw a titlebar on Linux // Draw a titlebar on Linux
case 'linux' || 'windows': case 'linux' || 'windows':
_titlebarHeight = 27; _titlebarHeight = 37;
_drawTitlebar = true; _drawTitlebar = true;
break; break;
default: default: