Revision: 58935
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58935
Author:   psy-fi
Date:     2013-08-05 15:51:50 +0000 (Mon, 05 Aug 2013)
Log Message:
-----------
Gradient fill functional in 2d paint. To use select the fill tool and
tick use gradient. Then drag on the canvas to define the gradient line.

Modified Paths:
--------------
    branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py
    
branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c
    branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image_2d.c
    branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_intern.h
    branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c

Modified: branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py
===================================================================
--- branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py        
2013-08-05 15:49:25 UTC (rev 58934)
+++ branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py        
2013-08-05 15:51:50 UTC (rev 58935)
@@ -712,7 +712,8 @@
                     col.template_color_picker(brush, "color", 
value_slider=True)
                 col.prop(brush, "use_gradient")
                 if brush.use_gradient:
-                    col.prop(brush, "gradient_source")
+                    if brush.image_tool == 'DRAW':
+                        col.prop(brush, "gradient_source")
                     col.template_color_ramp(brush, "gradient", expand=True)
                 else:
                     col = layout.column(align=True)            

Modified: 
branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- 
branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py   
    2013-08-05 15:49:25 UTC (rev 58934)
+++ 
branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py   
    2013-08-05 15:51:50 UTC (rev 58935)
@@ -689,7 +689,8 @@
                     col.template_color_picker(brush, "color", 
value_slider=True)
                 col.prop(brush, "use_gradient")
                 if brush.use_gradient:
-                    col.prop(brush, "gradient_source")
+                    if brush.image_tool == 'DRAW':
+                        col.prop(brush, "gradient_source")
                     col.template_color_ramp(brush, "gradient", expand=True)
                 else:
                     col = layout.column(align=True)            

Modified: 
branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c   
2013-08-05 15:49:25 UTC (rev 58934)
+++ branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c   
2013-08-05 15:51:50 UTC (rev 58935)
@@ -586,8 +586,13 @@
                glEnable(GL_LINE_SMOOTH);
                glEnable(GL_BLEND);
 
+               glLineWidth(4.0);
                glColor4ub(0, 0, 0, 255);
                sdrawline(x, y, pop->startmouse[0], pop->startmouse[1]);
+               glLineWidth(2.0);
+               glColor4ub(255, 255, 255, 255);
+               sdrawline(x, y, pop->startmouse[0], pop->startmouse[1]);
+               glLineWidth(1.0);
 
                glDisable(GL_BLEND);
                glDisable(GL_LINE_SMOOTH);
@@ -660,6 +665,11 @@
        float size;
        int eraser;
 
+       RNA_float_get_array(itemptr, "mouse", mouse);
+       pressure = RNA_float_get(itemptr, "pressure");
+       eraser = RNA_boolean_get(itemptr, "pen_flip");
+       size = RNA_float_get(itemptr, "size");
+
        /* stroking with fill tool only acts on stroke end */
        if (brush->imagepaint_tool == PAINT_TOOL_FILL) {
                pop->prevmouse[0] = mouse[0];
@@ -667,11 +677,6 @@
                return;
        }
 
-       RNA_float_get_array(itemptr, "mouse", mouse);
-       pressure = RNA_float_get(itemptr, "pressure");
-       eraser = RNA_boolean_get(itemptr, "pen_flip");
-       size = RNA_float_get(itemptr, "size");
-
        if (BKE_brush_use_alpha_pressure(scene, brush))
                BKE_brush_alpha_set(scene, brush, max_ff(0.0f, startalpha * 
pressure * alphafac));
        else
@@ -721,7 +726,9 @@
 
        if (brush->imagepaint_tool == PAINT_TOOL_FILL) {
                if (brush->flag & BRUSH_USE_GRADIENT) {
-
+                       if (pop->mode == PAINT_MODE_2D) {
+                               paint_2d_gradient_fill(C, brush, 
pop->startmouse, pop->prevmouse, pop->custom_paint);
+                       }
                }
                else {
                        float color[3];

Modified: 
branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image_2d.c
===================================================================
--- 
branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image_2d.c    
    2013-08-05 15:49:25 UTC (rev 58934)
+++ 
branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image_2d.c    
    2013-08-05 15:51:50 UTC (rev 58935)
@@ -47,6 +47,7 @@
 #include "BKE_image.h"
 #include "BKE_paint.h"
 #include "BKE_report.h"
+#include "BKE_texture.h"
 
 #include "ED_screen.h"
 
@@ -1272,3 +1273,78 @@
 
        WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, ima);
 }
