aboutsummaryrefslogtreecommitdiff
path: root/src/win/native/god_window.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-05-24 01:40:02 +0800
committercrupest <crupest@outlook.com>2020-05-24 01:40:02 +0800
commitd86a71f79afe0e4dac768f61d6bff690567aca5b (patch)
tree4957e9a64c77680deb07201fbd879bf036616dae /src/win/native/god_window.cpp
parentf3a8fd608a9776ef0a5f547da918a32cf6074060 (diff)
downloadcru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.gz
cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.bz2
cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.zip
...
Diffstat (limited to 'src/win/native/god_window.cpp')
-rw-r--r--src/win/native/god_window.cpp82
1 files changed, 0 insertions, 82 deletions
diff --git a/src/win/native/god_window.cpp b/src/win/native/god_window.cpp
deleted file mode 100644
index 00577002..00000000
--- a/src/win/native/god_window.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "cru/win/native/god_window.hpp"
-
-#include "cru/common/logger.hpp"
-#include "cru/win/native/exception.hpp"
-#include "cru/win/native/ui_application.hpp"
-#include "cru/win/native/window_class.hpp"
-#include "god_window_message.hpp"
-#include "timer.hpp"
-
-namespace cru::platform::native::win {
-constexpr auto god_window_class_name = L"GodWindowClass";
-
-LRESULT CALLBACK GodWndProc(HWND hWnd, UINT uMsg, WPARAM wParam,
- LPARAM lParam) {
- const auto app = WinUiApplication::GetInstance();
-
- if (app) {
- LRESULT result;
- const auto handled = app->GetGodWindow()->HandleGodWindowMessage(
- hWnd, uMsg, wParam, lParam, &result);
- if (handled)
- return result;
- else
- return DefWindowProcW(hWnd, uMsg, wParam, lParam);
- } else
- return DefWindowProcW(hWnd, uMsg, wParam, lParam);
-}
-
-GodWindow::GodWindow(WinUiApplication* application) {
- application_ = application;
-
- const auto h_instance = application->GetInstanceHandle();
-
- god_window_class_ = std::make_unique<WindowClass>(god_window_class_name,
- GodWndProc, h_instance);
-
- hwnd_ = CreateWindowEx(0, god_window_class_name, L"", 0, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- HWND_MESSAGE, nullptr, h_instance, nullptr);
-
- if (hwnd_ == nullptr)
- throw Win32Error(::GetLastError(), "Failed to create god window.");
-}
-
-GodWindow::~GodWindow() {
- if (!::DestroyWindow(hwnd_)) {
- // Although this could be "safely" ignore.
- log::Warn("Failed to destroy god window.");
- }
-}
-
-bool GodWindow::HandleGodWindowMessage(HWND hwnd, UINT msg, WPARAM w_param,
- LPARAM l_param, LRESULT* result) {
- CRU_UNUSED(hwnd)
- CRU_UNUSED(l_param)
-
- switch (msg) {
- case invoke_later_message_id: {
- const auto p_action = reinterpret_cast<std::function<void()>*>(w_param);
- (*p_action)();
- delete p_action;
- *result = 0;
- return true;
- }
- case WM_TIMER: {
- const auto id = static_cast<UINT_PTR>(w_param);
- const auto action = application_->GetTimerManager()->GetAction(id);
- if (action.has_value()) {
- (action.value().second)();
- if (!action.value().first)
- application_->GetTimerManager()->KillTimer(id);
- result = 0;
- return true;
- }
- break;
- }
- default:
- return false;
- }
- return false;
-}
-} // namespace cru::platform::native::win