58 lines
1.7 KiB
C
58 lines
1.7 KiB
C
|
|
#include "sg_main.h"
|
|
#include "sg_widget.h"
|
|
|
|
sg_main_data *main_data = NULL;
|
|
|
|
void sg_main_init(char *title) {
|
|
//01 初始化
|
|
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
|
|
printf("SDL2初始化失败 - %s\n", SDL_GetError());
|
|
return;
|
|
}
|
|
//
|
|
main_data = SDL_malloc(sizeof(sg_main_data));
|
|
SDL_memset(main_data, 0, sizeof(sg_main_data));
|
|
main_data->rect = SDL_malloc(sizeof(sg_rect));
|
|
main_data->rect->x = 100;
|
|
main_data->rect->y = 100;
|
|
main_data->rect->w = 100;
|
|
main_data->rect->h = 100;
|
|
main_data->rect->z = 0;
|
|
Uint32 flags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN;
|
|
main_data->window = SDL_CreateWindow(title, main_data->rect->x, main_data->rect->y,
|
|
main_data->rect->w, main_data->rect->h, flags);
|
|
//03 设置软/硬渲染方式 SDL_RENDERER_SOFTWARE:CPU渲染 SDL_RENDERER_ACCELERATED:GPU渲染
|
|
main_data->renderer = SDL_CreateRenderer(main_data->window, -1, SDL_RENDERER_SOFTWARE);
|
|
}
|
|
|
|
void sg_window_resize() {
|
|
SDL_GetWindowSize(main_data->window, &main_data->rect->w, &main_data->rect->h);
|
|
SDL_GetWindowPosition(main_data->window, &main_data->rect->x, &main_data->rect->y);
|
|
|
|
sg_widget *widget = main_data->widgets;
|
|
while (widget != NULL) {
|
|
sg_widget_window_resize(widget, main_data->rect);
|
|
widget = widget->next;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 事件循环
|
|
*/
|
|
void sg_main_event_loop() {
|
|
SDL_Event event;
|
|
while (1) {
|
|
//Wait
|
|
SDL_WaitEvent(&event);
|
|
if (event.type == SDL_WINDOWEVENT) {
|
|
//If Resize
|
|
sg_window_resize();
|
|
} else if (event.type == SDL_QUIT) {
|
|
break;
|
|
} else {
|
|
continue;
|
|
}
|
|
}
|
|
SDL_Quit();
|
|
} |