64 return absl::FailedPreconditionError(
65 "Legacy SDL2 window path is unavailable when building with SDL3");
67 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) != 0) {
68 return absl::InternalError(
69 absl::StrFormat(
"SDL_Init: %s\n", SDL_GetError()));
72 SDL_DisplayMode display_mode;
73 SDL_GetCurrentDisplayMode(0, &display_mode);
74 int screen_width = display_mode.w * 0.8;
75 int screen_height = display_mode.h * 0.8;
77 window.
window_ = std::unique_ptr<SDL_Window, util::SDL_Deleter>(
78 SDL_CreateWindow(
"Yet Another Zelda3 Editor", SDL_WINDOWPOS_UNDEFINED,
79 SDL_WINDOWPOS_UNDEFINED, screen_width, screen_height,
82 if (window.
window_ ==
nullptr) {
83 return absl::InternalError(
84 absl::StrFormat(
"SDL_CreateWindow: %s\n", SDL_GetError()));
90 return absl::InternalError(
"Failed to initialize renderer");
95 ImGui::CreateContext();
96 ImGuiIO& io = ImGui::GetIO();
97 io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
98 io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
102 io.ConfigMacOSXBehaviors =
true;
106#ifdef IMGUI_DISABLE_DEFAULT_ASSERT_HANDLER
107 ImGui::SetAssertHandler(ImGuiAssertionHandler);
110 LOG_INFO(
"Window",
"ImGui assertions are disabled in this build");
114#if defined(YAZE_ENABLE_IMGUI_TEST_ENGINE) && YAZE_ENABLE_IMGUI_TEST_ENGINE
120 SDL_Renderer* sdl_renderer =
122 ImGui_ImplSDL2_InitForSDLRenderer(window.
window_.get(), sdl_renderer);
123 ImGui_ImplSDLRenderer2_Init(sdl_renderer);
134 const int audio_frequency = 48000;
135 const size_t buffer_size =
136 (audio_frequency / 50) * 2;
141 new int16_t[buffer_size], std::default_delete<int16_t[]>());
147 "Audio buffer allocated: %zu int16_t samples (backend in Emulator)",
151 return absl::OkStatus();
202 return absl::FailedPreconditionError(
203 "Legacy SDL2 window path is unavailable when building with SDL3");
206 ImGuiIO& io = ImGui::GetIO();
210 while (SDL_PollEvent(&event)) {
211 ImGui_ImplSDL2_ProcessEvent(&event);
212 switch (event.type) {
216 case SDL_WINDOWEVENT:
217 switch (event.window.event) {
218 case SDL_WINDOWEVENT_CLOSE:
221 case SDL_WINDOWEVENT_SIZE_CHANGED:
222 case SDL_WINDOWEVENT_RESIZED:
224 io.DisplaySize.x =
static_cast<float>(
event.window.data1);
225 io.DisplaySize.y =
static_cast<float>(
event.window.data2);
228 case SDL_WINDOWEVENT_MINIMIZED:
229 case SDL_WINDOWEVENT_HIDDEN:
233 case SDL_WINDOWEVENT_RESTORED:
234 case SDL_WINDOWEVENT_SHOWN:
235 case SDL_WINDOWEVENT_EXPOSED:
245 const int buttons = SDL_GetMouseState(&mouseX, &mouseY);
247 io.DeltaTime = 1.0f / 60.0f;
248 io.MousePos = ImVec2(
static_cast<float>(mouseX),
static_cast<float>(mouseY));
249 io.MouseDown[0] = buttons & SDL_BUTTON(SDL_BUTTON_LEFT);
250 io.MouseDown[1] = buttons & SDL_BUTTON(SDL_BUTTON_RIGHT);
251 io.MouseDown[2] = buttons & SDL_BUTTON(SDL_BUTTON_MIDDLE);
254 io.MouseWheel =
static_cast<float>(wheel);
255 return absl::OkStatus();