Fix #22645: Texture paint: soften tool does draw brushes
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 17 Nov 2010 06:30:06 +0000 (06:30 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 17 Nov 2010 06:30:06 +0000 (06:30 +0000)
Disable projection painting for soften tools.

Also it looks like smear tools support projection in the code, so
enabled project paint menu for such tools

release/scripts/ui/space_view3d_toolbar.py
source/blender/editors/sculpt_paint/paint_image.c

index 12ecc24ed2dd71457c866d487c38601d91a0f905..d49ae34f2222ca3e3685f6375eb250fd1c28e641 100644 (file)
@@ -1159,7 +1159,7 @@ class VIEW3D_PT_tools_projectpaint(View3DPanel, bpy.types.Panel):
     @classmethod
     def poll(cls, context):
         brush = context.tool_settings.image_paint.brush
-        return (brush and brush.imagepaint_tool != 'SMEAR')
+        return (brush and brush.imagepaint_tool != 'SOFTEN')
 
     def draw_header(self, context):
         ipaint = context.tool_settings.image_paint
index c5402a00942d9b61c920bc320f8bba2c04e5e42c..3e020e2a18c9e4a463b138f7579fa32e00217899 100644 (file)
@@ -4526,6 +4526,8 @@ typedef struct PaintOperation {
 
        ViewContext vc;
        wmTimer *timer;
+
+       short restore_projection;
 } PaintOperation;
 
 static void paint_redraw(bContext *C, ImagePaintState *s, int final)
@@ -4611,6 +4613,13 @@ static int texture_paint_init(bContext *C, wmOperator *op)
        pop->first= 1;
        op->customdata= pop;
        
+       /* XXX: Soften tool does not support projection painting atm, so just disable
+               projection for this brush */
+       if(brush->imagepaint_tool == PAINT_TOOL_SOFTEN) {
+               settings->imapaint.flag |= IMAGEPAINT_PROJECT_DISABLE;
+               pop->restore_projection = 1;
+       }
+
        /* initialize from context */
        if(CTX_wm_region_view3d(C)) {
                pop->mode= PAINT_MODE_3D;
@@ -4731,6 +4740,9 @@ static void paint_exit(bContext *C, wmOperator *op)
        if(pop->timer)
                WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), pop->timer);
 
+       if(pop->restore_projection)
+               settings->imapaint.flag &= ~IMAGEPAINT_PROJECT_DISABLE;
+
        settings->imapaint.flag &= ~IMAGEPAINT_DRAWING;
        imapaint_canvas_free(&pop->s);
        brush_painter_free(pop->painter);