aboutsummaryrefslogtreecommitdiff
path: root/src/platform/gui/win/Window.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-16 14:49:46 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-16 14:49:46 +0800
commitc350346c41cb779413389f26c5c8f4e9bd2a8141 (patch)
tree2bc976b3d6724f9665cab64a4d5f355d67b03e6f /src/platform/gui/win/Window.cpp
parent9feb6a1611a86b90a02b5bfe2b1d4c8189650491 (diff)
downloadcru-c350346c41cb779413389f26c5c8f4e9bd2a8141.tar.gz
cru-c350346c41cb779413389f26c5c8f4e9bd2a8141.tar.bz2
cru-c350346c41cb779413389f26c5c8f4e9bd2a8141.zip
Cleanup Win codes.
Diffstat (limited to 'src/platform/gui/win/Window.cpp')
-rw-r--r--src/platform/gui/win/Window.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/platform/gui/win/Window.cpp b/src/platform/gui/win/Window.cpp
index af308768..be834a25 100644
--- a/src/platform/gui/win/Window.cpp
+++ b/src/platform/gui/win/Window.cpp
@@ -1,6 +1,5 @@
#include "cru/platform/gui/win/Window.h"
-#include "WindowManager.h"
#include "cru/base/StringUtil.h"
#include "cru/base/log/Logger.h"
#include "cru/platform/graphics/NullPainter.h"
@@ -16,6 +15,7 @@
#include <windowsx.h>
#include <winuser.h>
+#include <algorithm>
#include <memory>
namespace cru::platform::gui::win {
@@ -68,6 +68,7 @@ Rect CalcClientRectFromWindow(const Rect& rect, WindowStyleFlag style_flag,
WinNativeWindow::WinNativeWindow(WinUiApplication* application)
: application_(application) {
+ application->RegisterWindow(this);
input_method_context_ = std::make_unique<WinInputMethodContext>(this);
}
@@ -75,6 +76,7 @@ WinNativeWindow::~WinNativeWindow() { Close(); }
void WinNativeWindow::Close() {
if (hwnd_) ::DestroyWindow(hwnd_);
+ application_->UnregisterWindow(this);
}
void WinNativeWindow::SetParent(INativeWindow* parent) {
@@ -459,8 +461,7 @@ RECT WinNativeWindow::GetClientRectPixel() {
}
void WinNativeWindow::RecreateWindow() {
- const auto window_manager = application_->GetWindowManager();
- auto window_class = window_manager->GetGeneralWindowClass();
+ auto window_class = application_->GetGeneralWindowClass();
hwnd_ = CreateWindowExW(
0, window_class->GetName(), L"", CalcWindowStyle(style_flag_),
@@ -477,7 +478,7 @@ void WinNativeWindow::RecreateWindow() {
dpi_ = static_cast<float>(dpi);
CRU_LOG_TAG_DEBUG("Dpi of window is {}.", dpi_);
- window_manager->RegisterWindow(hwnd_, this);
+ application_->RegisterWindow(this);
SetCursor(application_->GetCursorManager()->GetSystemCursor(
cru::platform::gui::SystemCursorType::Arrow));
@@ -497,8 +498,16 @@ void WinNativeWindow::OnCreateInternal() { create_event_.Raise(nullptr); }
void WinNativeWindow::OnDestroyInternal() {
destroy_event_.Raise(nullptr);
- application_->GetWindowManager()->UnregisterWindow(hwnd_);
+ application_->UnregisterWindow(this);
hwnd_ = nullptr;
+
+ if (application_->IsQuitOnAllWindowClosed() &&
+ std::ranges::all_of(application_->GetAllWinWindow(),
+ [](WinNativeWindow* window) {
+ return window->GetWindowHandle() == nullptr;
+ })) {
+ application_->RequestQuit(0);
+ }
}
void WinNativeWindow::OnPaintInternal() {