diff options
Diffstat (limited to 'src/ui')
-rw-r--r-- | src/ui/animations/animation.cpp | 10 | ||||
-rw-r--r-- | src/ui/animations/animation.hpp | 10 | ||||
-rw-r--r-- | src/ui/control.cpp | 1 | ||||
-rw-r--r-- | src/ui/controls/text_box.cpp | 1 | ||||
-rw-r--r-- | src/ui/layout_base.cpp | 6 | ||||
-rw-r--r-- | src/ui/layout_base.hpp | 4 | ||||
-rw-r--r-- | src/ui/window.cpp | 22 | ||||
-rw-r--r-- | src/ui/window.hpp | 3 |
8 files changed, 39 insertions, 18 deletions
diff --git a/src/ui/animations/animation.cpp b/src/ui/animations/animation.cpp index 33c743cf..b1f92a3e 100644 --- a/src/ui/animations/animation.cpp +++ b/src/ui/animations/animation.cpp @@ -2,6 +2,8 @@ #include <utility> +#include "application.hpp" + namespace cru::ui::animations { namespace details @@ -66,6 +68,14 @@ namespace cru::ui::animations AnimationTimeUnit current_time_ = AnimationTimeUnit::zero(); }; + AnimationManager* AnimationManager::GetInstance() + { + return Application::GetInstance()->ResolveSingleton<AnimationManager>([](auto) + { + return new AnimationManager{}; + }); + } + AnimationManager::AnimationManager() { diff --git a/src/ui/animations/animation.hpp b/src/ui/animations/animation.hpp index 99389f33..f25e4699 100644 --- a/src/ui/animations/animation.hpp +++ b/src/ui/animations/animation.hpp @@ -3,7 +3,6 @@ #include <unordered_map> #include "base.hpp" -#include "application.hpp" #include "timer.hpp" namespace cru::ui::animations @@ -53,13 +52,10 @@ namespace cru::ui::animations class AnimationManager : public Object { public: - static AnimationManager* GetInstance() - { - return Application::GetInstance()->GetAnimationManager(); - } - - public: + static AnimationManager* GetInstance(); + private: AnimationManager(); + public: AnimationManager(const AnimationManager& other) = delete; AnimationManager(AnimationManager&& other) = delete; AnimationManager& operator=(const AnimationManager& other) = delete; diff --git a/src/ui/control.cpp b/src/ui/control.cpp index bb3e35f8..31910328 100644 --- a/src/ui/control.cpp +++ b/src/ui/control.cpp @@ -3,6 +3,7 @@ #include <algorithm> #include "window.hpp" +#include "application.hpp" #include "graph/graph.hpp" #include "exception.hpp" #include "cru_debug.hpp" diff --git a/src/ui/controls/text_box.cpp b/src/ui/controls/text_box.cpp index 605e1a24..cb5d79a2 100644 --- a/src/ui/controls/text_box.cpp +++ b/src/ui/controls/text_box.cpp @@ -5,6 +5,7 @@ #include "graph/graph.hpp" #include "exception.hpp" +#include "application.hpp" namespace cru::ui::controls { diff --git a/src/ui/layout_base.cpp b/src/ui/layout_base.cpp index a384500a..5363c52b 100644 --- a/src/ui/layout_base.cpp +++ b/src/ui/layout_base.cpp @@ -8,8 +8,10 @@ namespace cru::ui { LayoutManager* LayoutManager::GetInstance() { - static LayoutManager layout_manager; - return &layout_manager; + return Application::GetInstance()->ResolveSingleton<LayoutManager>([](auto) + { + return new LayoutManager{}; + }); } void LayoutManager::InvalidateControlPositionCache(Control * control) diff --git a/src/ui/layout_base.hpp b/src/ui/layout_base.hpp index 1c35f0b7..512301b7 100644 --- a/src/ui/layout_base.hpp +++ b/src/ui/layout_base.hpp @@ -147,9 +147,9 @@ namespace cru::ui { public: static LayoutManager* GetInstance(); - - public: + private: LayoutManager() = default; + public: LayoutManager(const LayoutManager& other) = delete; LayoutManager(LayoutManager&& other) = delete; LayoutManager& operator=(const LayoutManager& other) = delete; diff --git a/src/ui/window.cpp b/src/ui/window.cpp index e426bc78..349b78ff 100644 --- a/src/ui/window.cpp +++ b/src/ui/window.cpp @@ -31,7 +31,7 @@ namespace cru::ui } LRESULT __stdcall GeneralWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { - auto window = Application::GetInstance()->GetWindowManager()->FromHandle(hWnd); + auto window = WindowManager::GetInstance()->FromHandle(hWnd); LRESULT result; if (window != nullptr && window->HandleWindowMessage(hWnd, Msg, wParam, lParam, result)) @@ -40,6 +40,14 @@ namespace cru::ui return DefWindowProc(hWnd, Msg, wParam, lParam); } + WindowManager* WindowManager::GetInstance() + { + return Application::GetInstance()->ResolveSingleton<WindowManager>([](auto) + { + return new WindowManager{}; + }); + } + WindowManager::WindowManager() { general_window_class_ = std::make_unique<WindowClass>( L"CruUIWindowClass", @@ -106,20 +114,20 @@ namespace cru::ui } Window::Window() : Control(WindowConstructorTag{}, this), control_list_({ this }) { - const auto app = Application::GetInstance(); + const auto window_manager = WindowManager::GetInstance(); hwnd_ = CreateWindowEx(0, - app->GetWindowManager()->GetGeneralWindowClass()->GetName(), + window_manager->GetGeneralWindowClass()->GetName(), L"", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - nullptr, nullptr, app->GetInstanceHandle(), nullptr + nullptr, nullptr, Application::GetInstance()->GetInstanceHandle(), nullptr ); if (hwnd_ == nullptr) throw std::runtime_error("Failed to create window."); - app->GetWindowManager()->RegisterWindow(hwnd_, this); + window_manager->RegisterWindow(hwnd_, this); - render_target_ = app->GetGraphManager()->CreateWindowRenderTarget(hwnd_); + render_target_ = graph::GraphManager::GetInstance()->CreateWindowRenderTarget(hwnd_); SetCursor(cursors::arrow); } @@ -511,7 +519,7 @@ namespace cru::ui } void Window::OnDestroyInternal() { - Application::GetInstance()->GetWindowManager()->UnregisterWindow(hwnd_); + WindowManager::GetInstance()->UnregisterWindow(hwnd_); hwnd_ = nullptr; } diff --git a/src/ui/window.hpp b/src/ui/window.hpp index 9f773f55..2609594d 100644 --- a/src/ui/window.hpp +++ b/src/ui/window.hpp @@ -44,7 +44,10 @@ namespace cru::ui class WindowManager : public Object { public: + static WindowManager* GetInstance(); + private: WindowManager(); + public: WindowManager(const WindowManager& other) = delete; WindowManager(WindowManager&& other) = delete; WindowManager& operator=(const WindowManager& other) = delete; |