fix circle drawing algorithms (#2413)

This commit is contained in:
SmartAnda
2021-07-28 14:58:25 +08:00
committed by GitHub
parent 559b6458c0
commit 95347b768b

View File

@@ -1291,20 +1291,20 @@ static void circ_calc_aa4(_lv_draw_mask_radius_circle_dsc_t * c, lv_coord_t radi
int32_t mid = radius * 723;
int32_t mid_int = mid >> 10;
if(cir_x[cir_size-1] != mid_int || cir_y[cir_size-1] != mid_int) {
tmp = mid - (mid_int << 10);
if(tmp <= 512) {
tmp = tmp * tmp * 2;
tmp = tmp >> (10 + 6);
int32_t tmp_val = mid - (mid_int << 10);
if(tmp_val <= 512) {
tmp_val = tmp_val * tmp_val * 2;
tmp_val = tmp_val >> (10 + 6);
} else {
tmp = 1024 - tmp;
tmp = (int32_t)tmp * tmp * 2;
tmp = (int32_t)tmp >> (10 + 6);
tmp = 15 - tmp;
tmp_val = 1024 - tmp_val;
tmp_val = tmp_val * tmp_val * 2;
tmp_val = tmp_val >> (10 + 6);
tmp_val = 15 - tmp_val;
}
cir_x[cir_size] = mid_int;
cir_y[cir_size] = mid_int;
c->cir_opa[cir_size] = tmp;
c->cir_opa[cir_size] = tmp_val;
c->cir_opa[cir_size] *= 16;
cir_size++;
}