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