Refactor: UI_BTYPE_SEPR_LINE Without Need for uiBut->a1 #118969

Merged
Harley Acheson merged 2 commits from Harley/blender:SepLineNoA1 into main 2024-03-01 18:09:13 +01:00
4 changed files with 35 additions and 15 deletions

View File

@ -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>("uiButProgress");
break;
case UI_BTYPE_SEPR_LINE:
but = MEM_new<uiButSeparatorLine>("uiButSeparatorLine");
break;
case UI_BTYPE_HSVCUBE:
but = MEM_new<uiButHSVCube>("uiButHSVCube");
break;

View File

@ -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;

View File

@ -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<uiButSeparatorLine *>(but);
but_line->is_vertical = is_vertical_bar;
}
}
void uiItemS(uiLayout *layout)

View File

@ -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<uiButSeparatorLine *>(but);
Harley marked this conversation as resolved Outdated

const uiButSeparatorLine

`const uiButSeparatorLine`
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],