Fix Label colors in popups
authorAleksandr Zinovev <roaoao@gmail.com>
Thu, 27 Jul 2017 07:27:29 +0000 (10:27 +0300)
committerAleksandr Zinovev <roaoao@gmail.com>
Thu, 27 Jul 2017 07:27:29 +0000 (10:27 +0300)
source/blender/editors/include/UI_interface.h
source/blender/editors/interface/interface_layout.c
source/blender/editors/interface/interface_widgets.c

index 7b4fac08a7b03fbd534164ab4cc763b0f914a1c8..9376de8c095b86820876a333431e21b7d7177768 100644 (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 */
index da43a58bc746c588f5edf3def85f4d1fc6cb141d..fed9f2d364eda58f3fd0bd6508423acf702efcb8 100644 (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;
+               }
        }
 }
 
index f7f2b422724144df84fee6418021810bfc71a21e..51bf09125ba9234904f4039d5933e1b0b791db86 100644 (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;