cpicker: fix line indicator artifact

This commit is contained in:
Gabor Kiss-Vamosi
2019-09-26 07:23:23 +02:00
parent 6e9f10451d
commit 8dcb1ff21c

View File

@@ -815,7 +815,7 @@ static bool lv_cpicker_disc_design(lv_obj_t * cpicker, const lv_area_t * mask, l
style2.body.grad_color.full = c; style2.body.grad_color.full = c;
c += 0x123445678; c += 0x123445678;
lv_draw_rect(mask, mask, &style2, opa_scale); lv_draw_rect(mask, mask, &style2, opa_scale);
*/ */
} }
/*Post draw when the children are drawn*/ /*Post draw when the children are drawn*/
else if(mode == LV_DESIGN_DRAW_POST) { else if(mode == LV_DESIGN_DRAW_POST) {
@@ -1006,7 +1006,7 @@ static bool lv_cpicker_rect_design(lv_obj_t * cpicker, const lv_area_t * mask, l
styleCopy.line.width = 10; styleCopy.line.width = 10;
lv_draw_arc(cpicker->coords.x1 + 3*ext->rect_gradient_h/2, cpicker->coords.y1 + ext->rect_gradient_h/2, ext->rect_gradient_h / 2 + styleCopy.line.width + 2, mask, 180, 360, &styleCopy, opa_scale); lv_draw_arc(cpicker->coords.x1 + 3*ext->rect_gradient_h/2, cpicker->coords.y1 + ext->rect_gradient_h/2, ext->rect_gradient_h / 2 + styleCopy.line.width + 2, mask, 180, 360, &styleCopy, opa_scale);
//lv_draw_arc(cpicker->coords.x1 + ext->rect_gradient_w - ext->rect_gradient_h/2, cpicker->coords.y1 + ext->rect_gradient_h/2, ext->rect_gradient_h / 2 + styleCopy.line.width + 2, mask, 0, 180, &styleCopy, opa_scale); //lv_draw_arc(cpicker->coords.x1 + ext->rect_gradient_w - ext->rect_gradient_h/2, cpicker->coords.y1 + ext->rect_gradient_h/2, ext->rect_gradient_h / 2 + styleCopy.line.width + 2, mask, 0, 180, &styleCopy, opa_scale);
*/ */
/*draw the color position indicator*/ /*draw the color position indicator*/
lv_coord_t ind_pos = style->line.rounded ? ext->rect_gradient_h / 2 : 0; lv_coord_t ind_pos = style->line.rounded ? ext->rect_gradient_h / 2 : 0;
@@ -1212,13 +1212,13 @@ static lv_res_t lv_cpicker_disc_signal(lv_obj_t * cpicker, lv_signal_t sign, voi
if (changed) if (changed)
{ {
lv_cpicker_invalidate(cpicker, false); lv_cpicker_invalidate(cpicker, false);
res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL); res = lv_event_send(cpicker, LV_EVENT_VALUE_CHANGED, NULL);
if(res != LV_RES_OK) return res; if(res != LV_RES_OK) return res;
}
} }
} }
}
else if(sign == LV_SIGNAL_PRESS_LOST) else if(sign == LV_SIGNAL_PRESS_LOST)
{ {
switch(ext->color_mode) switch(ext->color_mode)
@@ -1672,7 +1672,7 @@ static void lv_cpicker_invalidate(lv_obj_t * cpicker, bool all)
lv_coord_t r = LV_MATH_MIN(w, h) / 2; lv_coord_t r = LV_MATH_MIN(w, h) / 2;
lv_coord_t x = cpicker->coords.x1 + w / 2; lv_coord_t x = cpicker->coords.x1 + w / 2;
lv_coord_t y = cpicker->coords.y1 + h / 2; lv_coord_t y = cpicker->coords.y1 + h / 2;
/*invalidate center color area*/ /*invalidate center color area*/
lv_area_t center_color_area; lv_area_t center_color_area;
@@ -1889,39 +1889,17 @@ static void lv_cpicker_invalidate(lv_obj_t * cpicker, bool all)
{ {
lv_area_t line_area; lv_area_t line_area;
lv_point_t p1, p2; /*Invalidate the current position*/
p1.x = ext->rect_gradient_area.x1 + ind_pos; line_area.x1 = ext->rect_gradient_area.x1 + ind_pos - ext->indicator.style->line.width;
p1.y = ext->rect_gradient_area.y1; line_area.x2 = ext->rect_gradient_area.x1 + ind_pos + ext->indicator.style->line.width;
p2.x = p1.x; line_area.y1 = ext->rect_gradient_area.y1;
p2.y = ext->rect_gradient_area.y2; line_area.y2 = ext->rect_gradient_area.y2;
line_area.x1 = p1.x;
line_area.y1 = p1.y;
line_area.x2 = p2.x;
line_area.y2 = p2.x;
line_area.x1 -= 2*ext->indicator.style->line.width;
line_area.y1 -= 2*ext->indicator.style->line.width;
line_area.x2 += 2*ext->indicator.style->line.width;
line_area.y2 += 2*ext->indicator.style->line.width;
lv_inv_area(disp, &line_area); lv_inv_area(disp, &line_area);
/* invalidate last postion */ /* Invalidate last position */
p1.x = ext->rect_gradient_area.x1 + prev_pos; line_area.x1 = ext->rect_gradient_area.x1 + prev_pos - ext->indicator.style->line.width;
//p1.y = ext->rect_gradient_area.y1; line_area.x2 = ext->rect_gradient_area.x1 + prev_pos + ext->indicator.style->line.width;
p2.x = p1.x;
//p2.y = ext->rect_gradient_area.y2;
line_area.x1 = p1.x;
line_area.y1 = p1.y;
line_area.x2 = p2.x;
line_area.y2 = p2.x;
line_area.x1 -= 2*ext->indicator.style->line.width;
line_area.y1 -= 2*ext->indicator.style->line.width;
line_area.x2 += 2*ext->indicator.style->line.width;
line_area.y2 += 2*ext->indicator.style->line.width;
lv_inv_area(disp, &line_area); lv_inv_area(disp, &line_area);
break; break;
@@ -1950,7 +1928,7 @@ static void lv_cpicker_invalidate(lv_obj_t * cpicker, bool all)
{ {
lv_coord_t center; lv_coord_t center;
lv_area_t ind_area; lv_area_t ind_area;
center = ext->rect_gradient_area.x1 + ind_pos; center = ext->rect_gradient_area.x1 + ind_pos;
ind_area.x1 = center - ext->indicator.style->line.width * 3; ind_area.x1 = center - ext->indicator.style->line.width * 3;
ind_area.y1 = ext->rect_gradient_area.y1 - 1; ind_area.y1 = ext->rect_gradient_area.y1 - 1;