86{
87
88 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0)
89 {
90 printf("Error: %s\n", SDL_GetError());
91 return -1;
92 }
93
94
97
98
99 SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
100 SDL_Window* window = SDL_CreateWindow(
101 "PEBL Experiment Launcher",
102 SDL_WINDOWPOS_CENTERED,
103 SDL_WINDOWPOS_CENTERED,
106 window_flags
107 );
108
109 if (window == nullptr)
110 {
111 printf("Error: SDL_CreateWindow(): %s\n", SDL_GetError());
112 return -1;
113 }
114
115
116 SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
117 if (renderer == nullptr)
118 {
119 printf("Error creating SDL_Renderer: %s\n", SDL_GetError());
120 return -1;
121 }
122
123
124 IMGUI_CHECKVERSION();
125 ImGui::CreateContext();
126 ImGuiIO& io = ImGui::GetIO(); (void)io;
127 io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
128
129
130 static std::string imguiIniPath;
131 {
133 try {
134 fs::create_directories(settingsDir);
135 } catch (...) {}
136 imguiIniPath = (settingsDir / "imgui.ini").string();
137 io.IniFilename = imguiIniPath.c_str();
138 }
139
140
141 ImFontConfig fontConfig;
143 io.Fonts->AddFontDefault(&fontConfig);
144
145
146 ImGui::StyleColorsDark();
147
148
149
150 ImGui_ImplSDL2_InitForSDLRenderer(window, renderer);
151 ImGui_ImplSDLRenderer2_Init(renderer);
152
153
155
156
157 bool done = false;
158 while (!done)
159 {
160
161 SDL_Event event;
162 while (SDL_PollEvent(&event))
163 {
164 ImGui_ImplSDL2_ProcessEvent(&event);
165 if (event.type == SDL_QUIT)
166 done = true;
167 if (event.type == SDL_WINDOWEVENT &&
168 event.window.event == SDL_WINDOWEVENT_CLOSE &&
169 event.window.windowID == SDL_GetWindowID(window))
170 done = true;
171 }
172
173
174 ImGui_ImplSDLRenderer2_NewFrame();
175 ImGui_ImplSDL2_NewFrame();
176 ImGui::NewFrame();
177
178
179 launcherUI.Render(&done);
180
181
182 ImGui::Render();
183 SDL_RenderSetScale(renderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
184 SDL_SetRenderDrawColor(renderer, 45, 45, 48, 255);
185 SDL_RenderClear(renderer);
186 ImGui_ImplSDLRenderer2_RenderDrawData(ImGui::GetDrawData(), renderer);
187 SDL_RenderPresent(renderer);
188 }
189
190
191 int windowWidth, windowHeight;
192 SDL_GetWindowSize(window, &windowWidth, &windowHeight);
196
197
198 ImGui_ImplSDLRenderer2_Shutdown();
199 ImGui_ImplSDL2_Shutdown();
200 ImGui::DestroyContext();
201
202 SDL_DestroyRenderer(renderer);
203 SDL_DestroyWindow(window);
204 SDL_Quit();
205
206 return 0;
207}
void SetWindowWidth(int width)
int GetWindowWidth() const
void SetWindowHeight(int height)
std::string GetWorkspacePath() const
int GetWindowHeight() const