Revision: 44894
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44894
Author:   nicholasbishop
Date:     2012-03-15 05:59:44 +0000 (Thu, 15 Mar 2012)
Log Message:
-----------
Code cleanup: simplify brush tool selection operators.

Created a single unifed operator, PAINT_OT_brush_select, to replace
BRUSH_OT_sculpt_tool_set, BRUSH_OT_vertex_tool_set,
BRUSH_OT_weight_tool_set, and BRUSH_OT_image_tool_set.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c       
2012-03-15 05:40:33 UTC (rev 44893)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_ops.c       
2012-03-15 05:59:44 UTC (rev 44894)
@@ -198,6 +198,11 @@
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
 
+static int brush_tool(const Brush *brush, size_t tool_offset)
+{
+       return *(((char *)brush) + tool_offset);
+}
+
 /* generic functions for setting the active brush based on the tool */
 static Brush *brush_tool_cycle(Main *bmain, Brush *brush_orig, const int tool, 
const size_t tool_offset, const int ob_mode)
 {
@@ -208,19 +213,16 @@
        }
 
        /* get the next brush with the active tool */
-       for(    brush= brush_orig->id.next ? brush_orig->id.next : 
bmain->brush.first;
-                       brush != brush_orig;
-                       brush= brush->id.next ? brush->id.next : 
bmain->brush.first)
-       {
-               if(     (brush->ob_mode & ob_mode) &&
-                       (*(((char *)brush) + tool_offset) == tool)
-               ) {
+       for(brush= brush_orig->id.next ? brush_orig->id.next : 
bmain->brush.first;
+               brush != brush_orig;
+               brush= brush->id.next ? brush->id.next : bmain->brush.first) {
+               if((brush->ob_mode & ob_mode) &&
+                  (brush_tool(brush, tool_offset) == tool)) {
                        return brush;
                }
        }
 
        return NULL;
-
 }
 
 static int brush_generic_tool_set(Main *bmain, Paint *paint, const int tool, 
const size_t tool_offset, const int ob_mode)
@@ -239,107 +241,112 @@
        }
 }
 
-static int brush_sculpt_tool_set_exec(bContext *C, wmOperator *op)
-{
-       Main *bmain= CTX_data_main(C);
-       Scene *scene= CTX_data_scene(C);
+/* used in the PAINT_OT_brush_select operator */
+#define OB_MODE_ACTIVE 0
 
-       return brush_generic_tool_set(bmain, 
&scene->toolsettings->sculpt->paint, RNA_enum_get(op->ptr, "tool"), 
offsetof(Brush, sculpt_tool), OB_MODE_SCULPT);
-}
-
-static void BRUSH_OT_sculpt_tool_set(wmOperatorType *ot)
+static int brush_select_exec(bContext *C, wmOperator *op)
 {
-       /* identifiers */
-       ot->name= "Sculpt Tool Set";
-       ot->description= "Set the sculpt tool";
-       ot->idname= "BRUSH_OT_sculpt_tool_set";
-
-       /* api callbacks */
-       ot->exec= brush_sculpt_tool_set_exec;
-
-       /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
-       /* props */
-       ot->prop= RNA_def_enum(ot->srna, "tool", brush_sculpt_tool_items, 0, 
"Tool", "");
-}
-
-static int brush_vertex_tool_set_exec(bContext *C, wmOperator *op)
-{
        Main *bmain= CTX_data_main(C);
-       Scene *scene= CTX_data_scene(C);
+       ToolSettings *toolsettings= CTX_data_tool_settings(C);
+       Paint *paint= NULL;
+       int tool, paint_mode= RNA_enum_get(op->ptr, "paint_mode");
+       size_t tool_offset;
 
-       return brush_generic_tool_set(bmain, 
&scene->toolsettings->vpaint->paint, RNA_enum_get(op->ptr, "tool"), 
offsetof(Brush, vertexpaint_tool), OB_MODE_VERTEX_PAINT);
-}
+       if(paint_mode == OB_MODE_ACTIVE) {
+               /* select current paint mode */
+               paint_mode = CTX_data_active_object(C)->mode &
+                       (OB_MODE_SCULPT|
+                        OB_MODE_VERTEX_PAINT|
+                        OB_MODE_WEIGHT_PAINT|
+                        OB_MODE_TEXTURE_PAINT);
+       }
 
