-
Notifications
You must be signed in to change notification settings - Fork 88
/
abstract_runner.cpp
124 lines (99 loc) · 2.84 KB
/
abstract_runner.cpp
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
#include "hello_imgui/internal/backend_impls/abstract_runner.h"
#include "hello_imgui/internal/docking_details.h"
#include "hello_imgui/internal/menu_statusbar.h"
#include "imgui.h"
namespace HelloImGui
{
void AbstractRunner::Run()
{
Setup();
#ifdef HELLOIMGUI_MOBILEDEVICE
while (true)
CreateFramesAndRender();
#else
while (!params.appShallExit)
CreateFramesAndRender();
#endif
TearDown();
}
void AbstractRunner::Setup()
{
Impl_InitBackend();
Impl_Select_Gl_Version();
Impl_CreateWindowAndContext();
Impl_InitGlLoader();
IMGUI_CHECKVERSION();
ImGui::CreateContext();
Impl_SetupImgGuiContext();
params.callbacks.SetupImGuiConfig();
params.callbacks.SetupImGuiStyle();
Impl_SetupPlatformRendererBindings();
ImGui::GetIO().Fonts->Clear();
params.callbacks.LoadAdditionalFonts();
ImGui::GetIO().Fonts->Build();
DockingDetails::ConfigureImGuiDocking(params.imGuiWindowParams);
if (params.callbacks.PostInit)
params.callbacks.PostInit();
}
void AbstractRunner::RenderGui()
{
DockingDetails::ProvideWindowOrDock(params.imGuiWindowParams, params.dockingParams);
if (params.imGuiWindowParams.showMenuBar)
Menu_StatusBar::ShowMenu(params);
if (params.callbacks.ShowGui)
params.callbacks.ShowGui();
DockingDetails::ShowDockableWindows(params.dockingParams.dockableWindows);
if (params.imGuiWindowParams.showStatusBar)
Menu_StatusBar::ShowStatusBar(params);
DockingDetails::CloseWindowOrDock(params.imGuiWindowParams);
}
void AbstractRunner::CreateFramesAndRender()
{
if (Impl_PollEvents())
params.appShallExit = true;
Impl_NewFrame_3D();
Impl_NewFrame_Backend();
ImGui::NewFrame();
RenderGui();
ImGui::Render();
Impl_Frame_3D_ClearColor();
Impl_RenderDrawData_To_3D();
if (ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
Impl_UpdateAndRenderAdditionalPlatformWindows();
Impl_SwapBuffers();
}
void AbstractRunner::OnPause()
{
#ifdef HELLOIMGUI_MOBILEDEVICE
if (params.callbacks.mobileCallbacks.OnPause)
params.callbacks.mobileCallbacks.OnPause();
#endif
}
void AbstractRunner::OnResume()
{
#ifdef HELLOIMGUI_MOBILEDEVICE
if (params.callbacks.mobileCallbacks.OnResume)
params.callbacks.mobileCallbacks.OnResume();
#endif
}
void AbstractRunner::OnDestroy()
{
#ifdef HELLOIMGUI_MOBILEDEVICE
if (params.callbacks.mobileCallbacks.OnDestroy)
params.callbacks.mobileCallbacks.OnDestroy();
#endif
}
void AbstractRunner::OnLowMemory()
{
#ifdef HELLOIMGUI_MOBILEDEVICE
if (params.callbacks.mobileCallbacks.OnLowMemory)
params.callbacks.mobileCallbacks.OnLowMemory();
#endif
}
void AbstractRunner::TearDown()
{
if (params.callbacks.BeforeExit)
params.callbacks.BeforeExit();
Impl_Cleanup();
}
} // namespace HelloImGui