1
0
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:
Gabor Kiss-Vamosi 2019-08-16 22:37:34 +02:00
parent c23bdeca90
commit 459bd81695
3 changed files with 40 additions and 15 deletions

View File

@ -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;

View File

@ -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(&param1.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, &param1);
// 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);

View File

@ -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);
}
}