From 53c9507c2878b38176c841c4a2172ea7f543aaba Mon Sep 17 00:00:00 2001 From: Antony Riakiotakis Date: Tue, 16 Apr 2013 15:02:41 +0000 Subject: Option to hide overlay during a stroke. To enable, press the brush icon next to the overlay alpha. --- release/scripts/startup/bl_ui/space_image.py | 15 +++++++-- .../scripts/startup/bl_ui/space_view3d_toolbar.py | 20 ++++++++++-- source/blender/blenkernel/BKE_paint.h | 14 +++++--- source/blender/blenkernel/intern/brush.c | 11 ++++++- source/blender/blenkernel/intern/paint.c | 18 ++++++++-- source/blender/editors/sculpt_paint/paint_cursor.c | 11 ++++--- source/blender/editors/sculpt_paint/paint_stroke.c | 6 +++- source/blender/makesdna/DNA_brush_types.h | 15 +++++++-- source/blender/makesrna/intern/rna_brush.c | 38 +++++++++++++++++++--- 9 files changed, 124 insertions(+), 24 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index 24850c431fe..7ea1b7e2c51 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -734,11 +734,13 @@ class IMAGE_PT_tools_brush_texture(BrushButtonsPanel, Panel): row = col.row() if brush.use_texture_overlay: - row.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') + row.prop(brush, "use_primary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') else: - row.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') + row.prop(brush, "use_primary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') sub = row.row() sub.prop(brush, "texture_overlay_alpha", text="Alpha") + sub.prop(brush, "cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA') + class IMAGE_PT_tools_mask_texture(BrushButtonsPanel, Panel): @@ -756,6 +758,15 @@ class IMAGE_PT_tools_mask_texture(BrushButtonsPanel, Panel): col.template_ID_preview(brush, "mask_texture", new="texture.new", rows=3, cols=8) brush_mask_texture_settings(col, brush) + if tex_slot_alpha.map_mode != 'STENCIL': + if brush.use_secondary_overlay: + row.prop(brush, "use_secondary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') + else: + row.prop(brush, "use_secondary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') + + sub = row.row() + sub.prop(brush, "texture_overlay_alpha", text="Alpha") + sub.prop(brush, "cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA') class IMAGE_PT_tools_brush_tool(BrushButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 073a3f70cca..e4817b649e8 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -767,12 +767,13 @@ class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel): row = col.row() if tex_slot.map_mode != 'STENCIL': if brush.use_texture_overlay: - row.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') + row.prop(brush, "use_primary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') else: - row.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') + row.prop(brush, "use_primary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') sub = row.row() sub.prop(brush, "texture_overlay_alpha", text="Alpha") + sub.prop(brush, "cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA') class VIEW3D_PT_tools_mask_texture(View3DPanel, Panel): @@ -796,6 +797,21 @@ class VIEW3D_PT_tools_mask_texture(View3DPanel, Panel): col.template_ID_preview(brush, "mask_texture", new="texture.new", rows=3, cols=8) brush_mask_texture_settings(col, brush) + + col = layout.column(align=True) + col.active = brush.brush_capabilities.has_overlay + col.label(text="Overlay:") + + row = col.row() + if tex_slot_alpha.map_mode != 'STENCIL': + if brush.use_secondary_overlay: + row.prop(brush, "use_secondary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') + else: + row.prop(brush, "use_secondary_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') + + sub = row.row() + sub.prop(brush, "texture_overlay_alpha", text="Alpha") + sub.prop(brush, "cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA') class VIEW3D_PT_tools_brush_stroke(Panel, View3DPaintPanel): diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h index d4239e3e6fd..fe8dc7cc938 100644 --- a/source/blender/blenkernel/BKE_paint.h +++ b/source/blender/blenkernel/BKE_paint.h @@ -68,15 +68,21 @@ typedef enum PaintMode { } PaintMode; /* overlay invalidation */ -#define PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY 1 -#define PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY 2 -#define PAINT_INVALID_OVERLAY_CURVE 4 +typedef enum OverlayControlFlags { + PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY = 1, + PAINT_INVALID_OVERLAY_TEXTURE_SECONDARY = (1 << 2), + PAINT_INVALID_OVERLAY_CURVE = (1 << 2), + PAINT_OVERLAY_OVERRIDE = (1 << 3) +} OverlayControlFlags; void BKE_paint_invalidate_overlay_tex (struct Scene *scene, const struct Tex *tex); void BKE_paint_invalidate_cursor_overlay (struct Scene *scene, struct CurveMapping *curve); void BKE_paint_invalidate_overlay_all(void); -int BKE_paint_get_overlay_flags (void); +OverlayControlFlags BKE_paint_get_overlay_flags (void); void BKE_paint_reset_overlay_invalid (void); +void BKE_paint_set_overlay_override (bool flag); +bool BKE_paint_get_overlay_override (void); + void BKE_paint_init(struct Paint *p, const char col[3]); void BKE_paint_free(struct Paint *p); diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 053c5ca9eed..dd74df2b4ae 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -274,6 +274,11 @@ void BKE_brush_debug_print_state(Brush *br) else if (!(br->flag & _f) && (def.flag & _f)) \ printf("br->flag &= ~" #_f ";\n") +#define BR_TEST_FLAG_OVERLAY(_f) \ + if ((br->overlay_flags & _f) && !(def.overlay_flags & _f)) \ + printf("br->overlay_flags |= " #_f ";\n"); \ + else if (!(br->overlay_flags & _f) && (def.overlay_flags & _f)) \ + printf("br->overlay_flags &= ~" #_f ";\n") /* print out any non-default brush state */ BR_TEST(normal_weight, f); @@ -301,7 +306,6 @@ void BKE_brush_debug_print_state(Brush *br) BR_TEST_FLAG(BRUSH_SPACE_ATTEN); BR_TEST_FLAG(BRUSH_ADAPTIVE_SPACE); BR_TEST_FLAG(BRUSH_LOCK_SIZE); - BR_TEST_FLAG(BRUSH_TEXTURE_OVERLAY); BR_TEST_FLAG(BRUSH_EDGE_TO_EDGE); BR_TEST_FLAG(BRUSH_RESTORE_MESH); BR_TEST_FLAG(BRUSH_INVERSE_SMOOTH_PRESSURE); @@ -310,6 +314,11 @@ void BKE_brush_debug_print_state(Brush *br) BR_TEST_FLAG(BRUSH_FRONTFACE); BR_TEST_FLAG(BRUSH_CUSTOM_ICON); + BR_TEST_FLAG_OVERLAY(BRUSH_OVERLAY_CURSOR); + BR_TEST_FLAG_OVERLAY(BRUSH_OVERLAY_PRIMARY); + BR_TEST_FLAG_OVERLAY(BRUSH_OVERLAY_SECONDARY); + BR_TEST_FLAG_OVERLAY(BRUSH_OVERLAY_OVERRIDE_ON_STROKE); + BR_TEST(jitter, f); BR_TEST(spacing, d); BR_TEST(smooth_stroke_radius, d); diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c index 402aebdfed4..59bfb987a19 100644 --- a/source/blender/blenkernel/intern/paint.c +++ b/source/blender/blenkernel/intern/paint.c @@ -57,7 +57,7 @@ const char PAINT_CURSOR_VERTEX_PAINT[3] = {255, 255, 255}; const char PAINT_CURSOR_WEIGHT_PAINT[3] = {200, 200, 255}; const char PAINT_CURSOR_TEXTURE_PAINT[3] = {255, 255, 255}; -static int overlay_flags = 0; +static OverlayControlFlags overlay_flags = 0; void BKE_paint_invalidate_overlay_tex (Scene *scene, const Tex *tex) { @@ -89,11 +89,25 @@ void BKE_paint_invalidate_overlay_all(void) PAINT_INVALID_OVERLAY_CURVE); } -int BKE_paint_get_overlay_flags(void) +OverlayControlFlags BKE_paint_get_overlay_flags(void) { return overlay_flags; } +void BKE_paint_set_overlay_override(bool flag) +{ + if (flag) + overlay_flags |= PAINT_OVERLAY_OVERRIDE; + else + overlay_flags &= ~PAINT_OVERLAY_OVERRIDE; +} + +bool BKE_paint_get_overlay_override(void) +{ + return ((overlay_flags & PAINT_OVERLAY_OVERRIDE) != 0 ); +} + + void BKE_paint_reset_overlay_invalid(void) { overlay_flags &= ~(PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY | diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c index 0422c2f82de..abc16c6973c 100644 --- a/source/blender/editors/sculpt_paint/paint_cursor.c +++ b/source/blender/editors/sculpt_paint/paint_cursor.c @@ -109,7 +109,7 @@ static int load_tex(Brush *br, ViewContext *vc, float zoom, bool col) static int old_zoom = -1; static bool old_col = -1; - int invalid = BKE_paint_get_overlay_flags(); + OverlayControlFlags overlay_flags = BKE_paint_get_overlay_flags(); GLubyte *buffer = NULL; int size; @@ -121,8 +121,8 @@ static int load_tex(Brush *br, ViewContext *vc, float zoom, bool col) refresh = !overlay_texture || - (invalid & PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY) || - (invalid & PAINT_INVALID_OVERLAY_CURVE) || + (overlay_flags & PAINT_INVALID_OVERLAY_TEXTURE_PRIMARY) || + (overlay_flags & PAINT_INVALID_OVERLAY_CURVE) || old_zoom != zoom || old_col != col || !same_tex_snap(&snap, br, vc); @@ -406,7 +406,7 @@ static void paint_draw_alpha_overlay(UnifiedPaintSettings *ups, Brush *brush, /* check for overlay mode */ if (!((brush->mtex.brush_map_mode == MTEX_MAP_MODE_STENCIL && brush->mtex.tex) || - ((brush->flag & BRUSH_TEXTURE_OVERLAY) && + ((brush->overlay_flags & BRUSH_OVERLAY_PRIMARY) && ELEM(brush->mtex.brush_map_mode, MTEX_MAP_MODE_VIEW, MTEX_MAP_MODE_TILED)))) { return; @@ -591,7 +591,8 @@ static void paint_draw_cursor(bContext *C, int x, int y, void *UNUSED(unused)) ups->brush_rotation = 0.0; /* draw overlay */ - paint_draw_alpha_overlay(ups, brush, &vc, x, y, zoomx, mode); + if (!BKE_paint_get_overlay_override()) + paint_draw_alpha_overlay(ups, brush, &vc, x, y, zoomx, mode); /* TODO: as sculpt and other paint modes are unified, this * special mode of drawing will go away */ diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 359b98cec59..bbddd2e4a69 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -411,7 +411,7 @@ PaintStroke *paint_stroke_new(bContext *C, { PaintStroke *stroke = MEM_callocN(sizeof(PaintStroke), "PaintStroke"); - stroke->brush = BKE_paint_brush(BKE_paint_get_active_from_context(C)); + Brush *br = stroke->brush = BKE_paint_brush(BKE_paint_get_active_from_context(C)); view3d_set_viewcontext(C, &stroke->vc); if (stroke->vc.v3d) view3d_get_transformation(stroke->vc.ar, stroke->vc.rv3d, stroke->vc.obact, &stroke->mats); @@ -422,11 +422,15 @@ PaintStroke *paint_stroke_new(bContext *C, stroke->done = done; stroke->event_type = event_type; /* for modal, return event */ + if (br->overlay_flags & BRUSH_OVERLAY_OVERRIDE_ON_STROKE) + BKE_paint_set_overlay_override(true); + return stroke; } void paint_stroke_data_free(struct wmOperator *op) { + BKE_paint_set_overlay_override(false); MEM_freeN(op->customdata); op->customdata = NULL; } diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h index 97ff24d3366..2ed6b29caec 100644 --- a/source/blender/makesdna/DNA_brush_types.h +++ b/source/blender/makesdna/DNA_brush_types.h @@ -73,7 +73,7 @@ typedef struct Brush { int flag; /* general purpose flag */ float jitter; /* jitter the position of the brush */ int jitter_absolute; /* absolute jitter in pixels */ - int pad; + int overlay_flags; int spacing; /* spacing of paint operations */ int smooth_stroke_radius; /* turning radius (in pixels) for smooth stroke */ float smooth_stroke_factor; /* higher values limit fast changes in the stroke direction */ @@ -99,7 +99,10 @@ typedef struct Brush { float height; /* affectable height of brush (layer height for layer tool, i.e.) */ float texture_sample_bias; + int texture_overlay_alpha; + int mask_overlay_alpha; + int cursor_overlay_alpha; float unprojected_radius; @@ -132,7 +135,7 @@ typedef enum BrushFlags { BRUSH_SPACE_ATTEN = (1 << 18), BRUSH_ADAPTIVE_SPACE = (1 << 19), BRUSH_LOCK_SIZE = (1 << 20), - BRUSH_TEXTURE_OVERLAY = (1 << 21), +// BRUSH_TEXTURE_OVERLAY = (1 << 21), /* obsolete, use overlay_flags |= BRUSH_OVERLAY_PRIMARY instead */ BRUSH_EDGE_TO_EDGE = (1 << 22), BRUSH_RESTORE_MESH = (1 << 23), BRUSH_INVERSE_SMOOTH_PRESSURE = (1 << 24), @@ -147,6 +150,14 @@ typedef enum BrushFlags { BRUSH_ABSOLUTE_JITTER = (1 << 30) } BrushFlags; +/* Brush.overlay_flags */ +typedef enum OverlayFlags { + BRUSH_OVERLAY_CURSOR = (1), + BRUSH_OVERLAY_PRIMARY = (1 << 1), + BRUSH_OVERLAY_SECONDARY = (1 << 2), + BRUSH_OVERLAY_OVERRIDE_ON_STROKE = (1 << 3) +} OverlayFlags; + /* Brush.sculpt_tool */ typedef enum BrushSculptTool { SCULPT_TOOL_DRAW = 1, diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c index 4e3ea817b11..ef7fbec3742 100644 --- a/source/blender/makesrna/intern/rna_brush.c +++ b/source/blender/makesrna/intern/rna_brush.c @@ -983,11 +983,6 @@ static void rna_def_brush(BlenderRNA *brna) "given in pixels"); RNA_def_property_update(prop, 0, "rna_Brush_update"); - prop = RNA_def_property(srna, "use_texture_overlay", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_TEXTURE_OVERLAY); - RNA_def_property_ui_text(prop, "Use Texture Overlay", "Show texture in viewport"); - RNA_def_property_update(prop, 0, "rna_Brush_update"); - prop = RNA_def_property(srna, "use_edge_to_edge", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_EDGE_TO_EDGE); RNA_def_property_ui_text(prop, "Edge-to-edge", "Drag anchor brush from edge-to-edge"); @@ -1009,6 +1004,27 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Curve", "Editable falloff curve"); RNA_def_property_update(prop, 0, "rna_Brush_update"); + /* overlay flags */ + prop = RNA_def_property(srna, "use_primary_overlay", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "overlay_flags", BRUSH_OVERLAY_PRIMARY); + RNA_def_property_ui_text(prop, "Use Texture Overlay", "Show texture in viewport"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + + prop = RNA_def_property(srna, "use_secondary_overlay", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "overlay_flags", BRUSH_OVERLAY_SECONDARY); + RNA_def_property_ui_text(prop, "Use Texture Overlay", "Show texture in viewport"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + + prop = RNA_def_property(srna, "use_cursor_overlay", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "overlay_flags", BRUSH_OVERLAY_CURSOR); + RNA_def_property_ui_text(prop, "Use Cursor Overlay", "Show cursor in viewport"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + + prop = RNA_def_property(srna, "cursor_overlay_override", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "overlay_flags", BRUSH_OVERLAY_OVERRIDE_ON_STROKE); + RNA_def_property_ui_text(prop, "Override Overlay", "Don't show overlay during a stroke"); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + /* paint mode flags */ prop = RNA_def_property(srna, "use_paint_sculpt", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "ob_mode", OB_MODE_SCULPT); @@ -1057,6 +1073,18 @@ static void rna_def_brush(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Texture Overlay Alpha", ""); RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "mask_overlay_alpha", PROP_INT, PROP_PERCENTAGE); + RNA_def_property_int_sdna(prop, NULL, "mask_overlay_alpha"); + RNA_def_property_range(prop, 1, 100); + RNA_def_property_ui_text(prop, "Mask Texture Overlay Alpha", ""); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + + prop = RNA_def_property(srna, "cursor_overlay_alpha", PROP_INT, PROP_PERCENTAGE); + RNA_def_property_int_sdna(prop, NULL, "cursor_overlay_alpha"); + RNA_def_property_range(prop, 1, 100); + RNA_def_property_ui_text(prop, "Mask Texture Overlay Alpha", ""); + RNA_def_property_update(prop, 0, "rna_Brush_update"); + prop = RNA_def_property(srna, "cursor_color_add", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "add_col"); RNA_def_property_array(prop, 3); -- cgit v1.2.3