diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-30 14:32:02 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-30 14:32:02 +0400 |
commit | 3b04b861bd964a54ee88defe899978ae564cb037 (patch) | |
tree | 1b30114cefe34686bb870f97eced701c96b381b9 | |
parent | 9461af89f1da9d4d1f4eef952084bbc7711376d7 (diff) |
Fix another part of #35141: there was no way to reset the stencil transform after e.g.
scaling it along one axis, now there's a Reset Transform button.
The Image Aspect button is now also hidden unless the texture is an image texture.
And also hide the color wheel for painting tools that don't use colors.
-rw-r--r-- | release/scripts/startup/bl_ui/properties_paint_common.py | 8 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_image.py | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/brush.c | 16 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_ops.c | 42 |
4 files changed, 62 insertions, 10 deletions
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py index 56b82655e47..1b6356f0dba 100644 --- a/release/scripts/startup/bl_ui/properties_paint_common.py +++ b/release/scripts/startup/bl_ui/properties_paint_common.py @@ -84,7 +84,9 @@ def brush_texture_settings(layout, brush, sculpt): layout.separator() if tex_slot.map_mode == 'STENCIL': - layout.operator("brush.stencil_fit_image_aspect") + if brush.texture and brush.texture.type == 'IMAGE': + layout.operator("brush.stencil_fit_image_aspect") + layout.operator("brush.stencil_reset_transform") # angle and texture_angle_source col = layout.column() @@ -127,7 +129,9 @@ def brush_mask_texture_settings(layout, brush): layout.separator() if mask_tex_slot.map_mode == 'STENCIL': - layout.operator("brush.stencil_fit_image_aspect").mask = True + if brush.mask_texture and brush.mask_texture.type == 'IMAGE': + layout.operator("brush.stencil_fit_image_aspect").mask = True + layout.operator("brush.stencil_reset_transform") if brush.mask_texture: layout.label(text="Mask Mapping:") diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index 3acab7200ea..458266aec46 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -696,8 +696,10 @@ class IMAGE_PT_paint(Panel, ImagePaintPanel): if brush: col = layout.column() - col.template_color_picker(brush, "color", value_slider=True) - col.prop(brush, "color", text="") + + if brush.image_tool == 'DRAW' and brush.blend not in ('ERASE_ALPHA', 'ADD_ALPHA'): + col.template_color_picker(brush, "color", value_slider=True) + col.prop(brush, "color", text="") row = col.row(align=True) self.prop_unified_size(row, context, brush, "size", slider=True, text="Radius") diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 41eb641f899..5ddc215dc2c 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -777,7 +777,7 @@ void BKE_brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texf const int radius = BKE_brush_size_get(scene, brush); unsigned char *dst, crgb[3]; const float alpha = (use_brush_alpha)? BKE_brush_alpha_get(scene, brush): 1.0f; - float brush_rgb[3]; + float brush_rgb[3] = {1.0f, 1.0f, 1.0f}; int thread = 0; imbflag = (flt) ? IB_rectfloat : IB_rect; @@ -791,9 +791,11 @@ void BKE_brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texf ibuf = IMB_allocImBuf(bufsize, bufsize, 32, imbflag); if (flt) { - copy_v3_v3(brush_rgb, brush->rgb); - if (use_color_correction) { - srgb_to_linearrgb_v3_v3(brush_rgb, brush_rgb); + if (brush->imagepaint_tool == PAINT_TOOL_DRAW) { + copy_v3_v3(brush_rgb, brush->rgb); + if (use_color_correction) { + srgb_to_linearrgb_v3_v3(brush_rgb, brush_rgb); + } } for (y = 0; y < ibuf->y; y++) { @@ -834,7 +836,11 @@ void BKE_brush_imbuf_new(const Scene *scene, Brush *brush, short flt, short texf } else { float alpha_f; /* final float alpha to convert to char */ - rgb_float_to_uchar(crgb, brush->rgb); + + if (brush->imagepaint_tool == PAINT_TOOL_DRAW) + rgb_float_to_uchar(crgb, brush->rgb); + else + rgb_float_to_uchar(crgb, brush_rgb); for (y = 0; y < ibuf->y; y++) { dst = (unsigned char *)ibuf->rect + y * rowbytes; diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c index 85d70c9342f..e4cc1c72237 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.c +++ b/source/blender/editors/sculpt_paint/paint_ops.c @@ -807,7 +807,7 @@ static void BRUSH_OT_stencil_fit_image_aspect(wmOperatorType *ot) { /* identifiers */ ot->name = "Image Aspect"; - ot->description = "Adjust the stencil size to fit image aspect ratio"; + ot->description = "When using an image texture, adjust the stencil size to fit the image aspect ratio"; ot->idname = "BRUSH_OT_stencil_fit_image_aspect"; /* api callbacks */ @@ -823,6 +823,45 @@ static void BRUSH_OT_stencil_fit_image_aspect(wmOperatorType *ot) } +static int stencil_reset_transform(bContext *C, wmOperator *UNUSED(op)) +{ + Paint *paint = BKE_paint_get_active_from_context(C); + Brush *br = BKE_paint_brush(paint); + + if (!br) + return OPERATOR_CANCELLED; + + br->stencil_pos[0] = 256; + br->stencil_pos[1] = 256; + + br->stencil_dimension[0] = 256; + br->stencil_dimension[1] = 256; + + br->mtex.rot = 0; + br->mask_mtex.rot = 0; + + WM_event_add_notifier(C, NC_WINDOW, NULL); + + return OPERATOR_FINISHED; +} + + +static void BRUSH_OT_stencil_reset_transform(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Reset Transform"; + ot->description = "Reset the stencil transformation to the default"; + ot->idname = "BRUSH_OT_stencil_reset_transform"; + + /* api callbacks */ + ot->exec = stencil_reset_transform; + ot->poll = stencil_control_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + + static void ed_keymap_stencil(wmKeyMap *keymap) { wmKeyMapItem *kmi; @@ -856,6 +895,7 @@ void ED_operatortypes_paint(void) WM_operatortype_append(BRUSH_OT_reset); WM_operatortype_append(BRUSH_OT_stencil_control); WM_operatortype_append(BRUSH_OT_stencil_fit_image_aspect); + WM_operatortype_append(BRUSH_OT_stencil_reset_transform); /* note, particle uses a different system, can be added with existing operators in wm.py */ WM_operatortype_append(PAINT_OT_brush_select); |