1 /**
2  * @file lv_draw_sdl_bg.c
3  *
4  */
5 
6 /*********************
7  *      INCLUDES
8  *********************/
9 
10 #include "../../lv_conf_internal.h"
11 
12 #if LV_USE_GPU_SDL
13 
14 #include "../lv_draw_rect.h"
15 #include "../lv_draw_img.h"
16 #include "../lv_draw_label.h"
17 #include "../lv_draw_mask.h"
18 #include "../../core/lv_refr.h"
19 #include "lv_draw_sdl_utils.h"
20 #include "lv_draw_sdl_texture_cache.h"
21 #include "lv_draw_sdl_composite.h"
22 
23 /*********************
24  *      DEFINES
25  *********************/
26 
27 /**********************
28  *      TYPEDEFS
29  **********************/
30 
31 /**********************
32  *  STATIC PROTOTYPES
33  **********************/
34 
35 static void draw_bg_color(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
36                           const lv_draw_rect_dsc_t * dsc);
37 
38 static void draw_bg_img(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
39                         const lv_draw_rect_dsc_t * dsc);
40 
41 /**********************
42  *  STATIC VARIABLES
43  **********************/
44 
45 /**********************
46  *      MACROS
47  **********************/
48 
49 /**********************
50  *   GLOBAL FUNCTIONS
51  **********************/
52 
lv_draw_sdl_draw_bg(lv_draw_ctx_t * draw_ctx,const lv_draw_rect_dsc_t * dsc,const lv_area_t * coords)53 void lv_draw_sdl_draw_bg(lv_draw_ctx_t * draw_ctx, const lv_draw_rect_dsc_t * dsc, const lv_area_t * coords)
54 {
55     const lv_area_t * clip = draw_ctx->clip_area;
56     lv_draw_sdl_ctx_t * ctx = (lv_draw_sdl_ctx_t *) draw_ctx;
57     /* Coords will be translated so coords will start at (0,0) */
58     lv_area_t t_area;
59     bool has_content = _lv_area_intersect(&t_area, coords, clip);
60 
61     /* Shadows and outlines will also draw in extended area */
62     if(has_content) {
63         if(dsc->bg_img_src) {
64             draw_bg_img(ctx, coords, &t_area, dsc);
65         }
66         else {
67             draw_bg_color(ctx, coords, &t_area, dsc);
68         }
69     }
70 
71 }
72 
73 /**********************
74  *   STATIC FUNCTIONS
75  **********************/
76 
draw_bg_color(lv_draw_sdl_ctx_t * ctx,const lv_area_t * coords,const lv_area_t * draw_area,const lv_draw_rect_dsc_t * dsc)77 static void draw_bg_color(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
78                           const lv_draw_rect_dsc_t * dsc)
79 {
80     SDL_Color bg_color;
81     lv_color_to_sdl_color(&dsc->bg_color, &bg_color);
82     SDL_SetRenderDrawBlendMode(ctx->renderer, SDL_BLENDMODE_NONE);
83     SDL_SetRenderDrawColor(ctx->renderer, bg_color.r, bg_color.g, bg_color.b, dsc->bg_opa);
84 
85     SDL_Rect rect;
86     lv_area_to_sdl_rect(draw_area, &rect);
87     SDL_RenderFillRect(ctx->renderer, &rect);
88 
89     SDL_SetRenderDrawBlendMode(ctx->renderer, SDL_BLENDMODE_BLEND);
90 }
91 
draw_bg_img(lv_draw_sdl_ctx_t * ctx,const lv_area_t * coords,const lv_area_t * draw_area,const lv_draw_rect_dsc_t * dsc)92 static void draw_bg_img(lv_draw_sdl_ctx_t * ctx, const lv_area_t * coords, const lv_area_t * draw_area,
93                         const lv_draw_rect_dsc_t * dsc)
94 {
95     SDL_SetRenderDrawBlendMode(ctx->renderer, SDL_BLENDMODE_NONE);
96     SDL_SetRenderDrawColor(ctx->renderer, 0, 0, 0, 0);
97 
98     SDL_Rect rect;
99     lv_area_to_sdl_rect(draw_area, &rect);
100     SDL_RenderFillRect(ctx->renderer, &rect);
101 
102     SDL_SetRenderDrawBlendMode(ctx->renderer, SDL_BLENDMODE_BLEND);
103     lv_draw_rect((lv_draw_ctx_t *) ctx, dsc, coords);
104 }
105 
106 #endif /*LV_USE_GPU_SDL*/
107