Commit: 85eb2ea3bb81d8fdfc7741c5a1bb2b318858a8e0
Author: Julian Eisel
Date:   Thu Jul 16 19:50:21 2015 +0200
Branches: temp-ui-widget-refactor
https://developer.blender.org/rB85eb2ea3bb81d8fdfc7741c5a1bb2b318858a8e0

Avoid special drawing calls for labels within menus by adding a widget type for 
them

===================================================================

M       source/blender/editors/interface/interface_intern.h
M       source/blender/editors/interface/interface_widgets.c
M       source/blender/editors/interface/widgets/widgets.h
M       
source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c

===================================================================

diff --git a/source/blender/editors/interface/interface_intern.h 
b/source/blender/editors/interface/interface_intern.h
index c935438..adeb7cf 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -84,8 +84,9 @@ typedef enum {
        UI_WTYPE_MENU_ICON_RADIO,
        UI_WTYPE_MENU_POINTER_LINK,
        UI_WTYPE_MENU_NODE_LINK,
-       
+
        UI_WTYPE_PULLDOWN,
+       UI_WTYPE_MENU_LABEL,
        UI_WTYPE_MENU_ITEM,
        UI_WTYPE_MENU_ITEM_RADIAL,
        UI_WTYPE_MENU_BACK,
diff --git a/source/blender/editors/interface/interface_widgets.c 
b/source/blender/editors/interface/interface_widgets.c
index 390e3bf..fe9f2e3 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1287,6 +1287,11 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
                        break;
                        
                /* in menus */
+               case UI_WTYPE_MENU_LABEL:
+                       wt.wcol_theme = &btheme->tui.wcol_menu_back;
+                       wt.draw_type = draw_style->menu_label;
+                       break;
+
                case UI_WTYPE_MENU_ITEM:
                        wt.wcol_theme = &btheme->tui.wcol_menu_item;
                        wt.draw_type = draw_style->menu_item;
@@ -1416,7 +1421,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle 
*style, uiBut *but, rct
        if (but->dt == UI_EMBOSS_PULLDOWN) {
                switch (but->type) {
                        case UI_BTYPE_LABEL:
-                               widget_draw_text_icon(&style->widgetlabel, 
&tui->wcol_menu_back, but, rect);
+                               wt = widget_type(UI_WTYPE_MENU_LABEL);
                                break;
                        case UI_BTYPE_SEPR_LINE:
                                ui_draw_separator(rect, &tui->wcol_menu_item);
@@ -1438,12 +1443,13 @@ 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);
+                               if (but->block->flag & UI_BLOCK_LOOP) {
+                                       wt = widget_type(UI_WTYPE_MENU_LABEL);
+                               }
                                else {
                                        wt = widget_type(UI_WTYPE_LABEL);
-                                       fstyle = &style->widgetlabel;
                                }
+                               fstyle = &style->widgetlabel;
                                break;
 
                        case UI_BTYPE_SEPR:
@@ -1642,7 +1648,11 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle 
*style, uiBut *but, rct
                if (disabled)
                        ui_widget_color_disabled(wt);
 
-               wt->draw_type->state(wt, state);
+               /* *** callback routine *** */
+
+               if (wt->draw_type->state) {
+                       wt->draw_type->state(wt, state);
+               }
 
                if (wt->draw_type->custom) {
                        wt->draw_type->custom(but, &wt->wcol, rect, state, 
roundboxalign);
diff --git a/source/blender/editors/interface/widgets/widgets.h 
b/source/blender/editors/interface/widgets/widgets.h
index 3a981e7..3823de4 100644
--- a/source/blender/editors/interface/widgets/widgets.h
+++ b/source/blender/editors/interface/widgets/widgets.h
@@ -86,6 +86,7 @@ typedef struct uiWidgetDrawStyle {
                         *menu_icon_radio,
                         *menu_item,
                         *menu_item_radial,
+                        *menu_label,
                         *menu_node_link,
                         *menu_pointer_link,
                         *menu_radio,
diff --git 
a/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c 
b/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
index c8a875a..c29e397 100644
--- a/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
+++ b/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
@@ -943,6 +943,13 @@ uiWidgetDrawType drawtype_classic_menu_item_radial = {
        /* text */   widget_draw_text_icon,
 };
 
+uiWidgetDrawType drawtype_classic_menu_label = {
+       /* state */  widget_state_nothing,
+       /* draw */   NULL,
+       /* custom */ NULL,
+       /* text */   widget_draw_text_icon,
+};
+
 uiWidgetDrawType drawtype_classic_menu_node_link = {
        /* state */  widget_state,
        /* draw */   widget_menunodebut,
@@ -1062,6 +1069,7 @@ uiWidgetDrawStyle WidgetStyle_Classic = {
        /* menu_icon_radio */   &drawtype_classic_menu_icon_radio,
        /* menu_item */         &drawtype_classic_menu_item,
        /* menu_item_radial */  &drawtype_classic_menu_item_radial,
+       /* menu_item_label */   &drawtype_classic_menu_label,
        /* menu_node_link */    &drawtype_classic_menu_node_link,
        /* menu_pointer_link */ &drawtype_classic_menu_pointer_link, /* not 
used (yet?) */
        /* menu_radio */        &drawtype_classic_menu_radio,

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to