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