From 6aaedb813fa11ba0679c3051bc2eb28646b9506c Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 30 Aug 2025 16:53:58 -0700 Subject: Update to SDL3 --- src/xplorer.c | 139 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 70 insertions(+), 69 deletions(-) (limited to 'src/xplorer.c') diff --git a/src/xplorer.c b/src/xplorer.c index 5e69d82..4b8bcfc 100644 --- a/src/xplorer.c +++ b/src/xplorer.c @@ -1,6 +1,6 @@ #include -#include +#include #include #include @@ -210,7 +210,7 @@ static bool Render(State* state) { .pixels = window_surface->pixels, }); - if (SDL_UpdateWindowSurface(state->window) != 0) { + if (!SDL_UpdateWindowSurface(state->window)) { return false; } @@ -244,12 +244,14 @@ bool Initialize(State* state) { assert(state); if ((state->window = SDL_CreateWindow( - WindowTitle, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - DefaultWidth, DefaultHeight, - SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE)) == NULL) { + WindowTitle, DefaultWidth, DefaultHeight, SDL_WINDOW_RESIZABLE)) == + NULL) { return false; } + // SDL_SetWindowSurfaceVSync(state->window, + // SDL_WINDOW_SURFACE_VSYNC_ADAPTIVE); + CreateUi(state); path home = path_new(getenv("HOME")); @@ -265,7 +267,7 @@ int main( State state = {0}; - if (SDL_Init(SDL_INIT_VIDEO) != 0) { + if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS)) { return false; } @@ -305,75 +307,74 @@ int main( // Handle events. SDL_Event event = {0}; - if (SDL_WaitEvent(&event) == 0) { + if (!SDL_WaitEvent(&event)) { success = false; break; - } else if (event.type == SDL_QUIT) { + } + if ((event.type == SDL_EVENT_QUIT) || + (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED)) { break; - } else { - if (event.type == SDL_WINDOWEVENT) { - // When the window is maximized, an SDL_WINDOWEVENT_MOVED comes in - // before an SDL_WINDOWEVENT_SIZE_CHANGED with the window already - // resized. This is unfortunate because we cannot rely on the latter - // event alone to handle resizing. - if ((event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) || - (event.window.event == SDL_WINDOWEVENT_RESIZED) || - (event.window.event == SDL_WINDOWEVENT_MOVED)) { - if (!Resize(&state)) { - success = false; - break; - } - redraw = true; - } - } else if (event.type == SDL_KEYDOWN) { - if (event.key.keysym.mod & KMOD_LCTRL) { - switch (event.key.keysym.sym) { - // Exit. - case SDLK_c: - case SDLK_d: - running = false; - break; - default: - break; - } + } + // When the window is maximized, an SDL_WINDOWEVENT_MOVED comes in + // before an SDL_WINDOWEVENT_SIZE_CHANGED with the window already + // resized. This is unfortunate because we cannot rely on the latter + // event alone to handle resizing. + if ((event.window.type == SDL_EVENT_WINDOW_DISPLAY_CHANGED) || + (event.window.type == SDL_EVENT_WINDOW_RESIZED) || + (event.window.type == SDL_EVENT_WINDOW_MOVED)) { + if (!Resize(&state)) { + success = false; + break; + } + redraw = true; + } else if (event.type == SDL_EVENT_KEY_DOWN) { + if (event.key.mod & SDL_KMOD_LCTRL) { + switch (event.key.key) { + // Exit. + case SDLK_C: + case SDLK_D: + running = false; + break; + default: + break; } - } else if (event.type == SDL_MOUSEBUTTONDOWN) { - const uiInputEvent ev = { - .type = uiEventMouseButton, - .mouse_button = (uiMouseButtonEvent){ - .button = ToUiButton(event.button.button), - .state = uiMouseDown, - .mouse_position = - (uiPoint){.x = event.button.x, .y = event.button.y}} - }; - redraw = uiSendEvent(state.frame, &ev); - } else if (event.type == SDL_MOUSEBUTTONUP) { - const uiInputEvent ev = { - .type = uiEventMouseButton, - .mouse_button = (uiMouseButtonEvent){ - .button = ToUiButton(event.button.button), - .state = uiMouseUp, - .mouse_position = - (uiPoint){.x = event.button.x, .y = event.button.y}} - }; - redraw = uiSendEvent(state.frame, &ev); - } else if (event.type == SDL_MOUSEWHEEL) { - const uiInputEvent ev = { - .type = uiEventMouseScroll, - .mouse_scroll = (uiMouseScrollEvent){ - .scroll_offset = event.wheel.y, - .mouse_position = (uiPoint){ - .x = event.wheel.mouseX, .y = event.wheel.mouseY}} - }; - redraw = uiSendEvent(state.frame, &ev); - } else { - EVENT_LOOP_PRINT("event.window.event = %d\n", event.window.event); } + } else if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { + const uiInputEvent ui_event = { + .type = uiEventMouseButton, + .mouse_button = (uiMouseButtonEvent){ + .button = ToUiButton(event.button.button), + .state = uiMouseDown, + .mouse_position = + (uiPoint){.x = event.button.x, .y = event.button.y}} + }; + redraw = uiSendEvent(state.frame, &ui_event); + } else if (event.type == SDL_EVENT_MOUSE_BUTTON_UP) { + const uiInputEvent ev = { + .type = uiEventMouseButton, + .mouse_button = (uiMouseButtonEvent){ + .button = ToUiButton(event.button.button), + .state = uiMouseUp, + .mouse_position = + (uiPoint){.x = event.button.x, .y = event.button.y}} + }; + redraw = uiSendEvent(state.frame, &ev); + } else if (event.type == SDL_EVENT_MOUSE_WHEEL) { + const uiInputEvent ev = { + .type = uiEventMouseScroll, + .mouse_scroll = (uiMouseScrollEvent){ + .scroll_offset = event.wheel.y, + .mouse_position = (uiPoint){.x = event.wheel.mouse_x, + .y = event.wheel.mouse_y}} + }; + redraw = uiSendEvent(state.frame, &ev); + } else { + EVENT_LOOP_PRINT("event.window.event = %d\n", event.window.event); + } - if (HandleWidgetEvents(&state)) { - Resize(&state); // Trigger a re-layout of widgets. - redraw = true; - } + if (HandleWidgetEvents(&state)) { + Resize(&state); // Trigger a re-layout of widgets. + redraw = true; } } -- cgit v1.2.3