-static void BRUSH_OT_vertex_tool_set(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name= "Vertex Paint Tool Set";
-       ot->description= "Set the vertex paint tool";
-       ot->idname= "BRUSH_OT_vertex_tool_set";
+       switch(paint_mode) {
+       case OB_MODE_SCULPT:
+               paint= &toolsettings->sculpt->paint;
+               tool_offset= offsetof(Brush, sculpt_tool);
+               tool= RNA_enum_get(op->ptr, "sculpt_tool");
+               break;
+       case OB_MODE_VERTEX_PAINT:
+               paint= &toolsettings->vpaint->paint;
+               tool_offset= offsetof(Brush, vertexpaint_tool);
+               tool= RNA_enum_get(op->ptr, "vertex_paint_tool");
+               break;
+       case OB_MODE_WEIGHT_PAINT:
+               paint= &toolsettings->wpaint->paint;
+               /* vertexpaint_tool is used for weight paint mode */
+               tool_offset= offsetof(Brush, vertexpaint_tool);
+               tool= RNA_enum_get(op->ptr, "weight_paint_tool");
+               break;
+       case OB_MODE_TEXTURE_PAINT:
+               paint= &toolsettings->imapaint.paint;
+               tool_offset= offsetof(Brush, imagepaint_tool);
+               tool= RNA_enum_get(op->ptr, "texture_paint_tool");
+       default:
+               /* invalid paint mode */
+               return OPERATOR_CANCELLED;
+       }
 
-       /* api callbacks */
-       ot->exec= brush_vertex_tool_set_exec;
-
-       /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
-       /* props */
-       ot->prop= RNA_def_enum(ot->srna, "tool", brush_vertex_tool_items, 0, 
"Tool", "");
+       return brush_generic_tool_set(bmain, paint, tool, tool_offset, 
paint_mode);
 }
 
