From d86a71f79afe0e4dac768f61d6bff690567aca5b Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 24 May 2020 01:40:02 +0800 Subject: ... --- include/cru/win/native/UiApplication.hpp | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 include/cru/win/native/UiApplication.hpp (limited to 'include/cru/win/native/UiApplication.hpp') diff --git a/include/cru/win/native/UiApplication.hpp b/include/cru/win/native/UiApplication.hpp new file mode 100644 index 00000000..cbc08af7 --- /dev/null +++ b/include/cru/win/native/UiApplication.hpp @@ -0,0 +1,76 @@ +#pragma once +#include "Resource.hpp" + +#include "cru/platform/native/UiApplication.hpp" + +#include + +namespace cru::platform::graph::win::direct { +class DirectGraphFactory; +} + +namespace cru::platform::native::win { +class WinUiApplication : public WinNativeResource, + public virtual IUiApplication { + public: + static WinUiApplication* GetInstance() { return instance; } + + private: + static WinUiApplication* instance; + + public: + WinUiApplication(); + + CRU_DELETE_COPY(WinUiApplication) + CRU_DELETE_MOVE(WinUiApplication) + + ~WinUiApplication() override; + + public: + int Run() override; + void RequestQuit(int quit_code) override; + + void AddOnQuitHandler(std::function handler) override; + + void InvokeLater(std::function action) override; + long long SetTimeout(std::chrono::milliseconds milliseconds, + std::function action) override; + long long SetInterval(std::chrono::milliseconds milliseconds, + std::function action) override; + void CancelTimer(long long id) override; + + std::vector GetAllWindow() override; + std::shared_ptr CreateWindow( + INativeWindow* parent) override; + + cru::platform::graph::IGraphFactory* GetGraphFactory() override; + + cru::platform::graph::win::direct::DirectGraphFactory* GetDirectFactory() { + return graph_factory_.get(); + } + + ICursorManager* GetCursorManager() override; + IInputMethodManager* GetInputMethodManager() override; + + HINSTANCE GetInstanceHandle() const { return instance_handle_; } + + GodWindow* GetGodWindow() const { return god_window_.get(); } + TimerManager* GetTimerManager() const { return timer_manager_.get(); } + WindowManager* GetWindowManager() const { return window_manager_.get(); } + + private: + HINSTANCE instance_handle_; + + std::unique_ptr + graph_factory_; + + std::unique_ptr god_window_; + std::unique_ptr timer_manager_; + std::unique_ptr window_manager_; + + std::unique_ptr cursor_manager_; + std::unique_ptr input_method_manager_; + + std::vector> quit_handlers_; +}; +} // namespace cru::platform::native::win -- cgit v1.2.3