Fix T79524: Button alignment broken in some cases
ad4928a171
disabled alignment for too many cases. Still try to avoid
aligning many items, to avoid thousands of redundant alignment
calculations. But now we're much more picky adding an sub-row with
alignment.
This commit is contained in:
parent
87062d4d67
commit
adfde60831
|
@ -937,7 +937,7 @@ static uiBut *ui_item_with_label(uiLayout *layout,
|
|||
int h,
|
||||
int flag)
|
||||
{
|
||||
uiLayout *sub;
|
||||
uiLayout *sub = layout;
|
||||
uiBut *but = NULL;
|
||||
PropertyType type;
|
||||
PropertySubType subtype;
|
||||
|
@ -945,14 +945,20 @@ static uiBut *ui_item_with_label(uiLayout *layout,
|
|||
#ifdef UI_PROP_DECORATE
|
||||
uiLayout *layout_prop_decorate = NULL;
|
||||
const bool use_prop_sep = ((layout->item.flag & UI_ITEM_PROP_SEP) != 0);
|
||||
const bool use_prop_decorate = use_prop_sep && (layout->item.flag & UI_ITEM_PROP_DECORATE) &&
|
||||
(layout->item.flag & UI_ITEM_PROP_DECORATE_NO_PAD) == 0;
|
||||
#endif
|
||||
|
||||
/* Previously 'align' was enabled to make sure the label is spaced closely to the button.
|
||||
* Set the space to zero instead as aligning a large number of labels can end up aligning
|
||||
* thousands of buttons when displaying key-map search (a heavy operation), see: T78636. */
|
||||
sub = uiLayoutRow(layout, false);
|
||||
sub->space = 0;
|
||||
UI_block_layout_set_current(block, sub);
|
||||
UI_block_layout_set_current(block, layout);
|
||||
|
||||
/* Only add new row if more than 1 item will be added. */
|
||||
if (name[0] || use_prop_decorate) {
|
||||
/* Also avoid setting 'align' if possible. Set the space to zero instead as aligning a large
|
||||
* number of labels can end up aligning thousands of buttons when displaying key-map search (a
|
||||
* heavy operation), see: T78636. */
|
||||
sub = uiLayoutRow(layout, layout->align);
|
||||
sub->space = 0;
|
||||
}
|
||||
|
||||
#ifdef UI_PROP_DECORATE
|
||||
if (name[0]) {
|
||||
|
@ -1050,11 +1056,8 @@ static uiBut *ui_item_with_label(uiLayout *layout,
|
|||
|
||||
#ifdef UI_PROP_DECORATE
|
||||
/* Only for alignment. */
|
||||
if (use_prop_sep) { /* Flag may have been unset meanwhile. */
|
||||
if ((layout->item.flag & UI_ITEM_PROP_DECORATE) &&
|
||||
(layout->item.flag & UI_ITEM_PROP_DECORATE_NO_PAD) == 0) {
|
||||
uiItemL(layout_prop_decorate ? layout_prop_decorate : sub, NULL, ICON_BLANK1);
|
||||
}
|
||||
if (use_prop_decorate) { /* Note that sep flag may have been unset meanwhile. */
|
||||
uiItemL(layout_prop_decorate ? layout_prop_decorate : sub, NULL, ICON_BLANK1);
|
||||
}
|
||||
#endif /* UI_PROP_DECORATE */
|
||||
|
||||
|
|
Loading…
Reference in New Issue