diff options
author | crupest <crupest@outlook.com> | 2019-12-12 23:26:04 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-12-12 23:26:04 +0800 |
commit | f2aa96fba0b72eeeadf5160ea5df2c8143ec8aa0 (patch) | |
tree | b045d35bb2cf7281ab69abbd51302c85ea9ec3ef /include/cru/win/native/ui_application.hpp | |
parent | 02f46ada9ef85165759f5e58d665510077149ef3 (diff) | |
download | cru-f2aa96fba0b72eeeadf5160ea5df2c8143ec8aa0.tar.gz cru-f2aa96fba0b72eeeadf5160ea5df2c8143ec8aa0.tar.bz2 cru-f2aa96fba0b72eeeadf5160ea5df2c8143ec8aa0.zip |
...
Diffstat (limited to 'include/cru/win/native/ui_application.hpp')
-rw-r--r-- | include/cru/win/native/ui_application.hpp | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/include/cru/win/native/ui_application.hpp b/include/cru/win/native/ui_application.hpp index 94c4b1eb..65bdc9e4 100644 --- a/include/cru/win/native/ui_application.hpp +++ b/include/cru/win/native/ui_application.hpp @@ -1,39 +1,40 @@ #pragma once -#include "../win_pre_config.hpp" +#include "resource.hpp" #include "cru/platform/native/ui_application.hpp" -#include "platform_id.hpp" -#include "cursor.hpp" - #include <memory> +namespace cru::platform::graph::win::direct { +class DirectGraphFactory; +} + namespace cru::platform::native::win { class GodWindow; class TimerManager; class WindowManager; +class WinCursorManager; -class WinUiApplication : public UiApplication { - friend UiApplication* UiApplication::CreateInstance(); - +class WinUiApplication : public WinNativeResource, + public virtual IUiApplication { public: - static WinUiApplication* GetInstance(); + static WinUiApplication* GetInstance() { return instance; } + + private: + static WinUiApplication* instance; private: - explicit WinUiApplication(HINSTANCE h_instance); + WinUiApplication(); public: - WinUiApplication(const WinUiApplication&) = delete; - WinUiApplication(WinUiApplication&&) = delete; - WinUiApplication& operator=(const WinUiApplication&) = delete; - WinUiApplication& operator=(WinUiApplication&&) = delete; - ~WinUiApplication() override; + CRU_DELETE_COPY(WinUiApplication) + CRU_DELETE_MOVE(WinUiApplication) - CRU_PLATFORMID_IMPLEMENT_WIN + ~WinUiApplication() override; public: int Run() override; - void Quit(int quit_code) override; + void RequestQuit(int quit_code) override; void AddOnQuitHandler(const std::function<void()>& handler) override; @@ -47,25 +48,29 @@ class WinUiApplication : public UiApplication { std::vector<INativeWindow*> GetAllWindow() override; INativeWindow* CreateWindow(INativeWindow* parent) override; - WinCursorManager* GetCursorManager() override; + cru::platform::graph::IGraphFactory* GetGraphFactory() override; + + cru::platform::graph::win::direct::DirectGraphFactory* GetDirectFactory() { + return graph_factory_.get(); + } - bool IsAutoDelete() const { return auto_delete_; } - void SetAutoDelete(bool value) { auto_delete_ = value; } + ICursorManager* GetCursorManager() override; - HINSTANCE GetInstanceHandle() const { return h_instance_; } + 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: - bool auto_delete_ = false; + HINSTANCE instance_handle_; - HINSTANCE h_instance_; + std::unique_ptr<cru::platform::graph::win::direct::DirectGraphFactory> + graph_factory_; - std::shared_ptr<GodWindow> god_window_; - std::shared_ptr<TimerManager> timer_manager_; - std::shared_ptr<WindowManager> window_manager_; + std::unique_ptr<GodWindow> god_window_; + std::unique_ptr<TimerManager> timer_manager_; + std::unique_ptr<WindowManager> window_manager_; std::unique_ptr<WinCursorManager> cursor_manager_; |