From 4ef3f34da4eac83188e60d45c122fe429f82610c Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sun, 8 Mar 2026 09:54:40 -0700 Subject: High DPI --- src/xplorer.c | 61 +++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/xplorer.c b/src/xplorer.c index 53badc3..db9cf7d 100644 --- a/src/xplorer.c +++ b/src/xplorer.c @@ -11,8 +11,8 @@ #include static const char* WindowTitle = "XPLORER"; -static const int DefaultWidth = 1440; -static const int DefaultHeight = 900; +static const int DefaultWidth = 720; +static const int DefaultHeight = 450; // #define DEBUG_EVENT_LOOP 1 @@ -31,6 +31,9 @@ typedef struct State { uiMouseButton ToUiButton(Uint8 button); +void MouseCoordsToUiCoords( + SDL_Window*, float mouse_x, float mouse_y, int* x, int* y); + void CreateUi(State* state) { assert(state); @@ -244,8 +247,8 @@ bool Initialize(State* state) { assert(state); if ((state->window = SDL_CreateWindow( - WindowTitle, DefaultWidth, DefaultHeight, SDL_WINDOW_RESIZABLE)) == - NULL) { + WindowTitle, DefaultWidth, DefaultHeight, + SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIGH_PIXEL_DENSITY)) == NULL) { return false; } @@ -337,32 +340,38 @@ int main( } } } else if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { + int x, y; + MouseCoordsToUiCoords( + state.window, event.button.x, event.button.y, &x, &y); 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}} + .type = uiEventMouseButton, + .mouse_button = + (uiMouseButtonEvent){.button = ToUiButton(event.button.button), + .state = uiMouseDown, + .mouse_position = (uiPoint){x, y}} }; redraw = uiSendEvent(state.frame, &ui_event); } else if (event.type == SDL_EVENT_MOUSE_BUTTON_UP) { + int x, y; + MouseCoordsToUiCoords( + state.window, event.button.x, event.button.y, &x, &y); 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}} + .type = uiEventMouseButton, + .mouse_button = + (uiMouseButtonEvent){.button = ToUiButton(event.button.button), + .state = uiMouseUp, + .mouse_position = (uiPoint){x, y}} }; redraw = uiSendEvent(state.frame, &ev); } else if (event.type == SDL_EVENT_MOUSE_WHEEL) { + int x, y; + MouseCoordsToUiCoords( + state.window, event.wheel.mouse_x, event.wheel.mouse_y, &x, &y); 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}} + .type = uiEventMouseScroll, + .mouse_scroll = + (uiMouseScrollEvent){.scroll_offset = (int)event.wheel.y, + .mouse_position = (uiPoint){x, y}} }; redraw = uiSendEvent(state.frame, &ev); } else { @@ -400,3 +409,13 @@ uiMouseButton ToUiButton(Uint8 button) { // TODO: Buttons. return uiLMB; } + +void MouseCoordsToUiCoords( + SDL_Window* window, float mouse_x, float mouse_y, int* x, int* y) { + assert(window); + assert(x); + assert(y); + const float d = SDL_GetWindowPixelDensity(window); + *x = (int)(mouse_x * d); + *y = (int)(mouse_y * d); +} -- cgit v1.2.3