diff --git a/lib/components/window_frame.dart b/lib/components/window_frame.dart index 6525970..ad7cc75 100644 --- a/lib/components/window_frame.dart +++ b/lib/components/window_frame.dart @@ -147,9 +147,10 @@ class _WindowFrameState extends State { onPressed: debug, child: Text('Debug'), ), - if (!App.isMacOS) _WindowButtons( - onClose: _onClose, - ) + if (!App.isMacOS) + _WindowButtons( + onClose: _onClose, + ) ], ), ); @@ -559,31 +560,31 @@ class _VirtualWindowFrameState extends State } Widget _buildVirtualWindowFrame(BuildContext context) { - return DecoratedBox( - decoration: BoxDecoration( - color: Colors.transparent, - border: Border.all( - color: Theme.of(context).dividerColor, - width: (_isMaximized || _isFullScreen) ? 0 : 1, - ), - boxShadow: [ - if (!_isMaximized && !_isFullScreen) + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(_isMaximized ? 0 : 8), + color: Colors.transparent, + boxShadow: [ BoxShadow( - color: Colors.black.toOpacity(0.1), - offset: Offset(0.0, _isFocused ? 4 : 2), - blurRadius: 6, - ) - ], - ), - child: widget.child, - ); + color: Colors.black.toOpacity(_isFocused ? 0.4 : 0.2), + offset: Offset(0.0, 2), + blurRadius: 4, + ) + ], + ), + clipBehavior: Clip.antiAlias, + child: widget.child, + ); } @override Widget build(BuildContext context) { return DragToResizeArea( enableResizeEdges: (_isMaximized || _isFullScreen) ? [] : null, - child: _buildVirtualWindowFrame(context), + child: Padding( + padding: EdgeInsets.all(_isMaximized ? 0 : 4), + child: _buildVirtualWindowFrame(context), + ), ); } diff --git a/lib/main.dart b/lib/main.dart index 0ab3875..463a3b0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,13 +34,10 @@ void main(List args) { await windowManager.setBackgroundColor(Colors.transparent); } await windowManager.setMinimumSize(const Size(500, 600)); - if (!App.isLinux) { - // https://github.com/leanflutter/window_manager/issues/460 - var placement = await WindowPlacement.loadFromFile(); - await placement.applyToWindow(); - await windowManager.show(); - WindowPlacement.loop(); - } + var placement = await WindowPlacement.loadFromFile(); + await placement.applyToWindow(); + await windowManager.show(); + WindowPlacement.loop(); }); } }, (error, stack) { @@ -201,6 +198,7 @@ class _MyAppState extends State with WidgetsBindingObserver { 'dark' => ThemeMode.dark, _ => ThemeMode.system }, + color: Colors.transparent, localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, @@ -248,6 +246,7 @@ class _MyAppState extends State with WidgetsBindingObserver { ); } return _SystemUiProvider(Material( + color: App.isLinux ? Colors.transparent : null, child: widget, )); } diff --git a/linux/my_application.cc b/linux/my_application.cc index 774c9c2..5b2bfe6 100644 --- a/linux/my_application.cc +++ b/linux/my_application.cc @@ -48,6 +48,12 @@ static void my_application_activate(GApplication* application) { } gtk_window_set_default_size(window, 1280, 720); + GdkVisual* visual; + gtk_widget_set_app_paintable(GTK_WIDGET(window), TRUE); + visual = gdk_screen_get_rgba_visual(screen); + if (visual != NULL && gdk_screen_is_composited(screen)) { + gtk_widget_set_visual(GTK_WIDGET(window), visual); + } gtk_widget_show(GTK_WIDGET(window)); g_autoptr(FlDartProject) project = fl_dart_project_new(); @@ -58,6 +64,7 @@ static void my_application_activate(GApplication* application) { gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + gtk_widget_hide(GTK_WIDGET(window)); gtk_widget_grab_focus(GTK_WIDGET(view)); }