From 459bd81695a06ad1ee6db32d42c5a934785b48fe Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 16 Aug 2019 22:37:34 +0200 Subject: [PATCH] angle mask experiemnts --- src/lv_core/lv_style.c | 4 ++-- src/lv_draw/lv_draw_rect.c | 14 +++++++------- src/lv_draw/lv_mask.c | 37 +++++++++++++++++++++++++++++++------ 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/lv_core/lv_style.c b/src/lv_core/lv_style.c index b6b8df8eb..98cab4045 100644 --- a/src/lv_core/lv_style.c +++ b/src/lv_core/lv_style.c @@ -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; diff --git a/src/lv_draw/lv_draw_rect.c b/src/lv_draw/lv_draw_rect.c index 08cd94abc..9654816c5 100644 --- a/src/lv_draw/lv_draw_rect.c +++ b/src/lv_draw/lv_draw_rect.c @@ -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); diff --git a/src/lv_draw/lv_mask.c b/src/lv_draw/lv_mask.c index c603cd15a..12d43dc3e 100644 --- a/src/lv_draw/lv_mask.c +++ b/src/lv_draw/lv_mask.c @@ -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); } }