From 027d29e8340e6ebfb6cace74dcdfd4a02fe648b6 Mon Sep 17 00:00:00 2001 From: Li Wei Date: Mon, 6 Feb 2023 21:06:56 +0800 Subject: [PATCH] fix: windows version (#72) --- ui/flutter/.metadata | 25 +-- ui/flutter/lib/pages/home/home_view.dart | 15 +- ui/flutter/pubspec.lock | 152 ++++++++++++++++-- ui/flutter/pubspec.yaml | 2 +- ui/flutter/windows/runner/CMakeLists.txt | 8 + ui/flutter/windows/runner/Runner.rc | 14 +- ui/flutter/windows/runner/flutter_window.cpp | 5 + ui/flutter/windows/runner/main.cpp | 2 +- ui/flutter/windows/runner/runner.exe.manifest | 2 +- ui/flutter/windows/runner/win32_window.cpp | 53 +++++- ui/flutter/windows/runner/win32_window.h | 18 ++- 11 files changed, 234 insertions(+), 62 deletions(-) diff --git a/ui/flutter/.metadata b/ui/flutter/.metadata index 39f2501e..33f93bc1 100644 --- a/ui/flutter/.metadata +++ b/ui/flutter/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled. version: - revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + revision: 7048ed95a5ad3e43d697e0c397464193991fc230 channel: stable project_type: app @@ -13,26 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: android - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: ios - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: linux - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: macos - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - - platform: web - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + create_revision: 7048ed95a5ad3e43d697e0c397464193991fc230 + base_revision: 7048ed95a5ad3e43d697e0c397464193991fc230 - platform: windows - create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 - base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1 + create_revision: 7048ed95a5ad3e43d697e0c397464193991fc230 + base_revision: 7048ed95a5ad3e43d697e0c397464193991fc230 # User provided section diff --git a/ui/flutter/lib/pages/home/home_view.dart b/ui/flutter/lib/pages/home/home_view.dart index 9b386358..6aa8cc24 100644 --- a/ui/flutter/lib/pages/home/home_view.dart +++ b/ui/flutter/lib/pages/home/home_view.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:stylish_bottom_bar/model/bar_items.dart'; import 'package:stylish_bottom_bar/stylish_bottom_bar.dart'; import '../../routes/router.dart'; @@ -33,21 +34,23 @@ class HomeView extends GetView { ), bottomNavigationBar: StylishBottomBar( + option: AnimatedBarOptions( + iconSize: 32, + barAnimation: BarAnimation.fade, + iconStyle: IconStyle.Default, + opacity: 0.3, + ), items: [ - AnimatedBarItems( + BottomBarItem( icon: const Icon(Icons.list), selectedColor: Get.theme.primaryColor, title: Text('home.task'.tr)), - AnimatedBarItems( + BottomBarItem( icon: const Icon(Icons.settings), selectedColor: Get.theme.primaryColor, title: Text('home.setting'.tr)), ], - iconSize: 32, - barAnimation: BarAnimation.fade, - iconStyle: IconStyle.Default, hasNotch: true, - opacity: 0.3, currentIndex: currentIndex, onTap: (index) { switch (index) { diff --git a/ui/flutter/pubspec.lock b/ui/flutter/pubspec.lock index ee1bf4ff..83babf51 100644 --- a/ui/flutter/pubspec.lock +++ b/ui/flutter/pubspec.lock @@ -5,6 +5,7 @@ packages: dependency: transitive description: name: _fe_analyzer_shared + sha256: "37bb1e815e15fbeefe916e4c941ef070f2f64d15a7eacc3cc0f6e8847b62319c" url: "https://pub.flutter-io.cn" source: hosted version: "48.0.0" @@ -12,6 +13,7 @@ packages: dependency: transitive description: name: analyzer + sha256: c50aea66893c20d44c365d4269983a74a5c1a4055b7b78f38fbf0e24f519b6a2 url: "https://pub.flutter-io.cn" source: hosted version: "5.0.0" @@ -19,6 +21,7 @@ packages: dependency: transitive description: name: archive + sha256: "793964beb8e297995714326628881437d4211f10fc8843534bab54129cd896ee" url: "https://pub.flutter-io.cn" source: hosted version: "3.3.1" @@ -26,6 +29,7 @@ packages: dependency: transitive description: name: args + sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 url: "https://pub.flutter-io.cn" source: hosted version: "2.3.1" @@ -33,20 +37,23 @@ packages: dependency: transitive description: name: async + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 url: "https://pub.flutter-io.cn" source: hosted - version: "2.9.0" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" url: "https://pub.flutter-io.cn" source: hosted version: "2.3.1" @@ -54,6 +61,7 @@ packages: dependency: transitive description: name: build_config + sha256: "5b7355c14258f5e7df24bad1566f7b991de3e54aeacfb94e1a65e5233d9739c1" url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" @@ -61,6 +69,7 @@ packages: dependency: transitive description: name: build_daemon + sha256: "6bc5544ea6ce4428266e7ea680e945c68806c4aae2da0eb5e9ccf38df8d6acbf" url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" @@ -68,6 +77,7 @@ packages: dependency: transitive description: name: build_resolvers + sha256: "687cf90a3951affac1bd5f9ecb5e3e90b60487f3d9cdc359bb310f8876bb02a6" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.10" @@ -75,6 +85,7 @@ packages: dependency: "direct dev" description: name: build_runner + sha256: e3b4e8eab6b9bdb57059e9290a7ddc0ec61b617ac862fe4d973bf6eb90475b85 url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" @@ -82,6 +93,7 @@ packages: dependency: transitive description: name: build_runner_core + sha256: "409c20ff6b6a9c9f4152fc9fcbf16440fedf02fcacc0fb26ea3b8eab9a860a40" url: "https://pub.flutter-io.cn" source: hosted version: "7.2.4" @@ -89,6 +101,7 @@ packages: dependency: transitive description: name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" @@ -96,6 +109,7 @@ packages: dependency: transitive description: name: built_value + sha256: d7a9cd57c215bdf8d502772447aa6b52a8ab3f956d25d5fdea6ef1df2d2dad60 url: "https://pub.flutter-io.cn" source: hosted version: "8.4.1" @@ -103,6 +117,7 @@ packages: dependency: transitive description: name: characters + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" @@ -110,6 +125,7 @@ packages: dependency: transitive description: name: checked_yaml + sha256: dd007e4fb8270916820a0d66e24f619266b60773cddd082c6439341645af2659 url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" @@ -117,6 +133,7 @@ packages: dependency: transitive description: name: cli_util + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" url: "https://pub.flutter-io.cn" source: hosted version: "0.3.5" @@ -124,6 +141,7 @@ packages: dependency: transitive description: name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" @@ -131,6 +149,7 @@ packages: dependency: transitive description: name: code_builder + sha256: "02ce3596b459c666530f045ad6f96209474e8fee6e4855940a3cee65fb872ec5" url: "https://pub.flutter-io.cn" source: hosted version: "4.3.0" @@ -138,13 +157,15 @@ packages: dependency: transitive description: name: collection + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 url: "https://pub.flutter-io.cn" source: hosted - version: "1.16.0" + version: "1.17.0" context_menus: dependency: "direct main" description: name: context_menus + sha256: "25313f2a17dc936f541f8012761648cb58d936c5d6f6bf7282f137a4b9dedddb" url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" @@ -152,6 +173,7 @@ packages: dependency: transitive description: name: convert + sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" @@ -159,6 +181,7 @@ packages: dependency: transitive description: name: cross_file + sha256: f71079978789bc2fe78d79227f1f8cfe195b31bbd8db2399b0d15a4b96fb843b url: "https://pub.flutter-io.cn" source: hosted version: "0.3.3+2" @@ -166,6 +189,7 @@ packages: dependency: transitive description: name: crypto + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" @@ -173,6 +197,7 @@ packages: dependency: "direct main" description: name: cupertino_icons + sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be url: "https://pub.flutter-io.cn" source: hosted version: "1.0.5" @@ -180,6 +205,7 @@ packages: dependency: transitive description: name: dart_style + sha256: "7a03456c3490394c8e7665890333e91ae8a49be43542b616e414449ac358acd4" url: "https://pub.flutter-io.cn" source: hosted version: "2.2.4" @@ -187,6 +213,7 @@ packages: dependency: "direct main" description: name: desktop_drop + sha256: "0cd056191b701a2b5ba040f2306349e461fafdaa5df4569b2228cdf87b58eced" url: "https://pub.flutter-io.cn" source: hosted version: "0.3.3" @@ -194,6 +221,7 @@ packages: dependency: "direct main" description: name: dio + sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8" url: "https://pub.flutter-io.cn" source: hosted version: "4.0.6" @@ -201,6 +229,7 @@ packages: dependency: transitive description: name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" @@ -208,6 +237,7 @@ packages: dependency: transitive description: name: ffi + sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" @@ -215,6 +245,7 @@ packages: dependency: "direct dev" description: name: ffigen + sha256: ec6a2439159d27c871d92862fb9f3012ef19d9ec4b0fa383c69c8553b2dd2ac5 url: "https://pub.flutter-io.cn" source: hosted version: "6.1.2" @@ -222,6 +253,7 @@ packages: dependency: transitive description: name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" url: "https://pub.flutter-io.cn" source: hosted version: "6.1.4" @@ -229,6 +261,7 @@ packages: dependency: "direct main" description: name: file_selector + sha256: c348bc79073db2d22599ab86ac3e3baec9079ec90c04ed3b9a92f674a7a4db9f url: "https://pub.flutter-io.cn" source: hosted version: "0.9.2" @@ -236,6 +269,7 @@ packages: dependency: transitive description: name: file_selector_ios + sha256: fdfc0578fa31b853780e2fadacf51bd85553071d8c49f5edd0d1ec159406e0ab url: "https://pub.flutter-io.cn" source: hosted version: "0.5.0+1" @@ -243,6 +277,7 @@ packages: dependency: transitive description: name: file_selector_linux + sha256: "0c2043aba4b644e44bc17197589e80f59b1445ecd22d52878055e163d314a8d3" url: "https://pub.flutter-io.cn" source: hosted version: "0.9.0" @@ -250,6 +285,7 @@ packages: dependency: transitive description: name: file_selector_macos + sha256: "5fd8239766e90f16693517608c15b89fe1970a83efc395a834734fab3f9bfe27" url: "https://pub.flutter-io.cn" source: hosted version: "0.9.0+1" @@ -257,6 +293,7 @@ packages: dependency: transitive description: name: file_selector_platform_interface + sha256: "92b924983d18c53d9d354b95be261af869f2a8efa125b293d2db6569c32dd9c3" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -264,6 +301,7 @@ packages: dependency: transitive description: name: file_selector_web + sha256: "8e9ca06d07a7fe60e487e3647792552c5b9722139aeb51b8f462be0336b47456" url: "https://pub.flutter-io.cn" source: hosted version: "0.9.0" @@ -271,6 +309,7 @@ packages: dependency: transitive description: name: file_selector_windows + sha256: b592a4815363438a00db50c3b03072e2899c0ffe2adf1fb9a868bf22eebedac2 url: "https://pub.flutter-io.cn" source: hosted version: "0.9.1+2" @@ -278,6 +317,7 @@ packages: dependency: transitive description: name: fixnum + sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" @@ -299,6 +339,7 @@ packages: dependency: "direct dev" description: name: flutter_lints + sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" @@ -321,6 +362,7 @@ packages: dependency: transitive description: name: frontend_server_client + sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" @@ -328,6 +370,7 @@ packages: dependency: "direct main" description: name: get + sha256: "2ba20a47c8f1f233bed775ba2dd0d3ac97b4cf32fc17731b3dfc672b06b0e92a" url: "https://pub.flutter-io.cn" source: hosted version: "4.6.5" @@ -335,6 +378,7 @@ packages: dependency: transitive description: name: glob + sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729 url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -342,6 +386,7 @@ packages: dependency: transitive description: name: graphs + sha256: ae0b3d956ff324c6f8671f08dcb2dbd71c99cdbf2aa3ca63a14190c47aa6679c url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -349,6 +394,7 @@ packages: dependency: transitive description: name: http + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" url: "https://pub.flutter-io.cn" source: hosted version: "0.13.5" @@ -356,6 +402,7 @@ packages: dependency: transitive description: name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" url: "https://pub.flutter-io.cn" source: hosted version: "3.2.1" @@ -363,6 +410,7 @@ packages: dependency: transitive description: name: http_parser + sha256: db3060f22889f3d9d55f6a217565486737037eec3609f7f3eca4d0c67ee0d8a0 url: "https://pub.flutter-io.cn" source: hosted version: "4.0.1" @@ -370,6 +418,7 @@ packages: dependency: transitive description: name: image + sha256: f6ffe2895e3c86c6ad5a27e6302cf807403463e397cb2f0c580f619ac2fa588b url: "https://pub.flutter-io.cn" source: hosted version: "3.2.2" @@ -377,6 +426,7 @@ packages: dependency: "direct main" description: name: intl + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" url: "https://pub.flutter-io.cn" source: hosted version: "0.17.0" @@ -384,6 +434,7 @@ packages: dependency: transitive description: name: io + sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852" url: "https://pub.flutter-io.cn" source: hosted version: "1.0.3" @@ -391,13 +442,15 @@ packages: dependency: transitive description: name: js + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" url: "https://pub.flutter-io.cn" source: hosted - version: "0.6.4" + version: "0.6.5" json_annotation: dependency: "direct main" description: name: json_annotation + sha256: cb314f00b2488de7bc575207e54402cd2f92363f333a7933fd1b0631af226baa url: "https://pub.flutter-io.cn" source: hosted version: "4.6.0" @@ -405,6 +458,7 @@ packages: dependency: "direct dev" description: name: json_serializable + sha256: fd1bcfbf6f623e1dfcc60616f189a6ca540dba7b5917447be5dab754b3116932 url: "https://pub.flutter-io.cn" source: hosted version: "6.3.2" @@ -412,6 +466,7 @@ packages: dependency: transitive description: name: lint + sha256: "4a539aa34ec5721a2c7574ae2ca0336738ea4adc2a34887d54b7596310b33c85" url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" @@ -419,6 +474,7 @@ packages: dependency: transitive description: name: lints + sha256: "5cfd6509652ff5e7fe149b6df4859e687fca9048437857cb2e65c8d780f396e3" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" @@ -426,6 +482,7 @@ packages: dependency: "direct main" description: name: logger + sha256: "5076f09225f91dc49289a4ccb92df2eeea9ea01cf7c26d49b3a1f04c6a49eec1" url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" @@ -433,6 +490,7 @@ packages: dependency: transitive description: name: logging + sha256: "293ae2d49fd79d4c04944c3a26dfd313382d5f52e821ec57119230ae16031ad4" url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" @@ -440,6 +498,7 @@ packages: dependency: transitive description: name: logging_appenders + sha256: "013e8548b79e3b8dc0333f3efae706184356b5926c6bea59150efa126c91598c" url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" @@ -447,6 +506,7 @@ packages: dependency: "direct main" description: name: lottie + sha256: "893da7a0022ec2fcaa616f34529a081f617e86cc501105b856e5a3184c58c7c2" url: "https://pub.flutter-io.cn" source: hosted version: "1.4.3" @@ -454,6 +514,7 @@ packages: dependency: "direct main" description: name: macos_secure_bookmarks + sha256: c3163875f8fd530a1654a7cf8aa426e6e208d28bf05724a1d4960e4b7d2ca1c6 url: "https://pub.flutter-io.cn" source: hosted version: "0.2.1" @@ -461,20 +522,23 @@ packages: dependency: transitive description: name: matcher + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" url: "https://pub.flutter-io.cn" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0" @@ -482,6 +546,7 @@ packages: dependency: transitive description: name: mime + sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" @@ -489,6 +554,7 @@ packages: dependency: transitive description: name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -496,6 +562,7 @@ packages: dependency: "direct main" description: name: package_info_plus + sha256: f619162573096d428ccde2e33f92e05b5a179cd6f0e3120c1005f181bee8ed16 url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" @@ -503,6 +570,7 @@ packages: dependency: transitive description: name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" @@ -510,6 +578,7 @@ packages: dependency: transitive description: name: path + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b url: "https://pub.flutter-io.cn" source: hosted version: "1.8.2" @@ -517,6 +586,7 @@ packages: dependency: "direct main" description: name: path_provider + sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.11" @@ -524,6 +594,7 @@ packages: dependency: transitive description: name: path_provider_android + sha256: "4d5542667150f5b779ba411dd5dc0b674a85d1355e45bda2877e0e82f4ad08d8" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.20" @@ -531,6 +602,7 @@ packages: dependency: transitive description: name: path_provider_ios + sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.11" @@ -538,6 +610,7 @@ packages: dependency: transitive description: name: path_provider_linux + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 url: "https://pub.flutter-io.cn" source: hosted version: "2.1.7" @@ -545,6 +618,7 @@ packages: dependency: transitive description: name: path_provider_macos + sha256: "2a97e7fbb7ae9dcd0dfc1220a78e9ec3e71da691912e617e8715ff2a13086ae8" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.6" @@ -552,6 +626,7 @@ packages: dependency: transitive description: name: path_provider_platform_interface + sha256: "27dc7a224fcd07444cb5e0e60423ccacea3e13cf00fc5282ac2c918132da931d" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" @@ -559,6 +634,7 @@ packages: dependency: transitive description: name: path_provider_windows + sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" @@ -566,6 +642,7 @@ packages: dependency: transitive description: name: petitparser + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" url: "https://pub.flutter-io.cn" source: hosted version: "5.1.0" @@ -573,6 +650,7 @@ packages: dependency: transitive description: name: platform + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" @@ -580,6 +658,7 @@ packages: dependency: transitive description: name: plugin_platform_interface + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a url: "https://pub.flutter-io.cn" source: hosted version: "2.1.3" @@ -587,6 +666,7 @@ packages: dependency: transitive description: name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" url: "https://pub.flutter-io.cn" source: hosted version: "1.5.1" @@ -594,6 +674,7 @@ packages: dependency: transitive description: name: process + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" url: "https://pub.flutter-io.cn" source: hosted version: "4.2.4" @@ -601,6 +682,7 @@ packages: dependency: transitive description: name: pub_semver + sha256: "816c1a640e952d213ddd223b3e7aafae08cd9f8e1f6864eed304cc13b0272b07" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" @@ -608,6 +690,7 @@ packages: dependency: transitive description: name: pubspec_parse + sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" @@ -615,6 +698,7 @@ packages: dependency: transitive description: name: quiver + sha256: "93982981971e812c94d4a6fa3a57b89f9ec12b38b6380cd3c1370c3b01e4580e" url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" @@ -622,6 +706,7 @@ packages: dependency: "direct main" description: name: rounded_loading_button + sha256: ec4af194330ba688527749059b7c1a3d1ddda6c18794ec4b0696f0cb3b9784ff url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -629,6 +714,7 @@ packages: dependency: transitive description: name: rxdart + sha256: "5d22055fd443806c03ef24a02000637cf51eae49c2a0168d38a43fc166b0209c" url: "https://pub.flutter-io.cn" source: hosted version: "0.27.5" @@ -636,6 +722,7 @@ packages: dependency: "direct main" description: name: shared_preferences + sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.15" @@ -643,6 +730,7 @@ packages: dependency: transitive description: name: shared_preferences_android + sha256: "3e128864b9cff21bdd5b3ad569953070a851d62901bee880bb052b1110b38007" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.13" @@ -650,6 +738,7 @@ packages: dependency: transitive description: name: shared_preferences_ios + sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" @@ -657,6 +746,7 @@ packages: dependency: transitive description: name: shared_preferences_linux + sha256: "28aefc1261746e7bad3d09799496054beb84e8c4ffcdfed7734e17b4ada459a5" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" @@ -664,6 +754,7 @@ packages: dependency: transitive description: name: shared_preferences_macos + sha256: fbb94bf296576f49be37a1496d5951796211a8db0aa22cc0d68c46440dad808c url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" @@ -671,6 +762,7 @@ packages: dependency: transitive description: name: shared_preferences_platform_interface + sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -678,6 +770,7 @@ packages: dependency: transitive description: name: shared_preferences_web + sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" @@ -685,6 +778,7 @@ packages: dependency: transitive description: name: shared_preferences_windows + sha256: "97f7ab9a7da96d9cf19581f5de520ceb529548498bd6b5e0ccd02d68a0d15eba" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" @@ -692,6 +786,7 @@ packages: dependency: transitive description: name: shelf + sha256: "8ec607599dd0a78931a5114cdac7d609b6dbbf479a38acc9a6dba024b2a30ea0" url: "https://pub.flutter-io.cn" source: hosted version: "1.3.2" @@ -699,6 +794,7 @@ packages: dependency: transitive description: name: shelf_web_socket + sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc" url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" @@ -711,6 +807,7 @@ packages: dependency: transitive description: name: source_gen + sha256: "0f5cf4243080b2c57650128ac1841498282da5ca1da0e826a03c9e208186c59d" url: "https://pub.flutter-io.cn" source: hosted version: "1.2.3" @@ -718,6 +815,7 @@ packages: dependency: transitive description: name: source_helper + sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" url: "https://pub.flutter-io.cn" source: hosted version: "1.3.3" @@ -725,27 +823,31 @@ packages: dependency: transitive description: name: source_span + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 url: "https://pub.flutter-io.cn" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 url: "https://pub.flutter-io.cn" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.0" + version: "2.1.1" stream_transform: dependency: transitive description: name: stream_transform + sha256: ed464977cb26a1f41537e177e190c67223dbd9f4f683489b6ab2e5d211ec564e url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" @@ -753,13 +855,15 @@ packages: dependency: transitive description: name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" url: "https://pub.flutter-io.cn" source: hosted - version: "1.1.1" + version: "1.2.0" styled_widget: dependency: "direct main" description: name: styled_widget + sha256: "7e6021ba204e6618724cf6294d2a5c6830841d34803fba8e7ffdb08510116fa1" url: "https://pub.flutter-io.cn" source: hosted version: "0.4.0+3" @@ -767,13 +871,15 @@ packages: dependency: "direct main" description: name: stylish_bottom_bar + sha256: "24aab3e66a3e16b4fe786d4efb87b4111c94d75964b03c7a6dd17174c56d710c" url: "https://pub.flutter-io.cn" source: hosted - version: "0.1.5" + version: "1.0.0" term_glyph: dependency: transitive description: name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" @@ -781,13 +887,15 @@ packages: dependency: transitive description: name: test_api + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 url: "https://pub.flutter-io.cn" source: hosted - version: "0.4.12" + version: "0.4.16" timing: dependency: transitive description: name: timing + sha256: c386d07d7f5efc613479a7c4d9d64b03710b03cfaa7e8ad5f2bfb295a1f0dfad url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" @@ -795,6 +903,7 @@ packages: dependency: transitive description: name: typed_data + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" @@ -802,6 +911,7 @@ packages: dependency: "direct main" description: name: url_launcher + sha256: "568176fc8ab5ac1d88ff0db8ff28659d103851670dda55e83b485664c2309299" url: "https://pub.flutter-io.cn" source: hosted version: "6.1.6" @@ -809,6 +919,7 @@ packages: dependency: transitive description: name: url_launcher_android + sha256: "9e262cbec69233717d5198f4d0b0c4961fa027e3685ba425442c43c64f38bb9b" url: "https://pub.flutter-io.cn" source: hosted version: "6.0.19" @@ -816,6 +927,7 @@ packages: dependency: transitive description: name: url_launcher_ios + sha256: "6ba7dddee26c9fae27c9203c424631109d73c8fa26cfa7bc3e35e751cb87f62e" url: "https://pub.flutter-io.cn" source: hosted version: "6.0.17" @@ -823,6 +935,7 @@ packages: dependency: transitive description: name: url_launcher_linux + sha256: "360fa359ab06bcb4f7c5cd3123a2a9a4d3364d4575d27c4b33468bd4497dd094" url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" @@ -830,6 +943,7 @@ packages: dependency: transitive description: name: url_launcher_macos + sha256: a9b3ea9043eabfaadfa3fb89de67a11210d85569086d22b3854484beab8b3978 url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" @@ -837,6 +951,7 @@ packages: dependency: transitive description: name: url_launcher_platform_interface + sha256: "80b860b31a11ebbcbe51b8fe887efc204f3af91522f3b51bcda4622d276d2120" url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" @@ -844,6 +959,7 @@ packages: dependency: transitive description: name: url_launcher_web + sha256: "5669882643b96bb6d5786637cac727c6e918a790053b09245fd4513b8a07df2a" url: "https://pub.flutter-io.cn" source: hosted version: "2.0.13" @@ -851,6 +967,7 @@ packages: dependency: transitive description: name: url_launcher_windows + sha256: e3c3b16d3104260c10eea3b0e34272aaa57921f83148b0619f74c2eced9b7ef1 url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" @@ -858,13 +975,15 @@ packages: dependency: transitive description: name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher + sha256: e42dfcc48f67618344da967b10f62de57e04bae01d9d3af4c2596f3712a88c99 url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" @@ -872,6 +991,7 @@ packages: dependency: transitive description: name: web_socket_channel + sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd" url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" @@ -879,6 +999,7 @@ packages: dependency: transitive description: name: win32 + sha256: "1952a663c0e34fbde55916010d54bbb249bf5f2583113c497602f0ee01c6faa4" url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" @@ -886,6 +1007,7 @@ packages: dependency: transitive description: name: xdg_directories + sha256: "11541eedefbcaec9de35aa82650b695297ce668662bbd6e3911a7fabdbde589f" url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0+2" @@ -893,6 +1015,7 @@ packages: dependency: transitive description: name: xml + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb url: "https://pub.flutter-io.cn" source: hosted version: "6.1.0" @@ -900,9 +1023,10 @@ packages: dependency: transitive description: name: yaml + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" url: "https://pub.flutter-io.cn" source: hosted version: "3.1.1" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=2.18.2 <3.0.0" flutter: ">=3.3.0" diff --git a/ui/flutter/pubspec.yaml b/ui/flutter/pubspec.yaml index 8cddc9d8..e3447032 100644 --- a/ui/flutter/pubspec.yaml +++ b/ui/flutter/pubspec.yaml @@ -36,7 +36,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 get: ^4.6.5 - stylish_bottom_bar: ^0.1.5 + stylish_bottom_bar: ^1.0.0 lottie: ^1.4.2 styled_widget: ^0.4.0+3 context_menus: ^1.0.2 diff --git a/ui/flutter/windows/runner/CMakeLists.txt b/ui/flutter/windows/runner/CMakeLists.txt index b9e550fb..394917c0 100644 --- a/ui/flutter/windows/runner/CMakeLists.txt +++ b/ui/flutter/windows/runner/CMakeLists.txt @@ -20,12 +20,20 @@ add_executable(${BINARY_NAME} WIN32 # that need different build settings. apply_standard_settings(${BINARY_NAME}) +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + # Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/ui/flutter/windows/runner/Runner.rc b/ui/flutter/windows/runner/Runner.rc index 574ab3dc..6f414056 100644 --- a/ui/flutter/windows/runner/Runner.rc +++ b/ui/flutter/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -89,11 +89,11 @@ BEGIN BEGIN BLOCK "040904e4" BEGIN - VALUE "CompanyName", "com.example" "\0" + VALUE "CompanyName", "com" "\0" VALUE "FileDescription", "gopeed" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "gopeed" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com. All rights reserved." "\0" VALUE "OriginalFilename", "gopeed.exe" "\0" VALUE "ProductName", "gopeed" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/ui/flutter/windows/runner/flutter_window.cpp b/ui/flutter/windows/runner/flutter_window.cpp index b43b9095..b25e363e 100644 --- a/ui/flutter/windows/runner/flutter_window.cpp +++ b/ui/flutter/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/ui/flutter/windows/runner/main.cpp b/ui/flutter/windows/runner/main.cpp index b8845802..4bdd0d72 100644 --- a/ui/flutter/windows/runner/main.cpp +++ b/ui/flutter/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"gopeed", origin, size)) { + if (!window.Create(L"gopeed", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/ui/flutter/windows/runner/runner.exe.manifest b/ui/flutter/windows/runner/runner.exe.manifest index c977c4a4..a42ea768 100644 --- a/ui/flutter/windows/runner/runner.exe.manifest +++ b/ui/flutter/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/ui/flutter/windows/runner/win32_window.cpp b/ui/flutter/windows/runner/win32_window.cpp index c10f08dc..041a3855 100644 --- a/ui/flutter/windows/runner/win32_window.cpp +++ b/ui/flutter/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/ui/flutter/windows/runner/win32_window.h b/ui/flutter/windows/runner/win32_window.h index 17ba4311..c86632d8 100644 --- a/ui/flutter/windows/runner/win32_window.h +++ b/ui/flutter/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window.