aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/animations/animation.cpp10
-rw-r--r--src/ui/animations/animation.hpp10
-rw-r--r--src/ui/control.cpp1
-rw-r--r--src/ui/controls/text_box.cpp1
-rw-r--r--src/ui/layout_base.cpp6
-rw-r--r--src/ui/layout_base.hpp4
-rw-r--r--src/ui/window.cpp22
-rw-r--r--src/ui/window.hpp3
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;