mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-28 07:03:00 +08:00
angle mask experiemnts
This commit is contained in:
parent
c23bdeca90
commit
459bd81695
@ -72,8 +72,8 @@ void lv_style_init(void)
|
||||
/*Screen style*/
|
||||
lv_style_scr.glass = 0;
|
||||
lv_style_scr.body.opa = LV_OPA_COVER;
|
||||
lv_style_scr.body.main_color = LV_COLOR_GREEN;
|
||||
lv_style_scr.body.grad_color = LV_COLOR_GREEN;
|
||||
lv_style_scr.body.main_color = LV_COLOR_WHITE;
|
||||
lv_style_scr.body.grad_color = LV_COLOR_WHITE;
|
||||
lv_style_scr.body.radius = 0;
|
||||
lv_style_scr.body.padding.left = 0;
|
||||
lv_style_scr.body.padding.right = 0;
|
||||
|
@ -98,22 +98,22 @@ static void draw_bg(const lv_area_t * coords, const lv_area_t * clip, const lv_s
|
||||
lv_color_t line_buf[LV_HOR_RES_MAX];
|
||||
lv_opa_t mask_buf[LV_HOR_RES_MAX];
|
||||
lv_mask_line_param_t line_mask_param1;
|
||||
lv_mask_line_points_init(&line_mask_param1, 100, 0, -50, 100, LV_LINE_MASK_SIDE_LEFT);
|
||||
// lv_mask_line_angle_init(&line_mask_param1, 50, 50, 105, LV_LINE_MASK_SIDE_LEFT);
|
||||
// lv_mask_line_points_init(&line_mask_param1, 100, 0, -50, 100, LV_LINE_MASK_SIDE_LEFT);
|
||||
lv_mask_line_angle_init(&line_mask_param1, 0, 0, 60, LV_LINE_MASK_SIDE_LEFT);
|
||||
|
||||
lv_mask_line_param_t line_mask_param2;
|
||||
// lv_mask_line_points_init(&line_mask_param2, 100, 0, 0, 100, LV_LINE_MASK_SIDE_LEFT);
|
||||
lv_mask_line_points_init(&line_mask_param2, 100, 0, 0, 100, LV_LINE_MASK_SIDE_LEFT);
|
||||
// lv_mask_line_angle_init(&line_mask_param2, 0, 0, 45, LV_LINE_MASK_SIDE_LEFT);
|
||||
|
||||
|
||||
lv_mask_radius_param_t param1;
|
||||
lv_area_copy(¶m1.rect, coords);
|
||||
param1.radius = 25;
|
||||
param1.radius = 50;
|
||||
param1.inv = 0;
|
||||
|
||||
|
||||
lv_mask_angle_param_t pa;
|
||||
lv_mask_angle_init(&pa, 50, 50, 20, 60);
|
||||
lv_mask_angle_init(&pa, 50, 50, 60, 30);
|
||||
|
||||
// line_mask_param1.origo.x = 0;
|
||||
// line_mask_param1.origo.y = 0;
|
||||
@ -133,13 +133,13 @@ static void draw_bg(const lv_area_t * coords, const lv_area_t * clip, const lv_s
|
||||
// 3
|
||||
lv_blit_color(line_buf, &vdb_buf_tmp[draw_rel_a.x1], draw_a_width, style->body.main_color, LV_BLIT_MODE_NORMAL);
|
||||
memset(mask_buf, LV_OPA_COVER, draw_a_width);
|
||||
lv_mask_line(mask_buf, vdb->area.x1 + draw_rel_a.x1, vdb->area.y1 + h, draw_a_width, &line_mask_param1);
|
||||
// lv_mask_line(mask_buf, vdb->area.x1 + draw_rel_a.x1, vdb->area.y1 + h, draw_a_width, &line_mask_param1);
|
||||
// lv_mask_line(mask_buf, vdb->area.x1 + draw_rel_a.x1, vdb->area.y1 + h, draw_a_width, &line_mask_param2);
|
||||
|
||||
//4
|
||||
lv_mask_radius(mask_buf, vdb->area.x1 + draw_rel_a.x1, vdb->area.y1 + h, draw_a_width, ¶m1);
|
||||
|
||||
// lv_mask_angle(mask_buf, vdb->area.x1 + draw_rel_a.x1, vdb->area.y1 + h, draw_a_width, &pa);
|
||||
lv_mask_angle(mask_buf, vdb->area.x1 + draw_rel_a.x1, vdb->area.y1 + h, draw_a_width, &pa);
|
||||
|
||||
//9
|
||||
lv_mask_apply(&vdb_buf_tmp[draw_rel_a.x1], line_buf, mask_buf, draw_a_width);
|
||||
|
@ -230,12 +230,37 @@ void lv_mask_angle_init(lv_mask_angle_param_t * p, lv_coord_t origo_x, lv_coord_
|
||||
|
||||
void lv_mask_angle(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_mask_angle_param_t * p)
|
||||
{
|
||||
if(p->delta_deg <= 180) {
|
||||
if((p->start_angle <= 180 && abs_y >= p->origo.y) ||
|
||||
(p->start_angle >= 180 && abs_y <= p->origo.y)) {
|
||||
lv_mask_line(mask_buf, abs_x, abs_y, len, &p->start_line);
|
||||
}
|
||||
lv_mask_line(mask_buf, abs_x, abs_y, len, &p->end_line);
|
||||
// if(p->delta_deg <= 180) {
|
||||
// if((p->start_angle <= 180 && abs_y >= p->origo.y) ||
|
||||
// (p->start_angle >= 180 && abs_y <= p->origo.y)) {
|
||||
// }
|
||||
|
||||
if(abs_y < p->origo.y) {
|
||||
// memset(mask_buf, 0x00, len);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
lv_coord_t rel_y = abs_y - p->origo.y;
|
||||
lv_coord_t rel_x = abs_x - p->origo.x;
|
||||
|
||||
/*Start angle mask can work only from the end of end angle mask */
|
||||
lv_coord_t end_angle_first = (rel_y * p->end_line.xy_steep) >> 10;
|
||||
lv_coord_t start_angle_last= ((rel_y+1) * p->start_line.xy_steep) >> 10;
|
||||
|
||||
int32_t dist = (end_angle_first - start_angle_last) >> 1;
|
||||
|
||||
|
||||
|
||||
int32_t tmp = start_angle_last + dist + p->origo.x;
|
||||
if(tmp > len) tmp = len;
|
||||
if(tmp > 0) {
|
||||
lv_mask_line(&mask_buf[0], abs_x, abs_y, tmp, &p->start_line);
|
||||
}
|
||||
|
||||
if(tmp > len) tmp = len;
|
||||
if(tmp > 0) {
|
||||
lv_mask_line(&mask_buf[tmp], abs_x+tmp, abs_y, len-tmp, &p->end_line);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user