diff options
Diffstat (limited to 'src/platform_win/win_application.cpp')
-rw-r--r-- | src/platform_win/win_application.cpp | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/src/platform_win/win_application.cpp b/src/platform_win/win_application.cpp deleted file mode 100644 index ce187136..00000000 --- a/src/platform_win/win_application.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "cru/platform/win/win_application.hpp" - -#include "cru/platform/win/exception.hpp" -#include "cru/platform/win/god_window.hpp" -#include "cru/platform/win/graph_manager.hpp" -#include "cru/platform/win/win_graph_factory.hpp" -#include "cru/platform/win/win_native_window.hpp" -#include "god_window_message.hpp" -#include "timer.hpp" -#include "window_manager.hpp" - -#include <VersionHelpers.h> -#include <cassert> - -namespace cru::platform { -UiApplication* UiApplication::GetInstance() { - return win::WinApplication::GetInstance(); -} -} // namespace cru::platform - -namespace cru::platform::win { -WinApplication* WinApplication::instance_ = nullptr; - -WinApplication* WinApplication::GetInstance() { - if (instance_ == nullptr) - instance_ = new WinApplication(::GetModuleHandleW(nullptr)); - return instance_; -} - -WinApplication::WinApplication(HINSTANCE h_instance) : h_instance_(h_instance) { - if (instance_) - throw std::runtime_error("A application instance already exists."); - - instance_ = this; - - if (!::IsWindows8OrGreater()) - throw std::runtime_error("Must run on Windows 8 or later."); - - god_window_ = std::make_shared<GodWindow>(this); - timer_manager_ = std::make_shared<TimerManager>(god_window_.get()); - window_manager_ = std::make_shared<WindowManager>(this); - graph_manager_ = std::make_shared<GraphManager>(); - graph_factory_ = std::make_shared<WinGraphFactory>(graph_manager_.get()); -} - -WinApplication::~WinApplication() { instance_ = nullptr; } - -int WinApplication::Run() { - MSG msg; - while (GetMessageW(&msg, nullptr, 0, 0)) { - TranslateMessage(&msg); - DispatchMessageW(&msg); - } - return static_cast<int>(msg.wParam); -} - -void WinApplication::Quit(const int quit_code) { ::PostQuitMessage(quit_code); } - -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<NativeWindow*> WinApplication::GetAllWindow() { - const auto&& windows = window_manager_->GetAllWindows(); - std::vector<NativeWindow*> result; - for (const auto w : windows) { - result.push_back(static_cast<NativeWindow*>(w)); - } - return result; -} - -NativeWindow* WinApplication::CreateWindow(NativeWindow* parent) { - WinNativeWindow* p = nullptr; - if (parent != nullptr) { - p = dynamic_cast<WinNativeWindow*>(parent); - assert(p); - } - return new WinNativeWindow(this, window_manager_->GetGeneralWindowClass(), - WS_OVERLAPPEDWINDOW, p); -} - -GraphFactory* WinApplication::GetGraphFactory() { return graph_factory_.get(); } -} // namespace cru::platform::win |