diff --git a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/CMakeLists.txt b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/CMakeLists.txt index 394917c053..17411a8ab8 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/CMakeLists.txt +++ b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/CMakeLists.txt @@ -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. diff --git a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/flutter_window.cpp b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/flutter_window.cpp index 7be2fe2901..8254bd9ff3 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/flutter_window.cpp +++ b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/flutter_window.cpp @@ -30,9 +30,6 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); - - flutter_controller_->engine()->SetNextFrameCallback([&]() { this->Show(); }); - return true; } diff --git a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/main.cpp b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/main.cpp index cd54d850be..a58aa90dc5 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/main.cpp +++ b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/main.cpp @@ -30,7 +30,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.Create(L"test_plugin_example", origin, size)) { + if (!window.CreateAndShow(L"test_plugin_example", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.cpp b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.cpp index daefc277e4..85aa3614e8 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.cpp +++ b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.cpp @@ -4,34 +4,14 @@ #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; @@ -55,8 +35,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 @@ -124,8 +104,8 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::Create(const std::wstring& title, const Point& origin, - const Size& size) { +bool Win32Window::CreateAndShow(const std::wstring& title, const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -138,7 +118,7 @@ bool Win32Window::Create(const std::wstring& title, const Point& origin, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, 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); @@ -147,13 +127,9 @@ bool Win32Window::Create(const std::wstring& title, const Point& origin, 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, WPARAM const wparam, @@ -210,10 +186,6 @@ Win32Window::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, SetFocus(child_content_); } return 0; - - case WM_DWMCOLORIZATIONCOLORCHANGED: - UpdateTheme(hwnd); - return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -267,18 +239,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); - 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/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.h b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.h index 33d491ead9..d2a7300522 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.h +++ b/packages/pigeon/platform_tests/test_plugin/example/windows/runner/win32_window.h @@ -32,16 +32,14 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates a win32 window with |title| that is positioned and sized using + // Creates and shows a win32 window with |title| and position and size 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 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(); + // 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); // Release OS resources associated with window. void Destroy(); @@ -89,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.