+
+void paint_2d_gradient_fill (const bContext *C, Brush *br, float 
mouse_init[2], float mouse_final[2], void *ps)
+{
+       SpaceImage *sima = CTX_wm_space_image(C);
+       Image *ima = sima->image;
+       ImagePaintState *s = ps;
+
+       ImBuf *ibuf;
+       unsigned short i = 0, j = 0;
+       unsigned int color_b;
+       float color_f[4];
+       float image_init[2], image_final[2];
+       float tangent[2];
+       float line_len_sq_inv;
+
+       bool do_float;
+
+       if (!ima)
+               return;
+
+       ibuf = BKE_image_acquire_ibuf(ima, &sima->iuser, NULL);
+
+       if (!ibuf)
+               return;
+
+       UI_view2d_region_to_view(s->v2d, mouse_final[0], mouse_final[1], 
&image_final[0], &image_final[1]);
+       UI_view2d_region_to_view(s->v2d, mouse_init[0], mouse_init[1], 
&image_init[0], &image_init[1]);
+
+       image_final[0] *= ibuf->x;
+       image_final[1] *= ibuf->y;
+
+       image_init[0] *= ibuf->x;
+       image_init[1] *= ibuf->y;
+
+       /* some math to get needed gradient variables */
+       sub_v2_v2v2(tangent, image_final, image_init);
+       line_len_sq_inv = 1.0/len_squared_v2(tangent);
+
+       do_float = (ibuf->rect_float != NULL);
+
+       /* this will be substituted by something else when selection is 
available */
+       imapaint_dirty_region(ima, ibuf, 0, 0, ibuf->x, ibuf->y);
+
+       if (do_float) {
+               for (; i < ibuf->x; i++) {
+                       for (j = 0; j < ibuf->y; j++) {
+                               float p[2] = {i - image_init[0], j - 
image_init[1]};
+                               float f = dot_v2v2(p, tangent)*line_len_sq_inv;
+
+                               do_colorband(br->gradient, f, color_f);
+                               copy_v4_v4(ibuf->rect_float + 4 * (j * ibuf->x 
+ i), color_f);
+                       }
+               }
+       }
+       else {
+               for (; i < ibuf->x; i++) {
+                       for (j = 0; j < ibuf->y; j++) {
+                               float p[2] = {i - image_init[0], j - 
image_init[1]};
+                               float f = dot_v2v2(p, tangent)*line_len_sq_inv;
+
+                               do_colorband(br->gradient, f, color_f);
+                               rgba_float_to_uchar((unsigned char *)&color_b, 
color_f);
+
+                               *(ibuf->rect + j * ibuf->x + i) =  color_b;
+                       }
+               }
+       }
+
+       imapaint_image_update(sima, ima, ibuf, false);
+       imapaint_clear_partial_redraw();
+
+       BKE_image_release_ibuf(ima, ibuf, NULL);
+
+       WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, ima);
+}

Modified: 
branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_intern.h  
2013-08-05 15:49:25 UTC (rev 58934)
+++ branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_intern.h  
2013-08-05 15:51:50 UTC (rev 58935)
@@ -159,6 +159,7 @@
 void paint_2d_stroke_done(void *ps);
 void paint_2d_stroke(void *ps, const float prev_mval[2], const float mval[2], 
int eraser);
 void paint_2d_bucket_fill(const struct bContext *C, float color[3]);
+void paint_2d_gradient_fill (const struct bContext *C, struct Brush *br, float 
mouse_init[2], float mouse_final[2], void *ps);
 void *paint_proj_new_stroke(struct bContext *C, struct Object *ob, const float 
mouse[2], int mode);
 void paint_proj_stroke(struct bContext *C, void *ps, const float 
prevmval_i[2], const float mval_i[2]);
 void paint_proj_redraw(const bContext *C, void *pps, bool final);

Modified: branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c  
2013-08-05 15:49:25 UTC (rev 58934)
+++ branches/soc-2013-paint/source/blender/makesrna/intern/rna_brush.c  
2013-08-05 15:51:50 UTC (rev 58935)
@@ -410,7 +410,7 @@
        else br->flag &= ~BRUSH_USE_GRADIENT;
 
        if ((br->flag & BRUSH_USE_GRADIENT) && br->gradient == NULL)
-               br->gradient = add_colorband(false);
+               br->gradient = add_colorband(true);
 }
 
 static void rna_Brush_set_unprojected_radius(PointerRNA *ptr, float value)

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

Reply via email to