diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-03-28 11:45:56 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-03-28 11:45:56 +0300 |
commit | afcfc6eb0842b9208bde3e334e3113a73807f6be (patch) | |
tree | 08012fba9d693d8661ac4866c7ea1d2628e63f7f | |
parent | 3944560b4a3a8c08a51c955977e3be3ae07a1afa (diff) |
Fix T86060: Texture Paint clone tool misleading texture UI
For projection painting tools besides the `DRAW` tool:
- Don't show the texture from viewport stencil drawing.
- Don't show the texture panel.
Based on D10564 by @lichtwerk with own changes.
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d_toolbar.py | 12 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_cursor.c | 15 |
2 files changed, 21 insertions, 6 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 72baa5331bf..831fc06eda5 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -622,9 +622,15 @@ class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel): @classmethod def poll(cls, context): - settings = cls.paint_settings(context) - return (settings and settings.brush and - (context.sculpt_object or context.image_paint_object or context.vertex_paint_object)) + if ( + (settings := cls.paint_settings(context)) and + (brush := settings.brush) + ): + if context.sculpt_object or context.vertex_paint_object: + return True + elif context.image_paint_object: + return (brush.image_tool == 'DRAW') + return False def draw(self, context): layout = self.layout diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index b44f2f66d92..c5e7b2dc4d3 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -545,6 +545,7 @@ static bool paint_draw_tex_overlay(UnifiedPaintSettings *ups, int x, int y, float zoom, + const ePaintMode mode, bool col, bool primary) { @@ -556,6 +557,13 @@ static bool paint_draw_tex_overlay(UnifiedPaintSettings *ups, (brush->overlay_flags & BRUSH_OVERLAY_SECONDARY) != 0); int overlay_alpha = (primary) ? brush->texture_overlay_alpha : brush->mask_overlay_alpha; + if (mode == PAINT_MODE_TEXTURE_3D) { + if (primary && brush->imagepaint_tool == PAINT_TOOL_DRAW) { + /* All non-draw tools don't use the primary texture (clone, smear, soften.. etc). */ + return false; + } + } + if (!(mtex->tex) || !((mtex->brush_map_mode == MTEX_MAP_MODE_STENCIL) || (valid && ELEM(mtex->brush_map_mode, MTEX_MAP_MODE_VIEW, MTEX_MAP_MODE_TILED)))) { @@ -785,10 +793,11 @@ static bool paint_draw_alpha_overlay(UnifiedPaintSettings *ups, /* Colored overlay should be drawn separately. */ if (col) { if (!(flags & PAINT_OVERLAY_OVERRIDE_PRIMARY)) { - alpha_overlay_active = paint_draw_tex_overlay(ups, brush, vc, x, y, zoom, true, true); + alpha_overlay_active = paint_draw_tex_overlay(ups, brush, vc, x, y, zoom, mode, true, true); } if (!(flags & PAINT_OVERLAY_OVERRIDE_SECONDARY)) { - alpha_overlay_active = paint_draw_tex_overlay(ups, brush, vc, x, y, zoom, false, false); + alpha_overlay_active = paint_draw_tex_overlay( + ups, brush, vc, x, y, zoom, mode, false, false); } if (!(flags & PAINT_OVERLAY_OVERRIDE_CURSOR)) { alpha_overlay_active = paint_draw_cursor_overlay(ups, brush, vc, x, y, zoom); @@ -796,7 +805,7 @@ static bool paint_draw_alpha_overlay(UnifiedPaintSettings *ups, } else { if (!(flags & PAINT_OVERLAY_OVERRIDE_PRIMARY) && (mode != PAINT_MODE_WEIGHT)) { - alpha_overlay_active = paint_draw_tex_overlay(ups, brush, vc, x, y, zoom, false, true); + alpha_overlay_active = paint_draw_tex_overlay(ups, brush, vc, x, y, zoom, mode, false, true); } if (!(flags & PAINT_OVERLAY_OVERRIDE_CURSOR)) { alpha_overlay_active = paint_draw_cursor_overlay(ups, brush, vc, x, y, zoom); |