From 81fe9d2d04f463c2bbaea599d067beeca6ae2dac Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 21:23:02 +0000 Subject: [PATCH] workaround [#24392] 2d Image paint editor: no clone/smear/soften tools etc 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 | 2 +- source/blender/blenloader/intern/readfile.c | 2 +- source/blender/editors/space_info/info_stats.c | 2 +- .../editors/transform/transform_manipulator.c | 2 +- .../editors/transform/transform_orientations.c | 2 +- source/blender/makesdna/DNA_object_types.h | 3 +++ source/blender/makesrna/intern/rna_sculpt_paint.c | 13 ++++++++++++- 7 files changed, 20 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 7a10f9082e5..649b3e3ad9b 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -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 */ diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 595781ac9bd..a9fd383114f 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -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; } } diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 846812cc1f0..7a6e5dad017 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -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); } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index b3dbf3c853a..23b4cf5fd99 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -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) { diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index 2d936460c53..085b784b6f0 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -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 { diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 60b4f6a51b6..a5e8e1545b0 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -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 diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c index 3b83ec2d3ad..0fe3972104e 100644 --- a/source/blender/makesrna/intern/rna_sculpt_paint.c +++ b/source/blender/makesrna/intern/rna_sculpt_paint.c @@ -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)