Revision: 33647
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33647
Author:   nicholasbishop
Date:     2010-12-14 02:19:51 +0100 (Tue, 14 Dec 2010)

Log Message:
-----------
Fixed bug #23826, Other kind of brushes appear in sculpt mode

Was another problem caused by each brush being allowed in more than
one paint mode.

Added a new field to the brush struct to indicate what mode the icon
was last set for; if it's changed then reset it. Not sure if it's
really worth it to cache this, could remove it for simplicity.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_icons.c
    trunk/blender/source/blender/makesdna/DNA_brush_types.h

Modified: trunk/blender/source/blender/editors/interface/interface_icons.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_icons.c    
2010-12-13 21:22:30 UTC (rev 33646)
+++ trunk/blender/source/blender/editors/interface/interface_icons.c    
2010-12-14 01:19:51 UTC (rev 33647)
@@ -1026,30 +1026,46 @@
                BKE_icon_getid(id);
                ui_id_icon_render(C, id, preview);
        }
-       else if(!id->icon_id) {
-               /* no icon found, reset it */
-               
-               /* this is not nice, should probably make
-                  brushes be strictly in one paint mode only
-                  to avoid this kind of thing */
+       else {
                Object *ob = CTX_data_active_object(C);
                EnumPropertyItem *items;
-               int tool;
-               
-               if(ob && (ob->mode & OB_MODE_SCULPT)) {
+               int tool, mode = 0;
+
+               /* this is not nice, should probably make brushes be
+                  strictly in one paint mode only to avoid checking
+                  object mode here */
+
+               if(ob) {
+                       if(ob->mode & OB_MODE_SCULPT)
+                               mode = OB_MODE_SCULPT;
+                       else if(ob->mode & 
(OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT))
+                               mode = OB_MODE_VERTEX_PAINT;
+                       else if(ob->mode & OB_MODE_TEXTURE_PAINT)
+                               mode = OB_MODE_TEXTURE_PAINT;
+               }
+
+               /* check if cached icon is OK */
+               if(!mode || (id->icon_id && mode == br->icon_mode))
+                       return id->icon_id;
+
+               br->icon_mode = mode;
+
+               /* reset the icon */
+               if(mode == OB_MODE_SCULPT) {
                        items = brush_sculpt_tool_items;
                        tool = br->sculpt_tool;
                }
-               else if(ob && (ob->mode & 
(OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT))) {
+               else if(mode == OB_MODE_VERTEX_PAINT) {
                        items = brush_vertexpaint_tool_items;
                        tool = br->vertexpaint_tool;
                }
-               else {
+               else if(mode == OB_MODE_TEXTURE_PAINT) {
                        items = brush_imagepaint_tool_items;
                        tool = br->imagepaint_tool;
                }
 
-               RNA_enum_icon_from_value(items, tool, &id->icon_id);
+               if(!RNA_enum_icon_from_value(items, tool, &id->icon_id))
+                       id->icon_id = 0;
        }
 
        return id->icon_id;

Modified: trunk/blender/source/blender/makesdna/DNA_brush_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_brush_types.h     2010-12-13 
21:22:30 UTC (rev 33646)
+++ trunk/blender/source/blender/makesdna/DNA_brush_types.h     2010-12-14 
01:19:51 UTC (rev 33647)
@@ -57,7 +57,10 @@
        struct ImBuf *icon_imbuf;
        PreviewImage *preview;
        char icon_filepath[240];
+       int icon_mode;                  /* store paint mode for which brush's 
icon was last generated */
+       int pad;
 
+
        float normal_weight;
 
        short blend;            /* blend mode */


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

Reply via email to