1 #include "lv_draw_dave2d.h"
2 #if LV_USE_DRAW_DAVE2D
3 
4 #include "../../../misc/lv_area_private.h"
5 
lv_draw_dave2d_mask_rect(lv_draw_dave2d_unit_t * u,const lv_draw_mask_rect_dsc_t * dsc,const lv_area_t * coords)6 void lv_draw_dave2d_mask_rect(lv_draw_dave2d_unit_t * u, const lv_draw_mask_rect_dsc_t * dsc, const lv_area_t * coords)
7 {
8     lv_area_t clipped_area;
9     lv_area_t coordinates;
10     int32_t x;
11     int32_t y;
12 
13     if(!lv_area_intersect(&clipped_area, coords, u->base_unit.clip_area)) return;
14 
15     x = 0 - u->base_unit.target_layer->buf_area.x1;
16     y = 0 - u->base_unit.target_layer->buf_area.y1;
17 
18     coordinates = *coords;
19 
20     lv_area_move(&clipped_area, x, y);
21     lv_area_move(&coordinates, x, y);
22 
23 #if LV_USE_OS
24     lv_result_t  status;
25     status = lv_mutex_lock(u->pd2Mutex);
26     LV_ASSERT(LV_RESULT_OK == status);
27 #endif
28 
29 #ifdef D2_RENDER_EACH_OPERATION
30     d2_selectrenderbuffer(u->d2_handle, u->renderbuffer);
31 #endif
32 
33     d2_framebuffer_from_layer(u->d2_handle, u->base_unit.target_layer);
34 
35     d2_cliprect(u->d2_handle, (d2_border)clipped_area.x1, (d2_border)clipped_area.y1, (d2_border)clipped_area.x2,
36                 (d2_border)clipped_area.y2);
37 
38     d2_renderbox(u->d2_handle,
39                  (d2_point)        D2_FIX4(coordinates.x1),
40                  (d2_point)        D2_FIX4(coordinates.y1),
41                  (d2_width)        D2_FIX4(lv_area_get_width(&coordinates)),
42                  (d2_width)        D2_FIX4(lv_area_get_height(&coordinates)));
43 
44     //
45     // Execute render operations
46     //
47 #ifdef D2_RENDER_EACH_OPERATION
48     d2_executerenderbuffer(u->d2_handle, u->renderbuffer, 0);
49     d2_flushframe(u->d2_handle);
50 #endif
51 
52 #if LV_USE_OS
53     status = lv_mutex_unlock(u->pd2Mutex);
54     LV_ASSERT(LV_RESULT_OK == status);
55 #endif
56 }
57 #endif //LV_USE_DRAW_DAVE2D
58