88 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0)
90 printf(
"Error: %s\n", SDL_GetError());
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,
109 if (window ==
nullptr)
111 printf(
"Error: SDL_CreateWindow(): %s\n", SDL_GetError());
116 SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
117 if (renderer ==
nullptr)
119 printf(
"Error creating SDL_Renderer: %s\n", SDL_GetError());
124 IMGUI_CHECKVERSION();
125 ImGui::CreateContext();
126 ImGuiIO& io = ImGui::GetIO(); (void)io;
127 io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
130 static std::string imguiIniPath;
134 fs::create_directories(settingsDir);
136 imguiIniPath = (settingsDir /
"imgui.ini").
string();
137 io.IniFilename = imguiIniPath.c_str();
141 ImFontConfig fontConfig;
143 io.Fonts->AddFontDefault(&fontConfig);
146 ImGui::StyleColorsDark();
150 ImGui_ImplSDL2_InitForSDLRenderer(window, renderer);
151 ImGui_ImplSDLRenderer2_Init(renderer);
162 while (SDL_PollEvent(&event))
164 ImGui_ImplSDL2_ProcessEvent(&event);
165 if (event.type == SDL_QUIT)
167 if (event.type == SDL_WINDOWEVENT &&
168 event.window.event == SDL_WINDOWEVENT_CLOSE &&
169 event.window.windowID == SDL_GetWindowID(window))
174 ImGui_ImplSDLRenderer2_NewFrame();
175 ImGui_ImplSDL2_NewFrame();
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);
191 int windowWidth, windowHeight;
192 SDL_GetWindowSize(window, &windowWidth, &windowHeight);
198 ImGui_ImplSDLRenderer2_Shutdown();
199 ImGui_ImplSDL2_Shutdown();
200 ImGui::DestroyContext();
202 SDL_DestroyRenderer(renderer);
203 SDL_DestroyWindow(window);