xref: /OK3568_Linux_fs/buildroot/package/lvgl/lv_drivers/0005-HACK-use-sdl-to-get-display-size.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 4eff59e80820a7d346f1199570e21d21b18cb030 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jiajian Wu <jair.wu@rock-chips.com>
3*4882a593SmuzhiyunDate: Wed, 21 Dec 2022 14:36:15 +0800
4*4882a593SmuzhiyunSubject: [PATCH 5/6] HACK: use sdl to get display size
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunSigned-off-by: Jiajian Wu <jair.wu@rock-chips.com>
7*4882a593Smuzhiyun---
8*4882a593Smuzhiyun lv_drv_conf.h |  4 ++--
9*4882a593Smuzhiyun sdl/sdl_gpu.c | 22 +++++++++++++++++++---
10*4882a593Smuzhiyun 2 files changed, 21 insertions(+), 5 deletions(-)
11*4882a593Smuzhiyun
12*4882a593Smuzhiyundiff --git a/lv_drv_conf.h b/lv_drv_conf.h
13*4882a593Smuzhiyunindex 6dd6af1..345762a 100644
14*4882a593Smuzhiyun--- a/lv_drv_conf.h
15*4882a593Smuzhiyun+++ b/lv_drv_conf.h
16*4882a593Smuzhiyun@@ -95,8 +95,8 @@
17*4882a593Smuzhiyun #endif
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun #if USE_SDL || USE_SDL_GPU
20*4882a593Smuzhiyun-#  define SDL_HOR_RES     720
21*4882a593Smuzhiyun-#  define SDL_VER_RES     1280
22*4882a593Smuzhiyun+//#  define SDL_HOR_RES     720
23*4882a593Smuzhiyun+//#  define SDL_VER_RES     1280
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun /* Scale window by this factor (useful when simulating small screens) */
26*4882a593Smuzhiyun #  define SDL_ZOOM        1
27*4882a593Smuzhiyundiff --git a/sdl/sdl_gpu.c b/sdl/sdl_gpu.c
28*4882a593Smuzhiyunindex 1a459f6..51ce536 100644
29*4882a593Smuzhiyun--- a/sdl/sdl_gpu.c
30*4882a593Smuzhiyun+++ b/sdl/sdl_gpu.c
31*4882a593Smuzhiyun@@ -48,6 +48,8 @@
32*4882a593Smuzhiyun  **********************/
33*4882a593Smuzhiyun typedef struct {
34*4882a593Smuzhiyun     lv_draw_sdl_drv_param_t drv_param;
35*4882a593Smuzhiyun+    lv_coord_t hor_res;
36*4882a593Smuzhiyun+    lv_coord_t ver_res;
37*4882a593Smuzhiyun     SDL_Window * window;
38*4882a593Smuzhiyun     SDL_Texture * texture;
39*4882a593Smuzhiyun }monitor_t;
40*4882a593Smuzhiyun@@ -92,7 +94,11 @@ void sdl_init(void)
41*4882a593Smuzhiyun void sdl_disp_drv_init(lv_disp_drv_t * disp_drv, lv_coord_t hor_res, lv_coord_t ver_res)
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun     monitor_t *m = lv_mem_alloc(sizeof(monitor_t));
44*4882a593Smuzhiyun+    m->hor_res = hor_res;
45*4882a593Smuzhiyun+    m->ver_res = ver_res;
46*4882a593Smuzhiyun     window_create(m);
47*4882a593Smuzhiyun+    hor_res = m->hor_res;
48*4882a593Smuzhiyun+    ver_res = m->ver_res;
49*4882a593Smuzhiyun     lv_disp_drv_init(disp_drv);
50*4882a593Smuzhiyun     disp_drv->direct_mode = 1;
51*4882a593Smuzhiyun     disp_drv->flush_cb = monitor_flush;
52*4882a593Smuzhiyun@@ -244,13 +250,22 @@ static void monitor_sdl_clean_up(void)
53*4882a593Smuzhiyun static void window_create(monitor_t * m)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun //    SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1");
56*4882a593Smuzhiyun+    SDL_Rect rect;
57*4882a593Smuzhiyun+
58*4882a593Smuzhiyun+    if (!m->hor_res || !m->ver_res) {
59*4882a593Smuzhiyun+        SDL_GetDisplayBounds(0, &rect);
60*4882a593Smuzhiyun+        m->hor_res = rect.w;
61*4882a593Smuzhiyun+        m->ver_res = rect.h;
62*4882a593Smuzhiyun+    }
63*4882a593Smuzhiyun+
64*4882a593Smuzhiyun     m->window = SDL_CreateWindow("TFT Simulator",
65*4882a593Smuzhiyun                               SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
66*4882a593Smuzhiyun-                              SDL_HOR_RES * SDL_ZOOM, SDL_VER_RES * SDL_ZOOM, SDL_WINDOW_RESIZABLE);
67*4882a593Smuzhiyun+                              m->hor_res * SDL_ZOOM, m->ver_res * SDL_ZOOM,
68*4882a593Smuzhiyun+                              SDL_WINDOW_RESIZABLE);
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun     m->drv_param.renderer = SDL_CreateRenderer(m->window, -1, SDL_RENDERER_ACCELERATED);
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun-    m->texture = lv_draw_sdl_create_screen_texture(m->drv_param.renderer, SDL_HOR_RES, SDL_VER_RES);
73*4882a593Smuzhiyun+    m->texture = lv_draw_sdl_create_screen_texture(m->drv_param.renderer, m->hor_res, m->ver_res);
74*4882a593Smuzhiyun     /* For first frame */
75*4882a593Smuzhiyun     SDL_SetRenderTarget(m->drv_param.renderer, m->texture);
76*4882a593Smuzhiyun }
77*4882a593Smuzhiyun@@ -258,13 +273,14 @@ static void window_create(monitor_t * m)
78*4882a593Smuzhiyun static void window_update(lv_disp_drv_t *disp_drv, void * buf)
79*4882a593Smuzhiyun {
80*4882a593Smuzhiyun     SDL_Renderer *renderer = ((lv_draw_sdl_drv_param_t *) disp_drv->user_data)->renderer;
81*4882a593Smuzhiyun+    monitor_t *m = (monitor_t *)disp_drv->user_data;
82*4882a593Smuzhiyun     SDL_Texture *texture = buf;
83*4882a593Smuzhiyun     SDL_SetRenderTarget(renderer, NULL);
84*4882a593Smuzhiyun     SDL_RenderClear(renderer);
85*4882a593Smuzhiyun #if LV_COLOR_SCREEN_TRANSP
86*4882a593Smuzhiyun     SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0xff);
87*4882a593Smuzhiyun     SDL_Rect r;
88*4882a593Smuzhiyun-    r.x = 0; r.y = 0; r.w = SDL_HOR_RES; r.h = SDL_VER_RES;
89*4882a593Smuzhiyun+    r.x = 0; r.y = 0; r.w = m->hor_res; r.h = m->ver_res;
90*4882a593Smuzhiyun     SDL_RenderDrawRect(renderer, &r);
91*4882a593Smuzhiyun #endif
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun--
94*4882a593Smuzhiyun2.25.1
95*4882a593Smuzhiyun
96