Files
com.kuailexs.tvbox/app/jni/swallow_gui/sg_main.c
2025-08-13 01:17:00 +08:00

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();
}