blob: 106e71719cf775e5a98b7f6f1aa8045b1270bc51 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#pragma once
#include "system_headers.h"
#include <memory>
#include <optional>
#include "base.h"
namespace cru
{
class Application;
namespace ui
{
class WindowClass;
class WindowManager;
namespace animations::details
{
class AnimationManager;
}
}
namespace graph
{
class GraphManager;
}
class TimerManager;
struct CaretInfo
{
std::chrono::milliseconds caret_blink_duration;
float half_caret_width;
};
class GodWindow : public Object
{
public:
explicit GodWindow(Application* application);
GodWindow(const GodWindow& other) = delete;
GodWindow(GodWindow&& other) = delete;
GodWindow& operator=(const GodWindow& other) = delete;
GodWindow& operator=(GodWindow&& other) = delete;
~GodWindow() override;
HWND GetHandle() const
{
return hwnd_;
}
std::optional<LRESULT> HandleGodWindowMessage(HWND hwnd, int msg, WPARAM w_param, LPARAM l_param);
private:
Application* application_;
std::unique_ptr<ui::WindowClass> god_window_class_;
HWND hwnd_;
};
class Application : public Object
{
public:
static Application* GetInstance();
private:
static Application* instance_;
public:
explicit Application(HINSTANCE h_instance);
Application(const Application&) = delete;
Application(Application&&) = delete;
Application& operator = (const Application&) = delete;
Application& operator = (Application&&) = delete;
~Application() override;
public:
int Run();
void Quit(int quit_code);
ui::WindowManager* GetWindowManager() const
{
return window_manager_.get();
}
graph::GraphManager* GetGraphManager() const
{
return graph_manager_.get();
}
TimerManager* GetTimerManager() const
{
return timer_manager_.get();
}
ui::animations::details::AnimationManager* GetAnimationManager() const
{
return animation_manager_.get();
}
HINSTANCE GetInstanceHandle() const
{
return h_instance_;
}
GodWindow* GetGodWindow() const
{
return god_window_.get();
}
CaretInfo GetCaretInfo() const
{
return caret_info_;
}
#ifdef CRU_DEBUG_DRAW_CONTROL_BORDER
Microsoft::WRL::ComPtr<ID2D1Brush> GetDebugBorderBrush() const
{
return debug_border_brush_;
}
#endif
private:
HINSTANCE h_instance_;
std::unique_ptr<ui::WindowManager> window_manager_;
std::unique_ptr<graph::GraphManager> graph_manager_;
std::unique_ptr<TimerManager> timer_manager_;
std::unique_ptr<ui::animations::details::AnimationManager> animation_manager_;
std::unique_ptr<GodWindow> god_window_;
#ifdef CRU_DEBUG_DRAW_CONTROL_BORDER
Microsoft::WRL::ComPtr<ID2D1Brush> debug_border_brush_;
#endif
CaretInfo caret_info_;
};
using InvokeLaterAction = Function<void()>;
void InvokeLater(InvokeLaterAction&& action);
}
|