workaround [#24392] 2d Image paint editor: no clone/smear/soften tools etc
authorCampbell Barton <ideasman42@gmail.com>
Wed, 3 Nov 2010 21:23:02 +0000 (21:23 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 3 Nov 2010 21:23:02 +0000 (21:23 +0000)
the brush system matches the brush mode with the object mode, but this doesn't work for 2D image view paint.
since the poll() function doesnt have access to the context, for now just check if no paint modes are active, default to texture paint.

source/blender/blenkernel/intern/brush.c
source/blender/blenloader/intern/readfile.c
source/blender/editors/space_info/info_stats.c
source/blender/editors/transform/transform_manipulator.c
source/blender/editors/transform/transform_orientations.c
source/blender/makesdna/DNA_object_types.h
source/blender/makesrna/intern/rna_sculpt_paint.c

index 7a10f9082e587e0698904be07e466aab8ec93128..649b3e3ad9b4d224c206ed7f450e9c8693d6892e 100644 (file)
@@ -67,7 +67,7 @@ static void brush_set_defaults(Brush *brush)
        brush->blend = 0;
        brush->flag = 0;
 
-       brush->ob_mode = (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT);
+       brush->ob_mode = OB_MODE_ALL_PAINT;
 
        /* BRUSH SCULPT TOOL SETTINGS */
        brush->size= 35; /* radius of the brush in pixels */
index 595781ac9bdd5162f1408264439e08e92acd053e..a9fd383114f6684a3ef1b1ce9fee6ead2e92b1c9 100644 (file)
@@ -11124,7 +11124,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                Brush *br;
                for(br= main->brush.first; br; br= br->id.next) {
                        if(br->ob_mode==0)
-                               br->ob_mode= (OB_MODE_SCULPT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_VERTEX_PAINT);
+                               br->ob_mode= OB_MODE_ALL_PAINT;
                }
                
        }
index 846812cc1f01023b412742e4d7371788568b6c90..7a6e5dad017496df501f14be09b11d8c69ab10f5 100644 (file)
@@ -339,7 +339,7 @@ static void stats_update(Scene *scene)
                /* Pose Mode */
                stats_object_pose(ob, &stats);
        }
-       else if(ob && (ob->flag & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) {
+       else if(ob && (ob->flag & OB_MODE_ALL_PAINT)) {
                /* Sculpt and Paint Mode */
                stats_object_paint(ob, &stats);
        }
index b3dbf3c853aee2e514d712ac620d6bc9118923c3..23b4cf5fd995873e6591225f8ce2008ed9a47be0 100644 (file)
@@ -443,7 +443,7 @@ int calc_manipulator_stats(const bContext *C)
                        mul_m4_v3(ob->obmat, scene->twmax);
                }
        }
-       else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) {
+       else if(ob && (ob->mode & OB_MODE_ALL_PAINT)) {
                ;
        }
        else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
index 2d936460c53e1ca6978c2060d413c0715896bc87..085b784b6f0b2be0dbcd02679dc4174f8ef69bf9 100644 (file)
@@ -884,7 +884,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3],
                        result = ORIENTATION_EDGE;
                }
        }
-       else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_PARTICLE_EDIT)))
+       else if(ob && (ob->mode & (OB_MODE_ALL_PAINT|OB_MODE_PARTICLE_EDIT)))
        {
        }
        else {
index 60b4f6a51b6f7522e84b65329ffc3e55592b7931..a5e8e1545b04f9eba524815a7d9acfd06a904da5 100644 (file)
@@ -557,6 +557,9 @@ typedef enum ObjectMode {
        OB_MODE_POSE = 64
 } ObjectMode;
 
+/* any mode where the brush system is used */
+#define OB_MODE_ALL_PAINT (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)
+
 #define MAX_DUPLI_RECUR 8
 
 #ifdef __cplusplus
index 3b83ec2d3ad9993b663a6fcb5279d4c29b55e049..0fe3972104ee10699429df25f8de80a578d27d24 100644 (file)
@@ -162,8 +162,19 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value)
        Scene *scene= (Scene *)ptr->id.data;
        Object *ob = OBACT;
        Brush *brush= value.id.data;
-       return ob->mode & brush->ob_mode;
+       
+       /* weak, for object painting we need to check against the object mode
+        * but for 2D view image painting we always want texture brushes 
+        * this is not quite correct since you could be in object weightpaint
+        * mode at the same time as the 2D image view, but for now its *good enough* */
+       if(ob->mode & OB_MODE_ALL_PAINT) {
+               return ob->mode & brush->ob_mode;
+       }
+       else {
+               return OB_MODE_TEXTURE_PAINT & brush->ob_mode;
+       }
 }
+
 #else
 
 static void rna_def_paint(BlenderRNA *brna)