Fix Label colors in popups

This commit is contained in:
Aleksandr Zinovev 2017-07-27 10:27:29 +03:00
parent 3e8b2288f5
commit ec22809025
Notes: blender-bot 2023-02-14 07:57:19 +01:00
Referenced by issue #52250, Glitch in UI in the addon panel regression
Referenced by issue #48241, Bad contrast in box() layout within Popup Windows
3 changed files with 25 additions and 6 deletions

View File

@ -212,6 +212,8 @@ enum {
UI_BUT_ALIGN_STITCH_TOP = (1 << 18),
UI_BUT_ALIGN_STITCH_LEFT = (1 << 19),
UI_BUT_ALIGN_ALL = (UI_BUT_ALIGN | UI_BUT_ALIGN_STITCH_TOP | UI_BUT_ALIGN_STITCH_LEFT),
UI_BUT_BOX_ITEM = (1 << 20), /* This but is "inside" a box item (currently used to change theme colors). */
};
/* scale fixed button widths by this to account for DPI */

View File

@ -128,6 +128,8 @@ typedef struct uiItem {
enum {
UI_ITEM_FIXED = 1 << 0,
UI_ITEM_MIN = 1 << 1,
UI_ITEM_BOX_ITEM = 1 << 2, /* The item is "inside" a box item */
};
typedef struct uiButtonItem {
@ -2306,6 +2308,9 @@ static void ui_litem_layout_column(uiLayout *litem, bool is_box)
if (item->next && (!is_box || item != litem->items.first))
y -= litem->space;
if (is_box)
item->flag |= UI_ITEM_BOX_ITEM;
}
litem->h = litem->y - y;
@ -3266,8 +3271,16 @@ static void ui_item_layout(uiItem *item)
break;
}
for (subitem = litem->items.first; subitem; subitem = subitem->next)
for (subitem = litem->items.first; subitem; subitem = subitem->next) {
if (item->flag & UI_ITEM_BOX_ITEM)
subitem->flag |= UI_ITEM_BOX_ITEM;
ui_item_layout(subitem);
}
} else {
if (item->flag & UI_ITEM_BOX_ITEM) {
uiButtonItem *bitem = (uiButtonItem *)item;
bitem->but->drawflag |= UI_BUT_BOX_ITEM;
}
}
}

View File

@ -3655,11 +3655,15 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
switch (but->type) {
case UI_BTYPE_LABEL:
if (but->block->flag & UI_BLOCK_LOOP)
widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect);
else {
wt = widget_type(UI_WTYPE_LABEL);
fstyle = &style->widgetlabel;
wt = widget_type(UI_WTYPE_LABEL);
fstyle = &style->widgetlabel;
if (but->drawflag & UI_BUT_BOX_ITEM) {
wt->wcol_theme = &tui->wcol_box;
wt->state = widget_state;
}
else if (but->block->flag & UI_BLOCK_LOOP) {
wt->wcol_theme = &tui->wcol_menu_back;
wt->state = widget_state;
}
break;