Fix T62359: Flip colors for Fill Tool missing
authorPhilipp Oeser <info@graphics-engineer.com>
Fri, 8 Mar 2019 14:53:38 +0000 (15:53 +0100)
committerPhilipp Oeser <info@graphics-engineer.com>
Mon, 11 Mar 2019 13:36:22 +0000 (14:36 +0100)
Reviewers: brecht

Maniphest Tasks: T62359

Differential Revision: https://developer.blender.org/D4486

source/blender/editors/sculpt_paint/paint_image.c
source/blender/editors/sculpt_paint/paint_image_proj.c
source/blender/editors/sculpt_paint/paint_intern.h
source/blender/editors/sculpt_paint/paint_stroke.c

index 9101f65..5e3d01d 100644 (file)
@@ -585,8 +585,12 @@ static void paint_stroke_done(const bContext *C, struct PaintStroke *stroke)
                else {
                        if (pop->mode == PAINT_MODE_2D) {
                                float color[3];
-
-                               srgb_to_linearrgb_v3_v3(color, BKE_brush_color_get(scene, brush));
+                               if (paint_stroke_inverted(stroke)) {
+                                       srgb_to_linearrgb_v3_v3(color, BKE_brush_secondary_color_get(scene, brush));
+                               }
+                               else {
+                                       srgb_to_linearrgb_v3_v3(color, BKE_brush_color_get(scene, brush));
+                               }
                                paint_2d_bucket_fill(C, color, brush, pop->prevmouse, pop->custom_paint);
                        }
                        else {
@@ -1196,7 +1200,7 @@ static bool brush_colors_flip_poll(bContext *C)
 {
        if (image_paint_poll(C)) {
                Brush *br = image_paint_brush(C);
-               if (br->imagepaint_tool == PAINT_TOOL_DRAW)
+               if (ELEM(br->imagepaint_tool, PAINT_TOOL_DRAW, PAINT_TOOL_FILL))
                        return true;
        }
        else {
index f8a2259..d712d06 100644 (file)
@@ -5367,7 +5367,7 @@ static void paint_proj_stroke_ps(
                ps->blend = IMB_BLEND_ERASE_ALPHA;
 
        /* handle gradient and inverted stroke color here */
-       if (ps->tool == PAINT_TOOL_DRAW) {
+       if (ELEM(ps->tool, PAINT_TOOL_DRAW, PAINT_TOOL_FILL)) {
                paint_brush_color_get(scene, brush, false, ps->mode == BRUSH_STROKE_INVERT, distance, pressure,  ps->paint_color, NULL);
                if (ps->use_colormanagement) {
                        srgb_to_linearrgb_v3_v3(ps->paint_color_linear, ps->paint_color);
@@ -5376,15 +5376,6 @@ static void paint_proj_stroke_ps(
                        copy_v3_v3(ps->paint_color_linear, ps->paint_color);
                }
        }
-       else if (ps->tool == PAINT_TOOL_FILL) {
-               copy_v3_v3(ps->paint_color, BKE_brush_color_get(scene, brush));
-               if (ps->use_colormanagement) {
-                       srgb_to_linearrgb_v3_v3(ps->paint_color_linear, ps->paint_color);
-               }
-               else {
-                       copy_v3_v3(ps->paint_color_linear, ps->paint_color);
-               }
-       }
        else if (ps->tool == PAINT_TOOL_MASK) {
                ps->stencil_value = brush->weight;
 
index 8363145..5b86fc0 100644 (file)
@@ -81,6 +81,7 @@ int paint_stroke_modal(struct bContext *C, struct wmOperator *op, const struct w
 int paint_stroke_exec(struct bContext *C, struct wmOperator *op);
 void paint_stroke_cancel(struct bContext *C, struct wmOperator *op);
 bool paint_stroke_flipped(struct PaintStroke *stroke);
+bool paint_stroke_inverted(struct PaintStroke *stroke);
 struct ViewContext *paint_stroke_view_context(struct PaintStroke *stroke);
 void *paint_stroke_mode_data(struct PaintStroke *stroke);
 float paint_stroke_distance_get(struct PaintStroke *stroke);
index 2af6a4d..a782ca9 100644 (file)
@@ -1365,6 +1365,11 @@ bool paint_stroke_flipped(struct PaintStroke *stroke)
        return stroke->pen_flip;
 }
 
+bool paint_stroke_inverted(struct PaintStroke *stroke)
+{
+       return stroke->stroke_mode == BRUSH_STROKE_INVERT;
+}
+
 float paint_stroke_distance_get(struct PaintStroke *stroke)
 {
        return stroke->stroke_distance;