aboutsummaryrefslogtreecommitdiff
path: root/src/win/native/win_application.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-06-27 17:02:58 +0800
committercrupest <crupest@outlook.com>2019-06-27 17:02:58 +0800
commitb53527fbe50a953ad0e3225cc812eb76b8a1f82d (patch)
treeeb81cd14d0a165c47f841ad94835f8987109de7e /src/win/native/win_application.cpp
parent8c5b05bcfce96495b4ffc4209ab8feda12597729 (diff)
downloadcru-b53527fbe50a953ad0e3225cc812eb76b8a1f82d.tar.gz
cru-b53527fbe50a953ad0e3225cc812eb76b8a1f82d.tar.bz2
cru-b53527fbe50a953ad0e3225cc812eb76b8a1f82d.zip
...
Diffstat (limited to 'src/win/native/win_application.cpp')
-rw-r--r--src/win/native/win_application.cpp117
1 files changed, 0 insertions, 117 deletions
diff --git a/src/win/native/win_application.cpp b/src/win/native/win_application.cpp
deleted file mode 100644
index 586af331..00000000
--- a/src/win/native/win_application.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-#include "cru/win/native/win_application.hpp"
-
-#include "cru/win/exception.hpp"
-#include "cru/win/graph/win_graph_factory.hpp"
-#include "cru/win/native/god_window.hpp"
-#include "cru/win/native/win_native_window.hpp"
-#include "god_window_message.hpp"
-#include "timer.hpp"
-#include "window_manager.hpp"
-
-#include <VersionHelpers.h>
-#include <cassert>
-
-namespace cru::win::native {
-namespace {
-WinApplication* instance = nullptr;
-}
-} // namespace cru::win::native
-
-namespace cru::platform::native {
-IUiApplication* IUiApplication::CreateInstance() {
- auto& i = ::cru::win::native::instance; // avoid long namespace prefix
- assert(i == nullptr);
- i = new win::native::WinApplication(::GetModuleHandleW(nullptr));
- return i;
-}
-
-IUiApplication* IUiApplication::GetInstance() {
- return ::cru::win::native::instance;
-}
-} // namespace cru::platform::native
-
-namespace cru::win::native {
-WinApplication* WinApplication::GetInstance() { return instance; }
-
-WinApplication::WinApplication(HINSTANCE h_instance) : h_instance_(h_instance) {
- assert(instance == nullptr);
-
- if (!::IsWindows8OrGreater())
- throw std::runtime_error("Must run on Windows 8 or later.");
-
- const auto graph_factory = platform::graph::IGraphFactory::CreateInstance();
- graph_factory->SetAutoDelete(true);
-
- god_window_ = std::make_shared<GodWindow>(this);
- timer_manager_ = std::make_shared<TimerManager>(god_window_.get());
- window_manager_ = std::make_shared<WindowManager>(this);
-}
-
-WinApplication::~WinApplication() { instance = nullptr; }
-
-int WinApplication::Run() {
- MSG msg;
- while (GetMessageW(&msg, nullptr, 0, 0)) {
- TranslateMessage(&msg);
- DispatchMessageW(&msg);
- }
-
- for (const auto& handler : quit_handlers_) handler();
-
- if (auto_delete_) delete this;
-
- return static_cast<int>(msg.wParam);
-}
-
-void WinApplication::Quit(const int quit_code) { ::PostQuitMessage(quit_code); }
-
-void WinApplication::AddOnQuitHandler(const std::function<void()>& handler) {
- quit_handlers_.push_back(handler);
-}
-
-void WinApplication::InvokeLater(const std::function<void()>& action) {
- // copy the action to a safe place
- auto p_action_copy = new std::function<void()>(action);
-
- if (PostMessageW(GetGodWindow()->GetHandle(), invoke_later_message_id,
- reinterpret_cast<WPARAM>(p_action_copy), 0) == 0)
- throw Win32Error(::GetLastError(), "InvokeLater failed to post message.");
-}
-
-unsigned long WinApplication::SetTimeout(std::chrono::milliseconds milliseconds,
- const std::function<void()>& action) {
- return static_cast<unsigned long>(timer_manager_->CreateTimer(
- static_cast<UINT>(milliseconds.count()), false, action));
-}
-
-unsigned long WinApplication::SetInterval(
- std::chrono::milliseconds milliseconds,
- const std::function<void()>& action) {
- return static_cast<unsigned long>(timer_manager_->CreateTimer(
- static_cast<UINT>(milliseconds.count()), true, action));
-}
-
-void WinApplication::CancelTimer(unsigned long id) {
- timer_manager_->KillTimer(static_cast<UINT_PTR>(id));
-}
-
-std::vector<platform::native::INativeWindow*> WinApplication::GetAllWindow() {
- const auto&& windows = window_manager_->GetAllWindows();
- std::vector<platform::native::INativeWindow*> result;
- for (const auto w : windows) {
- result.push_back(static_cast<platform::native::INativeWindow*>(w));
- }
- return result;
-}
-
-platform::native::INativeWindow* WinApplication::CreateWindow(
- platform::native::INativeWindow* parent) {
- WinNativeWindow* p = nullptr;
- if (parent != nullptr) {
- p = dynamic_cast<WinNativeWindow*>(parent);
- assert(p);
- }
- return new WinNativeWindow(this, window_manager_->GetGeneralWindowClass(),
- WS_OVERLAPPEDWINDOW, p);
-}
-} // namespace cru::win::native