mirror of
https://github.com/lvgl/lvgl.git
synced 2026-06-02 01:18:04 +08:00
fix(grid) avoid rounding error is FR cells are used
This commit is contained in:
@@ -284,13 +284,22 @@ static void calc_cols(lv_obj_t * cont, _lv_grid_calc_t * c)
|
|||||||
lv_coord_t free_w = cont_w - grid_w;
|
lv_coord_t free_w = cont_w - grid_w;
|
||||||
if(free_w < 0) free_w = 0;
|
if(free_w < 0) free_w = 0;
|
||||||
|
|
||||||
|
int32_t last_fr_i = -1;
|
||||||
|
int32_t last_fr_x = 0;
|
||||||
for(i = 0; i < c->col_num; i++) {
|
for(i = 0; i < c->col_num; i++) {
|
||||||
lv_coord_t x = col_templ[i];
|
lv_coord_t x = col_templ[i];
|
||||||
if(IS_FR(x)) {
|
if(IS_FR(x)) {
|
||||||
lv_coord_t f = GET_FR(x);
|
lv_coord_t f = GET_FR(x);
|
||||||
c->w[i] = (free_w * f) / col_fr_cnt;
|
c->w[i] = (free_w * f) / col_fr_cnt;
|
||||||
|
last_fr_i = i;
|
||||||
|
last_fr_x = f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*To avoid rounding errors set the last FR track to the remaining size */
|
||||||
|
if(last_fr_i >= 0) {
|
||||||
|
c->w[last_fr_i] = free_w - ((free_w * (col_fr_cnt - last_fr_x)) / col_fr_cnt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void calc_rows(lv_obj_t * cont, _lv_grid_calc_t * c)
|
static void calc_rows(lv_obj_t * cont, _lv_grid_calc_t * c)
|
||||||
@@ -337,11 +346,14 @@ static void calc_rows(lv_obj_t * cont, _lv_grid_calc_t * c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
lv_coord_t row_gap = lv_obj_get_style_pad_row(cont, LV_PART_MAIN);
|
lv_coord_t row_gap = lv_obj_get_style_pad_row(cont, LV_PART_MAIN);
|
||||||
lv_coord_t cont_h = lv_obj_get_content_height(cont) - row_gap * (c->row_num - 1);
|
lv_coord_t cont_h = lv_obj_get_content_height(cont) - row_gap * (c->row_num - 1);
|
||||||
lv_coord_t free_h = cont_h - grid_h;
|
lv_coord_t free_h = cont_h - grid_h;
|
||||||
if(free_h < 0) free_h = 0;
|
if(free_h < 0) free_h = 0;
|
||||||
|
|
||||||
|
int32_t last_fr_i = -1;
|
||||||
|
int32_t last_fr_x = 0;
|
||||||
for(i = 0; i < c->row_num; i++) {
|
for(i = 0; i < c->row_num; i++) {
|
||||||
lv_coord_t x = row_templ[i];
|
lv_coord_t x = row_templ[i];
|
||||||
if(IS_FR(x)) {
|
if(IS_FR(x)) {
|
||||||
@@ -349,6 +361,11 @@ static void calc_rows(lv_obj_t * cont, _lv_grid_calc_t * c)
|
|||||||
c->h[i] = (free_h * f) / row_fr_cnt;
|
c->h[i] = (free_h * f) / row_fr_cnt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*To avoid rounding errors set the last FR track to the remaining size */
|
||||||
|
if(last_fr_i >= 0) {
|
||||||
|
c->h[last_fr_i] = free_h - ((free_h * (row_fr_cnt - last_fr_x)) / row_fr_cnt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user