From 4eff59e80820a7d346f1199570e21d21b18cb030 Mon Sep 17 00:00:00 2001 From: Jiajian Wu Date: Wed, 21 Dec 2022 14:36:15 +0800 Subject: [PATCH 5/6] HACK: use sdl to get display size Signed-off-by: Jiajian Wu --- lv_drv_conf.h | 4 ++-- sdl/sdl_gpu.c | 22 +++++++++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lv_drv_conf.h b/lv_drv_conf.h index 6dd6af1..345762a 100644 --- a/lv_drv_conf.h +++ b/lv_drv_conf.h @@ -95,8 +95,8 @@ #endif #if USE_SDL || USE_SDL_GPU -# define SDL_HOR_RES 720 -# define SDL_VER_RES 1280 +//# define SDL_HOR_RES 720 +//# define SDL_VER_RES 1280 /* Scale window by this factor (useful when simulating small screens) */ # define SDL_ZOOM 1 diff --git a/sdl/sdl_gpu.c b/sdl/sdl_gpu.c index 1a459f6..51ce536 100644 --- a/sdl/sdl_gpu.c +++ b/sdl/sdl_gpu.c @@ -48,6 +48,8 @@ **********************/ typedef struct { lv_draw_sdl_drv_param_t drv_param; + lv_coord_t hor_res; + lv_coord_t ver_res; SDL_Window * window; SDL_Texture * texture; }monitor_t; @@ -92,7 +94,11 @@ void sdl_init(void) void sdl_disp_drv_init(lv_disp_drv_t * disp_drv, lv_coord_t hor_res, lv_coord_t ver_res) { monitor_t *m = lv_mem_alloc(sizeof(monitor_t)); + m->hor_res = hor_res; + m->ver_res = ver_res; window_create(m); + hor_res = m->hor_res; + ver_res = m->ver_res; lv_disp_drv_init(disp_drv); disp_drv->direct_mode = 1; disp_drv->flush_cb = monitor_flush; @@ -244,13 +250,22 @@ static void monitor_sdl_clean_up(void) static void window_create(monitor_t * m) { // SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1"); + SDL_Rect rect; + + if (!m->hor_res || !m->ver_res) { + SDL_GetDisplayBounds(0, &rect); + m->hor_res = rect.w; + m->ver_res = rect.h; + } + m->window = SDL_CreateWindow("TFT Simulator", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - SDL_HOR_RES * SDL_ZOOM, SDL_VER_RES * SDL_ZOOM, SDL_WINDOW_RESIZABLE); + m->hor_res * SDL_ZOOM, m->ver_res * SDL_ZOOM, + SDL_WINDOW_RESIZABLE); m->drv_param.renderer = SDL_CreateRenderer(m->window, -1, SDL_RENDERER_ACCELERATED); - m->texture = lv_draw_sdl_create_screen_texture(m->drv_param.renderer, SDL_HOR_RES, SDL_VER_RES); + m->texture = lv_draw_sdl_create_screen_texture(m->drv_param.renderer, m->hor_res, m->ver_res); /* For first frame */ SDL_SetRenderTarget(m->drv_param.renderer, m->texture); } @@ -258,13 +273,14 @@ static void window_create(monitor_t * m) static void window_update(lv_disp_drv_t *disp_drv, void * buf) { SDL_Renderer *renderer = ((lv_draw_sdl_drv_param_t *) disp_drv->user_data)->renderer; + monitor_t *m = (monitor_t *)disp_drv->user_data; SDL_Texture *texture = buf; SDL_SetRenderTarget(renderer, NULL); SDL_RenderClear(renderer); #if LV_COLOR_SCREEN_TRANSP SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff); SDL_Rect r; - r.x = 0; r.y = 0; r.w = SDL_HOR_RES; r.h = SDL_VER_RES; + r.x = 0; r.y = 0; r.w = m->hor_res; r.h = m->ver_res; SDL_RenderDrawRect(renderer, &r); #endif -- 2.25.1