-static int brush_weight_tool_set_exec(bContext *C, wmOperator *op)
+static void PAINT_OT_brush_select(wmOperatorType *ot)
 {
-       Main *bmain= CTX_data_main(C);
-       Scene *scene= CTX_data_scene(C);
-       /* vertexpaint_tool is used for weight paint mode */
-       return brush_generic_tool_set(bmain, 
&scene->toolsettings->wpaint->paint, RNA_enum_get(op->ptr, "tool"), 
offsetof(Brush, vertexpaint_tool), OB_MODE_WEIGHT_PAINT);
-}
+       static EnumPropertyItem paint_mode_items[] = {
+               {OB_MODE_ACTIVE, "ACTIVE", 0, "Current", "Set brush for active 
paint mode"},
+               {OB_MODE_SCULPT, "SCULPT", ICON_SCULPTMODE_HLT, "Sculpt", ""},
+               {OB_MODE_VERTEX_PAINT, "VERTEX_PAINT", ICON_VPAINT_HLT, "Vertex 
Paint", ""},
+               {OB_MODE_WEIGHT_PAINT, "WEIGHT_PAINT", ICON_WPAINT_HLT, "Weight 
Paint", ""},
+               {OB_MODE_TEXTURE_PAINT, "TEXTURE_PAINT", ICON_TPAINT_HLT, 
"Texture Paint", ""},
+               {0, NULL, 0, NULL, NULL}};
 
-static void BRUSH_OT_weight_tool_set(wmOperatorType *ot)
-{
        /* identifiers */
-       ot->name= "Weight Paint Tool Set";
-       ot->description= "Set the weight paint tool";
-       ot->idname= "BRUSH_OT_weight_tool_set";
+       ot->name= "Brush Select";
+       ot->description= "Select a paint mode's brush by tool type";
+       ot->idname= "PAINT_OT_brush_select";
 
        /* api callbacks */
-       ot->exec= brush_weight_tool_set_exec;
+       ot->exec= brush_select_exec;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
        /* props */
-       ot->prop= RNA_def_enum(ot->srna, "tool", brush_vertex_tool_items, 0, 
"Tool", "");
+       RNA_def_enum(ot->srna, "paint_mode", paint_mode_items, OB_MODE_ACTIVE, 
"Paint Mode", "");
+       RNA_def_enum(ot->srna, "sculpt_tool", brush_sculpt_tool_items, 0, 
"Sculpt Tool", "");
+       RNA_def_enum(ot->srna, "vertex_paint_tool", brush_vertex_tool_items, 0, 
"Vertex Paint Tool", "");
+       RNA_def_enum(ot->srna, "weight_paint_tool", brush_vertex_tool_items, 0, 
"Weight Paint Tool", "");
+       RNA_def_enum(ot->srna, "texture_paint_tool", brush_image_tool_items, 0, 
"Texture Paint Tool", "");
 }
 
-static int brush_image_tool_set_exec(bContext *C, wmOperator *op)
+static wmKeyMapItem *keymap_brush_select(wmKeyMap *keymap, int paint_mode,
+                                                                               
 int tool, int keymap_type,
+                                                                               
 int keymap_modifier)
 {
-       Main *bmain= CTX_data_main(C);
-       Scene *scene= CTX_data_scene(C);
+       wmKeyMapItem *kmi;
+       kmi = WM_keymap_add_item(keymap, "PAINT_OT_brush_select",
+                                                        keymap_type, KM_PRESS, 
keymap_modifier, 0);
 
-       return brush_generic_tool_set(bmain, 
&scene->toolsettings->imapaint.paint, RNA_enum_get(op->ptr, "tool"), 
offsetof(Brush, imagepaint_tool), OB_MODE_TEXTURE_PAINT);
-}
+       RNA_enum_set(kmi->ptr, "paint_mode", paint_mode);
+       
+       switch(paint_mode) {
+       case OB_MODE_SCULPT:
+               RNA_enum_set(kmi->ptr, "sculpt_tool", tool);
+               break;
+       case OB_MODE_VERTEX_PAINT:
+               RNA_enum_set(kmi->ptr, "vertex_paint_tool", tool);
+               break;
+       case OB_MODE_WEIGHT_PAINT:
+               RNA_enum_set(kmi->ptr, "weight_paint_tool", tool);
+               break;
+       case OB_MODE_TEXTURE_PAINT:
+               RNA_enum_set(kmi->ptr, "texture_paint_tool", tool);
+               break;
+       }
 
-static void BRUSH_OT_image_tool_set(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name= "Image Paint Tool Set";
-       ot->description= "Set the image tool";
-       ot->idname= "BRUSH_OT_image_tool_set";
-
-       /* api callbacks */
-       ot->exec= brush_image_tool_set_exec;
-
-       /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
-       /* props */
-       ot->prop= RNA_def_enum(ot->srna, "tool", brush_image_tool_items, 0, 
"Tool", "");
+       return kmi;
 }
 
-
 static int brush_uv_sculpt_tool_set_exec(bContext *C, wmOperator *op)
 {
        Brush *brush;
@@ -384,10 +391,7 @@
        WM_operatortype_append(BRUSH_OT_reset);
 
        /* note, particle uses a different system, can be added with existing 
operators in wm.py */
-       WM_operatortype_append(BRUSH_OT_sculpt_tool_set);
-       WM_operatortype_append(BRUSH_OT_vertex_tool_set);
-       WM_operatortype_append(BRUSH_OT_weight_tool_set);
-       WM_operatortype_append(BRUSH_OT_image_tool_set);
+       WM_operatortype_append(PAINT_OT_brush_select);
        WM_operatortype_append(BRUSH_OT_uv_sculpt_tool_set);
 
        /* image */
@@ -572,15 +576,15 @@
        ed_keymap_paint_brush_size(keymap, "tool_settings.sculpt.brush.size");
        ed_keymap_paint_brush_radial_control(keymap, "sculpt", RC_ROTATION);
 
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
DKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_DRAW);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
SKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_SMOOTH);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
PKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_PINCH);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
IKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_INFLATE);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
GKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_GRAB);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
LKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_LAYER);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
TKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "tool", SCULPT_TOOL_FLATTEN); /* was just 
TKEY in 2.4x */
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
CKEY, KM_PRESS, 0, 0)->ptr, "tool", SCULPT_TOOL_CLAY);
-       RNA_enum_set(WM_keymap_add_item(keymap, "BRUSH_OT_sculpt_tool_set", 
CKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "tool", SCULPT_TOOL_CREASE);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_DRAW, DKEY, 0);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_SMOOTH, SKEY, 
0);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_PINCH, PKEY, 0);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_INFLATE, IKEY, 
0);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_GRAB, GKEY, 0);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_LAYER, LKEY, 0);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_FLATTEN, TKEY, 
KM_SHIFT);
+       keymap_brush_select(keymap, OB_MODE_SCULPT, SCULPT_TOOL_CLAY, CKEY, 0);

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to