add window resize and position change support

Signed-off-by: Arnav Bhatt <arnav@ghativega.in>
This commit is contained in:
Arnav Bhatt
2024-06-20 03:20:01 +05:30
parent a49fd2dd2d
commit 0adb12e106
3 changed files with 24 additions and 7 deletions

View File

@@ -29,12 +29,14 @@ int KOLIBRI_VideoInit(_THIS)
{ {
SDL_DisplayMode mode; SDL_DisplayMode mode;
SDL_VideoData *data = _this->driverdata; 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 */ /* Use 24-bpp desktop mode */
mode.format = SDL_PIXELFORMAT_RGB24; mode.format = SDL_PIXELFORMAT_RGB24;
mode.w = data->screen_size.x; mode.w = screen_size.x;
mode.h = data->screen_size.y; mode.h = screen_size.y;
mode.refresh_rate = 0; mode.refresh_rate = 0;
mode.driverdata = NULL; mode.driverdata = NULL;
if (SDL_AddBasicVideoDisplay(&mode) < 0) if (SDL_AddBasicVideoDisplay(&mode) < 0)

View File

@@ -5,7 +5,6 @@
typedef struct SDL_VideoData typedef struct SDL_VideoData
{ {
Uint32 window_id; Uint32 window_id;
ksys_pos_t screen_size;
} SDL_VideoData; } SDL_VideoData;
#endif #endif

View File

@@ -25,16 +25,22 @@ void KOLIBRI_RepaintWnd(_THIS)
win_size_w = window->w + WINDOW_BORDER_W; win_size_w = window->w + WINDOW_BORDER_W;
win_size_h = window->h + _ksys_get_skin_height() + WINDOW_BORDER_H; 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_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) if (wdata->surface->pixels)
_ksys_draw_bitmap(wdata->surface->pixels, 0, 0, wdata->surface->w, wdata->surface->h); _ksys_draw_bitmap(wdata->surface->pixels, 0, 0, wdata->surface->w, wdata->surface->h);
_ksys_end_draw(); _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) int KOLIBRI_CreateWindow(_THIS, SDL_Window *window)
{ {
SDL_VideoData *data = (SDL_VideoData *)_this->driverdata; SDL_VideoData *data = (SDL_VideoData *)_this->driverdata;
@@ -58,6 +64,16 @@ int KOLIBRI_CreateWindow(_THIS, SDL_Window *window)
return 0; 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) void KOLIBRI_SetWindowTitle(_THIS, SDL_Window *window)
{ {
_ksys_set_window_title(window->title); _ksys_set_window_title(window->title);