aboutsummaryrefslogtreecommitdiff
path: root/src/win/native/ui_application.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/ui_application.cpp
parentf3a8fd608a9776ef0a5f547da918a32cf6074060 (diff)
downloadcru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.gz
cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.tar.bz2
cru-d86a71f79afe0e4dac768f61d6bff690567aca5b.zip
...
Diffstat (limited to 'src/win/native/ui_application.cpp')
-rw-r--r--src/win/native/ui_application.cpp124
1 files changed, 0 insertions, 124 deletions
diff --git a/src/win/native/ui_application.cpp b/src/win/native/ui_application.cpp
deleted file mode 100644
index 599ecadc..00000000
--- a/src/win/native/ui_application.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-#include "cru/win/native/ui_application.hpp"
-
-#include "../debug_logger.hpp"
-#include "cru/common/logger.hpp"
-#include "cru/platform/check.hpp"
-#include "cru/win/graph/direct/factory.hpp"
-#include "cru/win/native/cursor.hpp"
-#include "cru/win/native/exception.hpp"
-#include "cru/win/native/god_window.hpp"
-#include "cru/win/native/input_method.hpp"
-#include "cru/win/native/window.hpp"
-#include "god_window_message.hpp"
-#include "timer.hpp"
-#include "window_manager.hpp"
-
-namespace cru::platform::native {
-std::unique_ptr<IUiApplication> CreateUiApplication() {
- return std::make_unique<win::WinUiApplication>();
-}
-} // namespace cru::platform::native
-
-namespace cru::platform::native::win {
-WinUiApplication* WinUiApplication::instance = nullptr;
-
-WinUiApplication::WinUiApplication() {
- instance = this;
-
- instance_handle_ = ::GetModuleHandleW(nullptr);
- if (!instance_handle_)
- throw Win32Error("Failed to get module(instance) handle.");
-
- log::Logger::GetInstance()->AddSource(
- std::make_unique<::cru::platform::win::WinDebugLoggerSource>());
-
- graph_factory_ =
- std::make_unique<cru::platform::graph::win::direct::DirectGraphFactory>();
-
- god_window_ = std::make_unique<GodWindow>(this);
- timer_manager_ = std::make_unique<TimerManager>(god_window_.get());
- window_manager_ = std::make_unique<WindowManager>(this);
- cursor_manager_ = std::make_unique<WinCursorManager>();
- input_method_manager_ = std::make_unique<WinInputMethodManager>(this);
-}
-
-WinUiApplication::~WinUiApplication() { instance = nullptr; }
-
-int WinUiApplication::Run() {
- MSG msg;
- while (GetMessageW(&msg, nullptr, 0, 0)) {
- TranslateMessage(&msg);
- DispatchMessageW(&msg);
- }
-
- for (const auto& handler : quit_handlers_) handler();
-
- return static_cast<int>(msg.wParam);
-}
-
-void WinUiApplication::RequestQuit(const int quit_code) {
- ::PostQuitMessage(quit_code);
-}
-
-void WinUiApplication::AddOnQuitHandler(std::function<void()> handler) {
- quit_handlers_.push_back(std::move(handler));
-}
-
-void WinUiApplication::InvokeLater(std::function<void()> action) {
- // copy the action to a safe place
- auto p_action_copy = new std::function<void()>(std::move(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.");
-}
-
-long long WinUiApplication::SetTimeout(std::chrono::milliseconds milliseconds,
- std::function<void()> action) {
- return gsl::narrow<long long>(timer_manager_->CreateTimer(
- static_cast<UINT>(milliseconds.count()), false, std::move(action)));
-}
-
-long long WinUiApplication::SetInterval(std::chrono::milliseconds milliseconds,
- std::function<void()> action) {
- return gsl::narrow<long long>(timer_manager_->CreateTimer(
- static_cast<UINT>(milliseconds.count()), true, std::move(action)));
-}
-
-void WinUiApplication::CancelTimer(long long id) {
- if (id < 0) return;
- timer_manager_->KillTimer(static_cast<UINT_PTR>(id));
-}
-
-std::vector<INativeWindow*> WinUiApplication::GetAllWindow() {
- const auto&& windows = window_manager_->GetAllWindows();
- std::vector<INativeWindow*> result;
- for (const auto w : windows) {
- result.push_back(static_cast<INativeWindow*>(w));
- }
- return result;
-}
-
-std::shared_ptr<INativeWindowResolver> WinUiApplication::CreateWindow(
- INativeWindow* parent) {
- WinNativeWindow* p = nullptr;
- if (parent != nullptr) {
- p = CheckPlatform<WinNativeWindow>(parent, GetPlatformId());
- }
- return (new WinNativeWindow(this, window_manager_->GetGeneralWindowClass(),
- WS_OVERLAPPEDWINDOW, p))
- ->GetResolver();
-}
-
-cru::platform::graph::IGraphFactory* WinUiApplication::GetGraphFactory() {
- return graph_factory_.get();
-}
-
-ICursorManager* WinUiApplication::GetCursorManager() {
- return cursor_manager_.get();
-}
-
-IInputMethodManager* WinUiApplication::GetInputMethodManager() {
- return input_method_manager_.get();
-}
-} // namespace cru::platform::native::win