From 0adb12e106537e1836701aff0357481e05fd2370 Mon Sep 17 00:00:00 2001 From: Arnav Bhatt Date: Thu, 20 Jun 2024 03:20:01 +0530 Subject: [PATCH] add window resize and position change support Signed-off-by: Arnav Bhatt --- src/video/kolibri/SDL_kolibrivideo.c | 8 +++++--- src/video/kolibri/SDL_kolibrivideo.h | 1 - src/video/kolibri/SDL_kolibriwindow.c | 22 +++++++++++++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/video/kolibri/SDL_kolibrivideo.c b/src/video/kolibri/SDL_kolibrivideo.c index 2b2e4c5..3de88ff 100644 --- a/src/video/kolibri/SDL_kolibrivideo.c +++ b/src/video/kolibri/SDL_kolibrivideo.c @@ -29,12 +29,14 @@ int KOLIBRI_VideoInit(_THIS) { SDL_DisplayMode mode; SDL_VideoData *data = _this->driverdata; - data->screen_size = _ksys_screen_size(); + ksys_pos_t screen_size; + + screen_size = _ksys_screen_size(); /* Use 24-bpp desktop mode */ mode.format = SDL_PIXELFORMAT_RGB24; - mode.w = data->screen_size.x; - mode.h = data->screen_size.y; + mode.w = screen_size.x; + mode.h = screen_size.y; mode.refresh_rate = 0; mode.driverdata = NULL; if (SDL_AddBasicVideoDisplay(&mode) < 0) diff --git a/src/video/kolibri/SDL_kolibrivideo.h b/src/video/kolibri/SDL_kolibrivideo.h index 0c872cc..a97a39e 100644 --- a/src/video/kolibri/SDL_kolibrivideo.h +++ b/src/video/kolibri/SDL_kolibrivideo.h @@ -5,7 +5,6 @@ typedef struct SDL_VideoData { Uint32 window_id; - ksys_pos_t screen_size; } SDL_VideoData; #endif diff --git a/src/video/kolibri/SDL_kolibriwindow.c b/src/video/kolibri/SDL_kolibriwindow.c index 81d250c..158c61d 100644 --- a/src/video/kolibri/SDL_kolibriwindow.c +++ b/src/video/kolibri/SDL_kolibriwindow.c @@ -25,16 +25,22 @@ void KOLIBRI_RepaintWnd(_THIS) win_size_w = window->w + WINDOW_BORDER_W; win_size_h = window->h + _ksys_get_skin_height() + WINDOW_BORDER_H; - win_pos_x = data->screen_size.x / 2 - win_size_w / 2; - win_pos_y = data->screen_size.y / 2 - win_size_h / 2; _ksys_start_draw(); - _ksys_create_window(win_pos_x, win_pos_y, win_size_w, win_size_h, window->title, 0, 0x34); + _ksys_create_window(window->x, window->y, win_size_w, win_size_h, window->title, 0, 0x34); if (wdata->surface->pixels) _ksys_draw_bitmap(wdata->surface->pixels, 0, 0, wdata->surface->w, wdata->surface->h); _ksys_end_draw(); } +void KOLIBRI_change_window_size_and_pos(int w, int h, int x, int y) +{ + w += WINDOW_BORDER_W; + h += _ksys_get_skin_height() + WINDOW_BORDER_H; + + _ksys_change_window(x, y, w, h); +} + int KOLIBRI_CreateWindow(_THIS, SDL_Window *window) { SDL_VideoData *data = (SDL_VideoData *)_this->driverdata; @@ -58,6 +64,16 @@ int KOLIBRI_CreateWindow(_THIS, SDL_Window *window) return 0; } +void KOLIBRI_SetWindowPosition(_THIS, SDL_Window *window) +{ + KOLIBRI_change_window_size_and_pos(window->w, window->h, window->x, window->y); +} + +void KOLIBRI_SetWindowSize(_THIS, SDL_Window *window) +{ + KOLIBRI_change_window_size_and_pos(window->w, window->h, window->x, window->y); +} + void KOLIBRI_SetWindowTitle(_THIS, SDL_Window *window) { _ksys_set_window_title(window->title);