Fix: UI: Small layout glitch with search template and decorators

Button layout wouldn't be entirely correct with split layout was
enabled, but decorators disabled (`uiLayout.use_property_split = True`,
`uiLayout.use_property_decorate = False`).

See https://projects.blender.org/blender/blender/pulls/127751#issuecomment-1298468.
This commit is contained in:
Julian Eisel
2024-09-20 13:03:35 +02:00
parent e0ce6ce28a
commit 439d4dfc3c
3 changed files with 20 additions and 8 deletions

View File

@@ -3059,6 +3059,9 @@ void uiItemsFullEnumO_items(uiLayout *layout,
struct uiPropertySplitWrapper {
uiLayout *label_column;
uiLayout *property_row;
/**
* Column for decorators. Note that this may be null, see #uiItemPropertySplitWrapperCreate().
*/
uiLayout *decorate_column;
};
@@ -3066,6 +3069,9 @@ struct uiPropertySplitWrapper {
* Normally, we handle the split layout in #uiItemFullR(), but there are other cases where the
* logic is needed. Ideally, #uiItemFullR() could just call this, but it currently has too many
* special needs.
*
* The returned #uiPropertySplitWrapper.decorator_column may be null when decorators are disabled
* (#uiLayoutGetPropDecorate() returns false).
*/
uiPropertySplitWrapper uiItemPropertySplitWrapperCreate(uiLayout *parent_layout);

View File

@@ -3336,7 +3336,9 @@ uiPropertySplitWrapper uiItemPropertySplitWrapperCreate(uiLayout *parent_layout)
split_wrapper.label_column = uiLayoutColumn(layout_split, true);
split_wrapper.label_column->alignment = UI_LAYOUT_ALIGN_RIGHT;
split_wrapper.property_row = ui_item_prop_split_layout_hack(parent_layout, layout_split);
split_wrapper.decorate_column = uiLayoutColumn(layout_row, true);
split_wrapper.decorate_column = uiLayoutGetPropDecorate(parent_layout) ?
uiLayoutColumn(layout_row, true) :
nullptr;
return split_wrapper;
}

View File

@@ -878,10 +878,10 @@ static void ui_node_draw_input(uiLayout &layout,
PointerRNA nodeptr = RNA_pointer_create(&ntree.id, &RNA_Node, &node);
row = uiLayoutRow(&layout, true);
/* Decorations are added manually here. */
uiLayoutSetPropDecorate(row, false);
uiPropertySplitWrapper split_wrapper = uiItemPropertySplitWrapperCreate(row);
/* Decorations are added manually here. */
uiLayoutSetPropDecorate(row, false);
/* Empty decorator item for alignment. */
bool add_dummy_decorator = false;
@@ -944,8 +944,10 @@ static void ui_node_draw_input(uiLayout &layout,
case SOCK_BOOLEAN:
case SOCK_RGBA:
uiItemR(sub, &inputptr, "default_value", UI_ITEM_NONE, "", ICON_NONE);
uiItemDecoratorR(
split_wrapper.decorate_column, &inputptr, "default_value", RNA_NO_INDEX);
if (split_wrapper.decorate_column) {
uiItemDecoratorR(
split_wrapper.decorate_column, &inputptr, "default_value", RNA_NO_INDEX);
}
break;
case SOCK_STRING: {
const bNodeTree *node_tree = (const bNodeTree *)nodeptr.owner_id;
@@ -958,8 +960,10 @@ static void ui_node_draw_input(uiLayout &layout,
else {
uiItemR(sub, &inputptr, "default_value", UI_ITEM_NONE, "", ICON_NONE);
}
uiItemDecoratorR(
split_wrapper.decorate_column, &inputptr, "default_value", RNA_NO_INDEX);
if (split_wrapper.decorate_column) {
uiItemDecoratorR(
split_wrapper.decorate_column, &inputptr, "default_value", RNA_NO_INDEX);
}
break;
}
case SOCK_MENU:
@@ -974,7 +978,7 @@ static void ui_node_draw_input(uiLayout &layout,
}
}
if (add_dummy_decorator) {
if (add_dummy_decorator && split_wrapper.decorate_column) {
uiItemDecoratorR(split_wrapper.decorate_column, nullptr, nullptr, 0);
}