Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
c075ef05
Unverified
Commit
c075ef05
authored
Sep 03, 2022
by
Jenn Magder
Committed by
GitHub
Sep 03, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "[Windows] Use dark title bar on dark system theme" (#110890)
parent
22c8e79c
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
28 additions
and
361 deletions
+28
-361
CMakeLists.txt
...ation_tests/flutter_gallery/windows/runner/CMakeLists.txt
+0
-1
win32_window.cpp
...ion_tests/flutter_gallery/windows/runner/win32_window.cpp
+0
-34
win32_window.h
...ation_tests/flutter_gallery/windows/runner/win32_window.h
+0
-3
main.dart
dev/integration_tests/windows_startup_test/lib/main.dart
+18
-24
windows.dart
dev/integration_tests/windows_startup_test/lib/windows.dart
+0
-38
main_test.dart
...ion_tests/windows_startup_test/test_driver/main_test.dart
+1
-10
CMakeLists.txt
..._tests/windows_startup_test/windows/runner/CMakeLists.txt
+0
-1
flutter_window.cpp
...ts/windows_startup_test/windows/runner/flutter_window.cpp
+3
-44
win32_window.cpp
...ests/windows_startup_test/windows/runner/win32_window.cpp
+0
-34
win32_window.h
..._tests/windows_startup_test/windows/runner/win32_window.h
+0
-3
CMakeLists.txt
dev/manual_tests/windows/runner/CMakeLists.txt
+0
-1
win32_window.cpp
dev/manual_tests/windows/runner/win32_window.cpp
+0
-34
win32_window.h
dev/manual_tests/windows/runner/win32_window.h
+0
-3
CMakeLists.txt
examples/hello_world/windows/runner/CMakeLists.txt
+0
-1
win32_window.cpp
examples/hello_world/windows/runner/win32_window.cpp
+0
-34
win32_window.h
examples/hello_world/windows/runner/win32_window.h
+0
-3
CMakeLists.txt
examples/platform_channel/windows/runner/CMakeLists.txt
+0
-1
win32_window.cpp
examples/platform_channel/windows/runner/win32_window.cpp
+4
-47
win32_window.h
examples/platform_channel/windows/runner/win32_window.h
+2
-7
CMakeLists.txt
...s/templates/app_shared/windows.tmpl/runner/CMakeLists.txt
+0
-1
win32_window.cpp
...templates/app_shared/windows.tmpl/runner/win32_window.cpp
+0
-34
win32_window.h
...s/templates/app_shared/windows.tmpl/runner/win32_window.h
+0
-3
No files found.
dev/integration_tests/flutter_gallery/windows/runner/CMakeLists.txt
View file @
c075ef05
...
...
@@ -33,7 +33,6 @@ 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.
...
...
dev/integration_tests/flutter_gallery/windows/runner/win32_window.cpp
View file @
c075ef05
...
...
@@ -4,28 +4,14 @@
#include "win32_window.h"
#include <dwmapi.h>
#include <flutter_windows.h>
#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"
;
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
;
...
...
@@ -144,8 +130,6 @@ bool Win32Window::Create(const std::wstring& title,
return
false
;
}
UpdateTheme
(
window
);
return
OnCreate
();
}
...
...
@@ -212,10 +196,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus
(
child_content_
);
}
return
0
;
case
WM_DWMCOLORIZATIONCOLORCHANGED
:
UpdateTheme
(
hwnd
);
return
0
;
}
return
DefWindowProc
(
window_handle_
,
message
,
wparam
,
lparam
);
...
...
@@ -271,17 +251,3 @@ 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
);
LONG
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
));
}
}
dev/integration_tests/flutter_gallery/windows/runner/win32_window.h
View file @
c075ef05
...
...
@@ -91,9 +91,6 @@ 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.
...
...
dev/integration_tests/windows_startup_test/lib/main.dart
View file @
c075ef05
...
...
@@ -5,10 +5,9 @@
import
'dart:async'
;
import
'dart:ui'
as
ui
;
import
'package:flutter/services.dart'
;
import
'package:flutter_driver/driver_extension.dart'
;
import
'windows.dart'
;
void
drawHelloWorld
(
)
{
final
ui
.
ParagraphStyle
style
=
ui
.
ParagraphStyle
();
final
ui
.
ParagraphBuilder
paragraphBuilder
=
ui
.
ParagraphBuilder
(
style
)
...
...
@@ -31,38 +30,33 @@ void drawHelloWorld() {
}
void
main
(
)
async
{
// Create a completer to send the window visibility result back to the
// integration test.
final
Completer
<
String
>
visibilityCompleter
=
Completer
<
String
>();
enableFlutterDriverExtension
(
handler:
(
String
?
message
)
async
{
if
(
message
==
'verifyWindowVisibility'
)
{
return
visibilityCompleter
.
future
;
}
else
if
(
message
==
'verifyTheme'
)
{
final
bool
app
=
await
isAppDarkModeEnabled
();
final
bool
system
=
await
isSystemDarkModeEnabled
();
return
(
app
==
system
)
?
'success'
:
'error: app dark mode (
$app
) does not match system dark mode (
$system
)'
;
}
throw
'Unrecognized message:
$message
'
;
});
// Create a completer to send the result back to the integration test.
final
Completer
<
String
>
completer
=
Completer
<
String
>();
enableFlutterDriverExtension
(
handler:
(
String
?
message
)
=>
completer
.
future
);
try
{
if
(
await
isWindowVisible
())
{
const
MethodChannel
methodChannel
=
MethodChannel
(
'tests.flutter.dev/windows_startup_test'
);
final
bool
?
visible
=
await
methodChannel
.
invokeMethod
(
'isWindowVisible'
);
if
(
visible
==
null
||
visible
==
true
)
{
throw
'Window should be hidden at startup'
;
}
bool
firstFrame
=
true
;
ui
.
PlatformDispatcher
.
instance
.
onBeginFrame
=
(
Duration
duration
)
async
{
if
(
await
isWindowVisible
())
{
final
bool
?
visible
=
await
methodChannel
.
invokeMethod
(
'isWindowVisible'
);
if
(
visible
==
null
)
{
throw
'Method channel unavailable'
;
}
if
(
visible
==
true
)
{
if
(
firstFrame
)
{
throw
'Window should be hidden on first frame'
;
}
if
(!
visibilityC
ompleter
.
isCompleted
)
{
visibilityC
ompleter
.
complete
(
'success'
);
if
(!
c
ompleter
.
isCompleted
)
{
c
ompleter
.
complete
(
'success'
);
}
}
...
...
@@ -74,7 +68,7 @@ void main() async {
ui
.
PlatformDispatcher
.
instance
.
scheduleFrame
();
}
catch
(
e
)
{
visibilityC
ompleter
.
completeError
(
e
);
c
ompleter
.
completeError
(
e
);
rethrow
;
}
}
dev/integration_tests/windows_startup_test/lib/windows.dart
deleted
100644 → 0
View file @
22c8e79c
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'package:flutter/services.dart'
;
const
MethodChannel
_kMethodChannel
=
MethodChannel
(
'tests.flutter.dev/windows_startup_test'
);
/// Returns true if the application's window is visible.
Future
<
bool
>
isWindowVisible
()
async
{
final
bool
?
visible
=
await
_kMethodChannel
.
invokeMethod
<
bool
?>(
'isWindowVisible'
);
if
(
visible
==
null
)
{
throw
'Method channel unavailable'
;
}
return
visible
;
}
/// Returns true if the app's dark mode is enabled.
Future
<
bool
>
isAppDarkModeEnabled
()
async
{
final
bool
?
enabled
=
await
_kMethodChannel
.
invokeMethod
<
bool
?>(
'isAppDarkModeEnabled'
);
if
(
enabled
==
null
)
{
throw
'Method channel unavailable'
;
}
return
enabled
;
}
/// Returns true if the operating system dark mode setting is enabled.
Future
<
bool
>
isSystemDarkModeEnabled
()
async
{
final
bool
?
enabled
=
await
_kMethodChannel
.
invokeMethod
<
bool
?>(
'isSystemDarkModeEnabled'
);
if
(
enabled
==
null
)
{
throw
'Method channel unavailable'
;
}
return
enabled
;
}
dev/integration_tests/windows_startup_test/test_driver/main_test.dart
View file @
c075ef05
...
...
@@ -8,16 +8,7 @@ import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
void
main
(
)
{
test
(
'Windows app starts and draws frame'
,
()
async
{
final
FlutterDriver
driver
=
await
FlutterDriver
.
connect
(
printCommunication:
true
);
final
String
result
=
await
driver
.
requestData
(
'verifyWindowVisibility'
);
expect
(
result
,
equals
(
'success'
));
await
driver
.
close
();
},
timeout:
Timeout
.
none
);
test
(
'Windows app theme matches system theme'
,
()
async
{
final
FlutterDriver
driver
=
await
FlutterDriver
.
connect
(
printCommunication:
true
);
final
String
result
=
await
driver
.
requestData
(
'verifyTheme'
);
final
String
result
=
await
driver
.
requestData
(
null
);
expect
(
result
,
equals
(
'success'
));
...
...
dev/integration_tests/windows_startup_test/windows/runner/CMakeLists.txt
View file @
c075ef05
...
...
@@ -33,7 +33,6 @@ 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.
...
...
dev/integration_tests/windows_startup_test/windows/runner/flutter_window.cpp
View file @
c075ef05
...
...
@@ -7,25 +7,11 @@
#include <optional>
#include <mutex>
#include <dwmapi.h>
#include <flutter/method_channel.h>
#include <flutter/standard_method_codec.h>
#include "flutter/generated_plugin_registrant.h"
/// 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
kGetPreferredBrightnessRegKey
[]
=
L"Software
\\
Microsoft
\\
Windows
\\
CurrentVersion
\\
Themes
\\
Personalize"
;
constexpr
const
wchar_t
kGetPreferredBrightnessRegValue
[]
=
L"AppsUseLightTheme"
;
FlutterWindow
::
FlutterWindow
(
const
flutter
::
DartProject
&
project
)
:
project_
(
project
)
{}
...
...
@@ -64,38 +50,11 @@ bool FlutterWindow::OnCreate() {
&
flutter
::
StandardMethodCodec
::
GetInstance
());
channel
.
SetMethodCallHandler
(
[
&
](
const
flutter
::
MethodCall
<>&
call
,
[](
const
flutter
::
MethodCall
<>&
call
,
std
::
unique_ptr
<
flutter
::
MethodResult
<>>
result
)
{
std
::
string
method
=
call
.
method_name
();
if
(
method
==
"isWindowVisible"
)
{
std
::
scoped_lock
lock
(
visible_mutex
);
std
::
scoped_lock
lock
(
visible_mutex
);
if
(
call
.
method_name
()
==
"isWindowVisible"
)
{
result
->
Success
(
visible
);
}
else
if
(
method
==
"isAppDarkModeEnabled"
)
{
BOOL
enabled
;
HRESULT
hr
=
DwmGetWindowAttribute
(
GetHandle
(),
DWMWA_USE_IMMERSIVE_DARK_MODE
,
&
enabled
,
sizeof
(
enabled
));
if
(
SUCCEEDED
(
hr
))
{
result
->
Success
((
bool
)
enabled
);
}
else
{
result
->
Error
(
"error"
,
"Received result handle "
+
hr
);
}
}
else
if
(
method
==
"isSystemDarkModeEnabled"
)
{
DWORD
data
;
DWORD
data_size
=
sizeof
(
data
);
LONG
status
=
RegGetValue
(
HKEY_CURRENT_USER
,
kGetPreferredBrightnessRegKey
,
kGetPreferredBrightnessRegValue
,
RRF_RT_REG_DWORD
,
nullptr
,
&
data
,
&
data_size
);
if
(
status
==
ERROR_SUCCESS
)
{
// Preferred brightness is 0 if dark mode is enabled,
// otherwise non-zero.
result
->
Success
(
data
==
0
);
}
else
{
result
->
Error
(
"error"
,
"Received status "
+
status
);
}
}
else
{
result
->
NotImplemented
();
}
...
...
dev/integration_tests/windows_startup_test/windows/runner/win32_window.cpp
View file @
c075ef05
...
...
@@ -4,28 +4,14 @@
#include "win32_window.h"
#include <dwmapi.h>
#include <flutter_windows.h>
#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"
;
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
;
...
...
@@ -144,8 +130,6 @@ bool Win32Window::Create(const std::wstring& title,
return
false
;
}
UpdateTheme
(
window
);
return
OnCreate
();
}
...
...
@@ -212,10 +196,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus
(
child_content_
);
}
return
0
;
case
WM_DWMCOLORIZATIONCOLORCHANGED
:
UpdateTheme
(
hwnd
);
return
0
;
}
return
DefWindowProc
(
window_handle_
,
message
,
wparam
,
lparam
);
...
...
@@ -271,17 +251,3 @@ 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
);
LONG
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
));
}
}
dev/integration_tests/windows_startup_test/windows/runner/win32_window.h
View file @
c075ef05
...
...
@@ -91,9 +91,6 @@ 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.
...
...
dev/manual_tests/windows/runner/CMakeLists.txt
View file @
c075ef05
...
...
@@ -33,7 +33,6 @@ 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.
...
...
dev/manual_tests/windows/runner/win32_window.cpp
View file @
c075ef05
...
...
@@ -4,28 +4,14 @@
#include "win32_window.h"
#include <dwmapi.h>
#include <flutter_windows.h>
#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"
;
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
;
...
...
@@ -144,8 +130,6 @@ bool Win32Window::Create(const std::wstring& title,
return
false
;
}
UpdateTheme
(
window
);
return
OnCreate
();
}
...
...
@@ -212,10 +196,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus
(
child_content_
);
}
return
0
;
case
WM_DWMCOLORIZATIONCOLORCHANGED
:
UpdateTheme
(
hwnd
);
return
0
;
}
return
DefWindowProc
(
window_handle_
,
message
,
wparam
,
lparam
);
...
...
@@ -271,17 +251,3 @@ 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
);
LONG
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
));
}
}
dev/manual_tests/windows/runner/win32_window.h
View file @
c075ef05
...
...
@@ -91,9 +91,6 @@ 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.
...
...
examples/hello_world/windows/runner/CMakeLists.txt
View file @
c075ef05
...
...
@@ -33,7 +33,6 @@ 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.
...
...
examples/hello_world/windows/runner/win32_window.cpp
View file @
c075ef05
...
...
@@ -4,28 +4,14 @@
#include "win32_window.h"
#include <dwmapi.h>
#include <flutter_windows.h>
#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"
;
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
;
...
...
@@ -144,8 +130,6 @@ bool Win32Window::Create(const std::wstring& title,
return
false
;
}
UpdateTheme
(
window
);
return
OnCreate
();
}
...
...
@@ -212,10 +196,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus
(
child_content_
);
}
return
0
;
case
WM_DWMCOLORIZATIONCOLORCHANGED
:
UpdateTheme
(
hwnd
);
return
0
;
}
return
DefWindowProc
(
window_handle_
,
message
,
wparam
,
lparam
);
...
...
@@ -271,17 +251,3 @@ 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
);
LONG
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
));
}
}
examples/hello_world/windows/runner/win32_window.h
View file @
c075ef05
...
...
@@ -91,9 +91,6 @@ 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.
...
...
examples/platform_channel/windows/runner/CMakeLists.txt
View file @
c075ef05
...
...
@@ -33,7 +33,6 @@ 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.
...
...
examples/platform_channel/windows/runner/win32_window.cpp
View file @
c075ef05
...
...
@@ -4,28 +4,14 @@
#include "win32_window.h"
#include <dwmapi.h>
#include <flutter_windows.h>
#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"
;
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
;
...
...
@@ -95,8 +81,6 @@ const wchar_t* WindowClassRegistrar::GetWindowClass() {
window_class
.
cbClsExtra
=
0
;
window_class
.
cbWndExtra
=
0
;
window_class
.
hInstance
=
GetModuleHandle
(
nullptr
);
window_class
.
hIcon
=
LoadIcon
(
window_class
.
hInstance
,
MAKEINTRESOURCE
(
IDI_APP_ICON
));
window_class
.
hbrBackground
=
0
;
window_class
.
lpszMenuName
=
nullptr
;
window_class
.
lpfnWndProc
=
Win32Window
::
WndProc
;
...
...
@@ -111,9 +95,7 @@ void WindowClassRegistrar::UnregisterWindowClass() {
class_registered_
=
false
;
}
Win32Window
::
Win32Window
()
{
++
g_active_window_count
;
}
Win32Window
::
Win32Window
()
{
++
g_active_window_count
;
}
Win32Window
::~
Win32Window
()
{
--
g_active_window_count
;
...
...
@@ -144,8 +126,6 @@ bool Win32Window::Create(const std::wstring& title,
return
false
;
}
UpdateTheme
(
window
);
return
OnCreate
();
}
...
...
@@ -154,8 +134,7 @@ bool Win32Window::Show() {
}
// static
LRESULT
CALLBACK
Win32Window
::
WndProc
(
HWND
const
window
,
UINT
const
message
,
LRESULT
CALLBACK
Win32Window
::
WndProc
(
HWND
const
window
,
UINT
const
message
,
WPARAM
const
wparam
,
LPARAM
const
lparam
)
noexcept
{
if
(
message
==
WM_NCCREATE
)
{
...
...
@@ -174,9 +153,7 @@ LRESULT CALLBACK Win32Window::WndProc(HWND const window,
}
LRESULT
Win32Window
::
MessageHandler
(
HWND
hwnd
,
UINT
const
message
,
WPARAM
const
wparam
,
Win32Window
::
MessageHandler
(
HWND
hwnd
,
UINT
const
message
,
WPARAM
const
wparam
,
LPARAM
const
lparam
)
noexcept
{
switch
(
message
)
{
case
WM_DESTROY
:
...
...
@@ -212,10 +189,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus
(
child_content_
);
}
return
0
;
case
WM_DWMCOLORIZATIONCOLORCHANGED
:
UpdateTheme
(
hwnd
);
return
0
;
}
return
DefWindowProc
(
window_handle_
,
message
,
wparam
,
lparam
);
...
...
@@ -255,9 +228,7 @@ RECT Win32Window::GetClientArea() {
return
frame
;
}
HWND
Win32Window
::
GetHandle
()
{
return
window_handle_
;
}
HWND
Win32Window
::
GetHandle
()
{
return
window_handle_
;
}
void
Win32Window
::
SetQuitOnClose
(
bool
quit_on_close
)
{
quit_on_close_
=
quit_on_close
;
...
...
@@ -271,17 +242,3 @@ 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
);
LONG
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
));
}
}
examples/platform_channel/windows/runner/win32_window.h
View file @
c075ef05
...
...
@@ -63,8 +63,7 @@ class Win32Window {
// Processes and route salient window messages for mouse handling,
// size change and DPI. Delegates handling of these to member overloads that
// inheriting classes can handle.
virtual
LRESULT
MessageHandler
(
HWND
window
,
UINT
const
message
,
virtual
LRESULT
MessageHandler
(
HWND
window
,
UINT
const
message
,
WPARAM
const
wparam
,
LPARAM
const
lparam
)
noexcept
;
...
...
@@ -83,17 +82,13 @@ class Win32Window {
// non-client DPI scaling so that the non-client area automatically
// responsponds to changes in DPI. All other messages are handled by
// MessageHandler.
static
LRESULT
CALLBACK
WndProc
(
HWND
const
window
,
UINT
const
message
,
static
LRESULT
CALLBACK
WndProc
(
HWND
const
window
,
UINT
const
message
,
WPARAM
const
wparam
,
LPARAM
const
lparam
)
noexcept
;
// 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.
...
...
packages/flutter_tools/templates/app_shared/windows.tmpl/runner/CMakeLists.txt
View file @
c075ef05
...
...
@@ -33,7 +33,6 @@ 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.
...
...
packages/flutter_tools/templates/app_shared/windows.tmpl/runner/win32_window.cpp
View file @
c075ef05
#include "win32_window.h"
#include <dwmapi.h>
#include <flutter_windows.h>
#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"
;
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
;
...
...
@@ -140,8 +126,6 @@ bool Win32Window::Create(const std::wstring& title,
return
false
;
}
UpdateTheme
(
window
);
return
OnCreate
();
}
...
...
@@ -208,10 +192,6 @@ Win32Window::MessageHandler(HWND hwnd,
SetFocus
(
child_content_
);
}
return
0
;
case
WM_DWMCOLORIZATIONCOLORCHANGED
:
UpdateTheme
(
hwnd
);
return
0
;
}
return
DefWindowProc
(
window_handle_
,
message
,
wparam
,
lparam
);
...
...
@@ -267,17 +247,3 @@ 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
);
LONG
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
));
}
}
packages/flutter_tools/templates/app_shared/windows.tmpl/runner/win32_window.h
View file @
c075ef05
...
...
@@ -87,9 +87,6 @@ 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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment