diff --git a/docs/changes.md b/docs/changes.md index ad4441020..1ddc62e16 100644 --- a/docs/changes.md +++ b/docs/changes.md @@ -1,4 +1,7 @@ # 最新动态 +2023/11/15 + * 修复layout的auto\_adjust\_size不触发修改事件的问题以及增加判断auto\_adjust\_size(感谢智明提供补丁) + 2023/11/14 * 导出darray\_bsearch\_index\_ex接口(感谢雨欣提供补丁) * 完善生态页面内容(感谢陈谭提供补丁) diff --git a/src/base/self_layouter.c b/src/base/self_layouter.c index 9a3d8d436..f94f8d522 100644 --- a/src/base/self_layouter.c +++ b/src/base/self_layouter.c @@ -34,7 +34,7 @@ const char* self_layouter_to_string(self_layouter_t* layouter) { ret_t self_layouter_layout(self_layouter_t* layouter, widget_t* widget, rect_t* area) { if (layouter == NULL) { - if (widget->vt->auto_adjust_size != NULL) { + if (widget->auto_adjust_size && widget->vt->auto_adjust_size != NULL) { widget->vt->auto_adjust_size(widget); } diff --git a/src/layouters/self_layouter_default.c b/src/layouters/self_layouter_default.c index 0d5f77723..a7ea1396f 100644 --- a/src/layouters/self_layouter_default.c +++ b/src/layouters/self_layouter_default.c @@ -404,7 +404,7 @@ ret_t widget_layout_self_with_rect(self_layouter_t* layouter, widget_t* widget, (widget->auto_adjust_size && widget_get_prop_int(widget, WIDGET_PROP_MAX_W, 0) != 0); /*如果有指定max_w,需要在layout之前,先计算需要的高宽。*/ - if (has_max_w && widget->vt->auto_adjust_size != NULL) { + if (has_max_w && widget->auto_adjust_size && widget->vt->auto_adjust_size != NULL) { widget->vt->auto_adjust_size(widget); r.w = widget->w; r.h = widget->h; @@ -415,20 +415,22 @@ ret_t widget_layout_self_with_rect(self_layouter_t* layouter, widget_t* widget, widget_layout_calc(l, &r, area->w, area->h); /*如果没有指定max_w,需要在layout之后,根据layout的高宽计算实际需要的高宽。*/ - if (!has_max_w && widget->vt->auto_adjust_size != NULL) { + if (!has_max_w && widget->auto_adjust_size && widget->vt->auto_adjust_size != NULL) { + wh_t w = widget->w; + wh_t h = widget->h; widget->w = r.w; widget->h = r.h; widget->vt->auto_adjust_size(widget); r.w = widget->w; r.h = widget->h; - if (widget->auto_adjust_size) { - if (l->x_attr != X_ATTR_UNDEF && area->w > 0) { - r.x = tk_roundi(widget_layout_calc_by_x(l->x_attr, l->x, (double)r.w, area->w)); - } - if (l->y_attr != Y_ATTR_UNDEF && area->h > 0) { - r.y = tk_roundi(widget_layout_calc_by_y(l->y_attr, l->y, (double)r.h, area->h)); - } + if (l->x_attr != X_ATTR_UNDEF && area->w > 0) { + r.x = tk_roundi(widget_layout_calc_by_x(l->x_attr, l->x, (double)r.w, area->w)); } + if (l->y_attr != Y_ATTR_UNDEF && area->h > 0) { + r.y = tk_roundi(widget_layout_calc_by_y(l->y_attr, l->y, (double)r.h, area->h)); + } + widget->w = w; + widget->h = h; } widget_move_resize_ex(widget, r.x + area->x, r.y + area->y, r.w, r.h, FALSE); diff --git a/src/widgets/button.c b/src/widgets/button.c index e15b46998..f8049acef 100644 --- a/src/widgets/button.c +++ b/src/widgets/button.c @@ -388,10 +388,7 @@ static ret_t button_auto_adjust_size(widget_t* widget) { widget_prepare_text_style(widget, c); h = c->font_size + margin_top + margin_bottom; w = canvas_measure_text(c, widget->text.str, widget->text.size) + margin_left + margin_right; - widget->w = w; - widget->h = h; - - return RET_OK; + return widget_move_resize_ex(widget, widget->x, widget->y, w, h, FALSE); } }