diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index 8134aaa28c6..a7c7eebdbdb 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -906,6 +906,12 @@ static void ui_but_update_old_active_from_new(uiBut *oldbut, uiBut *but) progress_oldbut->progress_factor = progress_but->progress_factor; break; } + case UI_BTYPE_SEPR_LINE: { + uiButSeparatorLine *line_oldbut = (uiButSeparatorLine *)oldbut; + uiButSeparatorLine *line_but = (uiButSeparatorLine *)but; + line_oldbut->is_vertical = line_but->is_vertical; + break; + } case UI_BTYPE_VIEW_ITEM: { uiButViewItem *view_item_oldbut = (uiButViewItem *)oldbut; uiButViewItem *view_item_newbut = (uiButViewItem *)but; @@ -3938,6 +3944,9 @@ static uiBut *ui_but_new(const eButType type) case UI_BTYPE_PROGRESS: but = MEM_new("uiButProgress"); break; + case UI_BTYPE_SEPR_LINE: + but = MEM_new("uiButSeparatorLine"); + break; case UI_BTYPE_HSVCUBE: but = MEM_new("uiButHSVCube"); break; diff --git a/source/blender/editors/interface/interface_intern.hh b/source/blender/editors/interface/interface_intern.hh index 932b24b7f03..d68ed4560e1 100644 --- a/source/blender/editors/interface/interface_intern.hh +++ b/source/blender/editors/interface/interface_intern.hh @@ -389,6 +389,11 @@ struct uiButProgress : public uiBut { eButProgressType progress_type = UI_BUT_PROGRESS_TYPE_BAR; }; +/** Derived struct for #UI_BTYPE_SEPR_LINE. */ +struct uiButSeparatorLine : public uiBut { + bool is_vertical; +}; + struct uiButViewItem : public uiBut { /* C-Handle to the view item this button was created for. */ uiViewItemHandle *view_item = nullptr; diff --git a/source/blender/editors/interface/interface_layout.cc b/source/blender/editors/interface/interface_layout.cc index 7cc06a4bb6c..d02bcc2d2d1 100644 --- a/source/blender/editors/interface/interface_layout.cc +++ b/source/blender/editors/interface/interface_layout.cc @@ -3452,20 +3452,25 @@ void uiItemS_ex(uiLayout *layout, float factor, const LayoutSeparatorType type) bool is_vertical_bar = (layout->w == 0) && but_type == UI_BTYPE_SEPR_LINE; UI_block_layout_set_current(block, layout); - uiDefBut(block, - but_type, - 0, - "", - 0, - 0, - space, - is_vertical_bar ? UI_UNIT_Y : space, - nullptr, - 0.0, - 0.0, - is_vertical_bar ? 1.0f : 0.0f, - 0, - ""); + uiBut *but = uiDefBut(block, + but_type, + 0, + "", + 0, + 0, + space, + is_vertical_bar ? UI_UNIT_Y : space, + nullptr, + 0.0, + 0.0, + 0.0, + 0, + ""); + + if (but_type == UI_BTYPE_SEPR_LINE) { + uiButSeparatorLine *but_line = static_cast(but); + but_line->is_vertical = is_vertical_bar; + } } void uiItemS(uiLayout *layout) diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index 86c7912106b..6cbe5fa4713 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -3389,7 +3389,8 @@ static void ui_draw_but_HSV_v(uiBut *but, const rcti *rect) /** Separator line. */ static void ui_draw_separator(const uiWidgetColors *wcol, uiBut *but, const rcti *rect) { - const bool vertical = but->a1 == 1.0f; + const uiButSeparatorLine *but_line = static_cast(but); + const bool vertical = but_line->is_vertical; const int mid = vertical ? BLI_rcti_cent_x(rect) : BLI_rcti_cent_y(rect); const uchar col[4] = { wcol->text[0],