diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-07-02 19:18:16 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-07-02 19:18:16 +0300 |
commit | c2814f5b28235f8cd621ea9dc965b37c97801d76 (patch) | |
tree | c1ca07a390906954b45bc5944bdb1efbc93ab867 /source/blender | |
parent | ac8b641b77e08e551a37feb7394349bbd1f0bbee (diff) | |
parent | 73c577d46a2fd99c519ce7ef0fd9deb3b914099f (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_stroke.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 80211c46733..21afb949330 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -242,13 +242,14 @@ static bool paint_tool_require_location(Brush *brush, ePaintMode mode) } /* Initialize the stroke cache variants from operator properties */ -static bool paint_brush_update(bContext *C, - Brush *brush, - ePaintMode mode, - struct PaintStroke *stroke, - const float mouse_init[2], - float mouse[2], float pressure, - float location[3]) +static bool paint_brush_update( + bContext *C, + Brush *brush, + ePaintMode mode, + struct PaintStroke *stroke, + const float mouse_init[2], + float mouse[2], float pressure, + float r_location[3], bool *r_location_is_set) { Scene *scene = CTX_data_scene(C); UnifiedPaintSettings *ups = stroke->ups; @@ -259,6 +260,7 @@ static bool paint_brush_update(bContext *C, bool is_dry_run = false; bool do_random = false; bool do_random_mask = false; + *r_location_is_set = false; /* XXX: Use pressure value from first brush step for brushes which don't * support strokes (grab, thumb). They depends on initial state and * brush coord/pressure/etc. @@ -357,10 +359,11 @@ static bool paint_brush_update(bContext *C, halfway[1] = dy * 0.5f + stroke->initial_mouse[1]; if (stroke->get_location) { - if (stroke->get_location(C, location, halfway)) { + if (stroke->get_location(C, r_location, halfway)) { hit = true; location_sampled = true; location_success = true; + *r_location_is_set = true; } else if (!paint_tool_require_location(brush, mode)) { hit = true; @@ -430,14 +433,17 @@ static bool paint_brush_update(bContext *C, if (!location_sampled) { if (stroke->get_location) { - if (stroke->get_location(C, location, mouse)) + if (stroke->get_location(C, r_location, mouse)) { location_success = true; + *r_location_is_set = true; + } else if (!paint_tool_require_location(brush, mode)) location_success = true; } else { - zero_v3(location); + zero_v3(r_location); location_success = true; + /* don't set 'r_location_is_set', since we don't want to use the value. */ } } @@ -516,8 +522,13 @@ static void paint_brush_stroke_add_step(bContext *C, wmOperator *op, const float } - ups->last_hit = paint_brush_update(C, brush, mode, stroke, mouse_in, mouse_out, pressure, location); - copy_v3_v3(ups->last_location, location); + bool is_location_is_set; + ups->last_hit = paint_brush_update( + C, brush, mode, stroke, mouse_in, mouse_out, pressure, + location, &is_location_is_set); + if (is_location_is_set) { + copy_v3_v3(ups->last_location, location); + } if (!ups->last_hit) { return; } |