diff --git a/src/lv_core/lv_grid.c b/src/lv_core/lv_grid.c index f0f08884c..723f761b3 100644 --- a/src/lv_core/lv_grid.c +++ b/src/lv_core/lv_grid.c @@ -400,7 +400,7 @@ static void item_repos(lv_obj_t * cont, lv_obj_t * item, _lv_grid_calc_t * calc, x = calc->x[col_pos] + (col_w - (item_w + margin_left - margin_right)) / 2; break; case LV_GRID_END: - x = calc->x[col_pos + 1] - lv_obj_get_width(item) - margin_right; + x = calc->x[col_pos] + col_w - lv_obj_get_width(item) - margin_right; break; } @@ -417,7 +417,7 @@ static void item_repos(lv_obj_t * cont, lv_obj_t * item, _lv_grid_calc_t * calc, y = calc->y[row_pos] + (row_h - (item_h + margin_top + margin_bottom)) / 2; break; case LV_GRID_END: - y = calc->y[row_pos + 1] - lv_obj_get_height(item) - margin_bottom; + y = calc->y[row_pos] + row_h - lv_obj_get_height(item) - margin_bottom; break; } @@ -504,6 +504,8 @@ static lv_coord_t grid_place(lv_coord_t cont_size, bool auto_size, uint8_t plac pos_array[i + 1] = pos_array[i] + size_array[i] + gap; } + lv_coord_t total_gird_size = pos_array[track_num - 1] + size_array[track_num - 1] - pos_array[0]; + if(reverse) { for(i = 0; i < track_num; i++) { pos_array[i] = cont_size - pos_array[i] - size_array[i]; @@ -512,7 +514,7 @@ static lv_coord_t grid_place(lv_coord_t cont_size, bool auto_size, uint8_t plac } /*Return the full size of the grid*/ - return pos_array[track_num - 1] + size_array[track_num - 1] - pos_array[0]; + return total_gird_size; } diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index 4047a7de3..870a19326 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -1986,17 +1986,6 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param) if(obj->w_set == LV_SIZE_AUTO || obj->h_set == LV_SIZE_AUTO) { lv_obj_set_size(obj, obj->w_set, obj->h_set); } - - /*If the changed children was a grid item refresh this objects grid*/ - if(lv_obj_get_grid(obj)) { - lv_obj_t * child = param; - if(child) { - if(_lv_obj_is_grid_item(child)) _lv_grid_full_refresh(obj); - } else { - _lv_grid_full_refresh(obj); - } - } - } else if(sign == LV_SIGNAL_SCROLL) { res = lv_event_send(obj, LV_EVENT_SCROLL, NULL); diff --git a/src/lv_core/lv_obj_pos.c b/src/lv_core/lv_obj_pos.c index c892cdb95..25d58c90a 100644 --- a/src/lv_core/lv_obj_pos.c +++ b/src/lv_core/lv_obj_pos.c @@ -575,7 +575,7 @@ bool _lv_obj_handle_self_size_chg(struct _lv_obj_t * obj) } /** - * Calculate the "auto size". It's `auto_size = max(gird_size, children_size, self_size)` + * Calculate the "auto size". It's `auto_size = max(children_size, self_size)` * @param obj pointer to an object * @param w_out store the width here. NULL to not calculate width * @param h_out store the height here. NULL to not calculate height @@ -583,42 +583,18 @@ bool _lv_obj_handle_self_size_chg(struct _lv_obj_t * obj) void _lv_obj_calc_auto_size(lv_obj_t * obj, lv_coord_t * w_out, lv_coord_t * h_out) { if(!w_out && !h_out) return; - -// printf("auto size\n"); - - /*If no other effect the auto-size of zero by default*/ - if(w_out) *w_out = 0; - if(h_out) *h_out = 0; - - /*Get the grid size of the object has a defined grid*/ - lv_coord_t grid_w = 0; - lv_coord_t grid_h = 0; - if(lv_obj_get_grid(obj)) { - _lv_grid_calc_t calc; - _lv_grid_calc(obj, &calc); - grid_w = calc.grid_w + lv_obj_get_style_pad_left(obj, LV_OBJ_PART_MAIN) + lv_obj_get_style_pad_right(obj, LV_OBJ_PART_MAIN); - grid_h = calc.grid_h + lv_obj_get_style_pad_top(obj, LV_OBJ_PART_MAIN) + lv_obj_get_style_pad_bottom(obj, LV_OBJ_PART_MAIN); - _lv_grid_calc_free(&calc); - } - - /*Get the children's most right and bottom position*/ - lv_coord_t children_w = 0; - lv_coord_t children_h = 0; + /*Get the bounding box of the children*/ if(w_out) { lv_coord_t scroll_right = lv_obj_get_scroll_right(obj); lv_coord_t scroll_left = lv_obj_get_scroll_left(obj); - children_w = lv_obj_get_width(obj) + scroll_right + scroll_left; + *w_out = lv_obj_get_width(obj) + scroll_right + scroll_left; } if(h_out) { lv_coord_t scroll_bottom = lv_obj_get_scroll_bottom(obj); lv_coord_t scroll_top = lv_obj_get_scroll_top(obj); - children_h = lv_obj_get_height(obj) + scroll_bottom + scroll_top; + *h_out = lv_obj_get_height(obj) + scroll_bottom + scroll_top; } - - /*auto_size = max(gird_size, children_size)*/ - if(w_out) *w_out = LV_MATH_MAX(children_w, grid_w); - if(h_out) *h_out = LV_MATH_MAX(children_h, grid_h); } /**