diff options
Diffstat (limited to 'source/blender/editors/sculpt_paint/paint_stroke.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_stroke.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index a6d80953178..b1ddf1172c8 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -194,7 +194,7 @@ static void paint_draw_line_cursor(bContext *C, int x, int y, void *customdata) static bool paint_tool_require_location(Brush *brush, PaintMode mode) { switch (mode) { - case PAINT_SCULPT: + case ePaintSculpt: if (ELEM(brush->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_ROTATE, SCULPT_TOOL_SNAKE_HOOK, SCULPT_TOOL_THUMB)) { @@ -224,6 +224,7 @@ static bool paint_brush_update(bContext *C, bool location_sampled = false; bool location_success = false; bool do_random = false; + bool do_random_mask = 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. @@ -271,9 +272,11 @@ static bool paint_brush_update(bContext *C, } if (paint_supports_dynamic_tex_coords(brush, mode)) { - if (((brush->mtex.brush_map_mode == MTEX_MAP_MODE_VIEW) || - (brush->mtex.brush_map_mode == MTEX_MAP_MODE_AREA) || - (brush->mtex.brush_map_mode == MTEX_MAP_MODE_RANDOM))) + + if (ELEM(brush->mtex.brush_map_mode, + MTEX_MAP_MODE_VIEW, + MTEX_MAP_MODE_AREA, + MTEX_MAP_MODE_RANDOM)) { do_random = true; } @@ -286,6 +289,15 @@ static bool paint_brush_update(bContext *C, /* take care of mask texture, if any */ if (brush->mask_mtex.tex) { + + if (ELEM(brush->mask_mtex.brush_map_mode, + MTEX_MAP_MODE_VIEW, + MTEX_MAP_MODE_AREA, + MTEX_MAP_MODE_RANDOM)) + { + do_random_mask = true; + } + if (brush->mask_mtex.brush_map_mode == MTEX_MAP_MODE_RANDOM) BKE_brush_randomize_texture_coords(ups, true); else { @@ -358,7 +370,9 @@ static bool paint_brush_update(bContext *C, ups->brush_rotation += -brush->mtex.random_angle / 2.0f + brush->mtex.random_angle * BLI_frand(); } + } + if (do_random_mask) { if (brush->mask_mtex.brush_angle_mode & MTEX_ANGLE_RANDOM) { ups->brush_rotation_sec += -brush->mask_mtex.random_angle / 2.0f + brush->mask_mtex.random_angle * BLI_frand(); @@ -389,7 +403,7 @@ static bool paint_stroke_use_jitter(PaintMode mode, Brush *brush, bool invert) /* jitter-ed brush gives weird and unpredictable result for this * kinds of stroke, so manually disable jitter usage (sergey) */ use_jitter &= (brush->flag & (BRUSH_DRAG_DOT | BRUSH_ANCHORED)) == 0; - use_jitter &= (!ELEM(mode, PAINT_TEXTURE_2D, PAINT_TEXTURE_PROJECTIVE) || + use_jitter &= (!ELEM(mode, ePaintTexture2D, ePaintTextureProjective) || !(invert && brush->imagepaint_tool == PAINT_TOOL_CLONE)); @@ -760,13 +774,13 @@ bool paint_supports_dynamic_size(Brush *br, PaintMode mode) return false; switch (mode) { - case PAINT_SCULPT: + case ePaintSculpt: if (sculpt_is_grab_tool(br)) return false; break; - case PAINT_TEXTURE_2D: /* fall through */ - case PAINT_TEXTURE_PROJECTIVE: + case ePaintTexture2D: /* fall through */ + case ePaintTextureProjective: if ((br->imagepaint_tool == PAINT_TOOL_FILL) && (br->flag & BRUSH_USE_GRADIENT)) { @@ -789,7 +803,7 @@ bool paint_supports_smooth_stroke(Brush *br, PaintMode mode) } switch (mode) { - case PAINT_SCULPT: + case ePaintSculpt: if (sculpt_is_grab_tool(br)) return false; break; @@ -802,7 +816,7 @@ bool paint_supports_smooth_stroke(Brush *br, PaintMode mode) bool paint_supports_texture(PaintMode mode) { /* omit: PAINT_WEIGHT, PAINT_SCULPT_UV, PAINT_INVALID */ - return ELEM(mode, PAINT_SCULPT, PAINT_VERTEX, PAINT_TEXTURE_PROJECTIVE, PAINT_TEXTURE_2D); + return ELEM(mode, ePaintSculpt, ePaintVertex, ePaintTextureProjective, ePaintTexture2D); } /* return true if the brush size can change during paint (normally used for pressure) */ @@ -812,7 +826,7 @@ bool paint_supports_dynamic_tex_coords(Brush *br, PaintMode mode) return false; switch (mode) { - case PAINT_SCULPT: + case ePaintSculpt: if (sculpt_is_grab_tool(br)) return false; break; |