From 77d6f50ad2252ad9071400986d195b6e7c2321df Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 11 Jan 2022 15:45:33 +0200 Subject: [PATCH] Improve title on desktop --- lib/main.dart | 11 +++ lib/ui/app/main_screen.dart | 74 ++++++++++++++++--- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + pubspec.lock | 35 +++++++++ pubspec.yaml | 1 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + windows/runner/main.cpp | 3 + 9 files changed, 122 insertions(+), 11 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 2a3b1b3b7..cdd554a8e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'dart:convert'; // Flutter imports: +import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -132,6 +133,16 @@ void main({bool isTesting = false}) async { appRunner: () => runApp(InvoiceNinjaApp(store: store)), ); } + + doWhenWindowReady(() { + final win = appWindow; + //const initialSize = Size(600, 450); + //win.minSize = initialSize; + //win.size = initialSize; + //win.alignment = Alignment.center; + //win.maximize(); + win.show(); + }); } Future _initialState(bool isTesting) async { diff --git a/lib/ui/app/main_screen.dart b/lib/ui/app/main_screen.dart index f46d010ab..a7f2aa832 100644 --- a/lib/ui/app/main_screen.dart +++ b/lib/ui/app/main_screen.dart @@ -1,4 +1,5 @@ // Flutter imports: +import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'package:flutter/material.dart'; // Package imports: @@ -219,6 +220,21 @@ class MainScreen extends StatelessWidget { print('## Error: main screen route $mainRoute not defined'); } + final buttonColors = WindowButtonColors( + iconNormal: state.headerTextColor, + iconMouseOver: state.headerTextColor, + iconMouseDown: state.headerTextColor, + mouseOver: Color(prefState.enableDarkMode ? 0xFF222222 : 0xFFDDDDDD), + mouseDown: Color(prefState.enableDarkMode ? 0xFF333333 : 0xFFCCCCCC), + ); + + final closeButtonColors = WindowButtonColors( + iconNormal: state.headerTextColor, + iconMouseOver: Colors.white, + mouseOver: Color(0xFFD32F2F), + mouseDown: Color(0xFFB71C1C), + ); + return WillPopScope( onWillPop: () async { final state = store.state; @@ -292,18 +308,54 @@ class MainScreen extends StatelessWidget { child: SafeArea( child: FocusTraversalGroup( policy: ReadingOrderTraversalPolicy(), - child: ChangeLayoutBanner( - appLayout: prefState.appLayout, - suggestedLayout: AppLayout.desktop, - child: Row(children: [ - if (prefState.showMenu) MenuDrawerBuilder(), + child: Column( + children: [ + Material( + color: !prefState.enableDarkMode && state.hasAccentColor + ? state.accentColor + : null, + child: WindowTitleBarBox( + child: Row( + children: [ + Expanded( + child: MoveWindow( + child: Row( + children: [ + SizedBox(width: 6), + Image.asset('assets/images/icon.png', + width: 16), + SizedBox(width: 6), + Text( + 'Invoice Ninja', + style: + TextStyle(color: state.headerTextColor), + ), + ], + ), + )), + MinimizeWindowButton(colors: buttonColors), + MaximizeWindowButton(colors: buttonColors), + CloseWindowButton(colors: closeButtonColors), + ], + ), + ), + ), Expanded( - child: AppBorder( - child: screen, - isLeft: prefState.showMenu && - (!state.isFullScreen || showFilterSidebar), - )), - ]), + child: ChangeLayoutBanner( + appLayout: prefState.appLayout, + suggestedLayout: AppLayout.desktop, + child: Row(children: [ + if (prefState.showMenu) MenuDrawerBuilder(), + Expanded( + child: AppBorder( + child: screen, + isLeft: prefState.showMenu && + (!state.isFullScreen || showFilterSidebar), + )), + ]), + ), + ), + ], ), ), ), diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 25e690ad0..b9b3c2f96 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,10 +6,14 @@ #include "generated_plugin_registrant.h" +#include #include #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) bitsdojo_window_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "BitsdojoWindowPlugin"); + bitsdojo_window_plugin_register_with_registrar(bitsdojo_window_linux_registrar); g_autoptr(FlPluginRegistrar) sentry_flutter_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index ae0effac1..f04889916 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + bitsdojo_window_linux sentry_flutter url_launcher_linux ) diff --git a/pubspec.lock b/pubspec.lock index 048c51924..752f63f71 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -43,6 +43,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.8.2" + bitsdojo_window: + dependency: "direct main" + description: + name: bitsdojo_window + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+1" + bitsdojo_window_linux: + dependency: transitive + description: + name: bitsdojo_window_linux + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1" + bitsdojo_window_macos: + dependency: transitive + description: + name: bitsdojo_window_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" + bitsdojo_window_platform_interface: + dependency: transitive + description: + name: bitsdojo_window_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" + bitsdojo_window_windows: + dependency: transitive + description: + name: bitsdojo_window_windows + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.0" boardview: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index a71c0d1a4..1e1d4fd88 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -58,6 +58,7 @@ dependencies: contacts_service: ^0.6.1 super_editor: ^0.1.0 diacritic: ^0.1.3 + bitsdojo_window: ^0.1.1+1 # printing: ^5.6.3 # quick_actions: ^0.2.1 # idb_shim: ^1.11.1+1 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 106171ae6..787942729 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,11 +6,14 @@ #include "generated_plugin_registrant.h" +#include #include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { + BitsdojoWindowPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("BitsdojoWindowPlugin")); NativePdfRendererPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("NativePdfRendererPlugin")); SentryFlutterPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 14e88514c..1b91aad38 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + bitsdojo_window_windows native_pdf_renderer sentry_flutter url_launcher_windows diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp index bcfeee6d9..99cfa6453 100644 --- a/windows/runner/main.cpp +++ b/windows/runner/main.cpp @@ -1,3 +1,6 @@ +#include +auto bdw = bitsdojo_window_configure(BDW_CUSTOM_FRAME | BDW_HIDE_ON_STARTUP); + #include #include #include