diff options
Diffstat (limited to 'include/cru/platform/win/win_application.hpp')
-rw-r--r-- | include/cru/platform/win/win_application.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/include/cru/platform/win/win_application.hpp b/include/cru/platform/win/win_application.hpp new file mode 100644 index 00000000..363ae170 --- /dev/null +++ b/include/cru/platform/win/win_application.hpp @@ -0,0 +1,53 @@ +#pragma once +#include "win_pre_config.hpp" + +#include "../ui_applicaition.hpp" +#include "cru/common/base.hpp" + +#include <memory> + +namespace cru::platform::win { +class GodWindow; +class TimerManager; + +class WinApplication : public Object, public virtual UiApplication { + public: + static WinApplication* GetInstance(); + + private: + static WinApplication* instance_; + + private: + explicit WinApplication(HINSTANCE h_instance); + + public: + WinApplication(const WinApplication&) = delete; + WinApplication(WinApplication&&) = delete; + WinApplication& operator=(const WinApplication&) = delete; + WinApplication& operator=(WinApplication&&) = delete; + ~WinApplication() override; + + public: + int Run() override; + void Quit(int quit_code) override; + + void InvokeLater(const std::function<void()>& action) override; + unsigned long SetTimeout(std::chrono::milliseconds milliseconds, + const std::function<void()>& action) override; + unsigned long SetInterval(std::chrono::milliseconds milliseconds, + const std::function<void()>& action) override; + void CancelTimer(unsigned long id) override; + + HINSTANCE GetInstanceHandle() const { return h_instance_; } + + GodWindow* GetGodWindow() const { return god_window_.get(); } + + TimerManager* GetTimerManager() const; + + private: + HINSTANCE h_instance_; + + std::shared_ptr<GodWindow> god_window_; + std::shared_ptr<TimerManager> timer_manager_; +}; +} // namespace cru::platform::win |