[Bf-blender-cvs] [1146614] soc-2013-paint: Use common operator for painting a curved stroke.

Antony Riakiotakis noreply at git.blender.org
Thu Mar 27 14:17:41 CET 2014


Commit: 11466144f0f349ac2a75cd9c1b8a2d9c647a3dde
Author: Antony Riakiotakis
Date:   Thu Mar 27 15:17:25 2014 +0200
https://developer.blender.org/rB11466144f0f349ac2a75cd9c1b8a2d9c647a3dde

Use common operator for painting a curved stroke.

This allows to use one keymap for all paintcurve systems. Also has the
advantage that it can be added to stroke panel for nice UI access.

Also fixes weight/vertex painting not working because of transform
operator override

===================================================================

M	release/scripts/startup/bl_ui/space_image.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/editors/sculpt_paint/paint_ops.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_view3d/space_view3d.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index f9e6fee..e76270c 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -917,6 +917,7 @@ class IMAGE_PT_paint_stroke(BrushButtonsPanel, Panel):
         if brush.use_curve:
             col.separator()
             col.template_ID(brush, "paint_curve", new="paintcurve.new")
+            col.operator("paintcurve.draw")
 
         col = layout.column()
         col.separator()
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 659ed07..fced71e 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1245,6 +1245,7 @@ class VIEW3D_PT_tools_brush_stroke(Panel, View3DPaintPanel):
         if brush.use_curve:
             col.separator()
             col.template_ID(brush, "paint_curve", new="paintcurve.new")
+            col.operator("paintcurve.draw")
 
         if context.sculpt_object:
             if brush.sculpt_capabilities.has_jitter:
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 96a5313..180ceae 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -182,7 +182,7 @@ static int paintcurve_poll(bContext *C)
 {
 	Paint *p = BKE_paint_get_active_from_context(C);
 
-	if (p && p->brush && p->brush->flag & BRUSH_CURVE) {
+	if (p && p->brush && (p->brush->flag & BRUSH_CURVE)) {
 		return TRUE;
 	}
 
@@ -428,6 +428,47 @@ static void PAINTCURVE_OT_select(wmOperatorType *ot)
 }
 
 
+static int paintcurve_draw_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	PaintMode mode = BKE_paintmode_get_active_from_context(C);
+	const char *name;
+
+	switch (mode) {
+		case PAINT_TEXTURE_2D:
+		case PAINT_TEXTURE_PROJECTIVE:
+			name = "PAINT_OT_image_paint";
+			break;
+		case PAINT_WEIGHT:
+			name = "PAINT_OT_weight_paint";
+			break;
+		case PAINT_VERTEX:
+			name = "PAINT_OT_vertex_paint";
+			break;
+		case PAINT_SCULPT:
+			name = "SCULPT_OT_brush_stroke";
+			break;
+		default:
+			return OPERATOR_PASS_THROUGH;
+	}
+
+	return 	WM_operator_name_call(C, name, WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+static void PAINTCURVE_OT_draw(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Draw Curve";
+	ot->description = "Draw curve";
+	ot->idname = "PAINTCURVE_OT_draw";
+
+	/* api callbacks */
+	ot->exec = paintcurve_draw_exec;
+	ot->poll = paintcurve_poll;
+
+	/* flags */
+	ot->flag = OPTYPE_UNDO;
+}
+
 static int palette_color_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	/*int type = RNA_enum_get(op->ptr, "type");*/
@@ -1282,6 +1323,7 @@ void ED_operatortypes_paint(void)
 	WM_operatortype_append(PAINTCURVE_OT_new);
 	WM_operatortype_append(PAINTCURVE_OT_add_point);
 	WM_operatortype_append(PAINTCURVE_OT_select);
+	WM_operatortype_append(PAINTCURVE_OT_draw);
 
 	/* brush */
 	WM_operatortype_append(BRUSH_OT_add);
@@ -1475,7 +1517,7 @@ static void paint_partial_visibility_keys(wmKeyMap *keymap)
 }
 
 
-static void paint_keymap_curve(wmKeyMap *keymap, const char *paintop)
+static void paint_keymap_curve(wmKeyMap *keymap)
 {
 	wmKeyMapItem *kmi;
 
@@ -1492,10 +1534,9 @@ static void paint_keymap_curve(wmKeyMap *keymap, const char *paintop)
 
 	kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_translate", EVT_TWEAK_A, KM_ANY, 0, 0);
 	RNA_boolean_set(kmi->ptr, "release_confirm", TRUE);
-	WM_keymap_add_item(keymap, paintop, RETKEY, KM_PRESS, 0, 0);
 	kmi = WM_keymap_add_item(keymap, "TRANSFORM_OT_translate", EVT_TWEAK_A, KM_ANY, KM_SHIFT, 0);
 	RNA_boolean_set(kmi->ptr, "release_confirm", TRUE);
-	WM_keymap_add_item(keymap, paintop, RETKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "PAINTCURVE_OT_draw", RETKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "TRANSFORM_OT_translate", GKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "TRANSFORM_OT_rotate", RKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "TRANSFORM_OT_resize", SKEY, KM_PRESS, 0, 0);
@@ -1507,12 +1548,15 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
 	wmKeyMapItem *kmi;
 	int i;
 	
+	keymap = WM_keymap_find(keyconf, "Curve", 0, 0);
+	keymap->poll = paintcurve_poll;
+
+	paint_keymap_curve(keymap);
+
 	/* Sculpt mode */
 	keymap = WM_keymap_find(keyconf, "Sculpt", 0, 0);
 	keymap->poll = sculpt_mode_poll;
 
-	paint_keymap_curve(keymap, "SCULPT_OT_brush_stroke");
-
 	RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_brush_stroke", LEFTMOUSE, KM_PRESS, 0,        0)->ptr, "mode", BRUSH_STROKE_NORMAL);
 	RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_brush_stroke", LEFTMOUSE, KM_PRESS, KM_CTRL,  0)->ptr, "mode", BRUSH_STROKE_INVERT);
 	RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_brush_stroke", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", BRUSH_STROKE_SMOOTH);
@@ -1588,8 +1632,6 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
 	keymap = WM_keymap_find(keyconf, "Vertex Paint", 0, 0);
 	keymap->poll = vertex_paint_mode_poll;
 
-	paint_keymap_curve(keymap, "PAINT_OT_vertex_paint");
-
 	WM_keymap_verify_item(keymap, "PAINT_OT_vertex_paint", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "PAINT_OT_sample_color", SKEY, KM_PRESS, 0, 0);
 
@@ -1618,8 +1660,6 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
 	keymap = WM_keymap_find(keyconf, "Weight Paint", 0, 0);
 	keymap->poll = weight_paint_mode_poll;
 
-	paint_keymap_curve(keymap, "PAINT_OT_weight_paint");
-
 	WM_keymap_verify_item(keymap, "PAINT_OT_weight_paint", LEFTMOUSE, KM_PRESS, 0, 0);
 
 	/* these keys are from 2.4x but could be changed */
@@ -1669,8 +1709,6 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
 	keymap = WM_keymap_find(keyconf, "Image Paint", 0, 0);
 	keymap->poll = image_texture_paint_poll;
 
-	paint_keymap_curve(keymap, "PAINT_OT_image_paint");
-
 	RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint", LEFTMOUSE, KM_PRESS, 0,        0)->ptr, "mode", BRUSH_STROKE_NORMAL);
 	RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint", LEFTMOUSE, KM_PRESS, KM_CTRL,  0)->ptr, "mode", BRUSH_STROKE_INVERT);
 	WM_keymap_add_item(keymap, "PAINT_OT_brush_colors_flip", XKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index e6d092e..833594e 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -623,6 +623,9 @@ static void image_main_area_init(wmWindowManager *wm, ARegion *ar)
 	WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
 
 	/* image paint polls for mode */
+	keymap = WM_keymap_find(wm->defaultconf, "Curve", 0, 0);
+	WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
+
 	keymap = WM_keymap_find(wm->defaultconf, "Image Paint", 0, 0);
 	WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
 
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 70846f1..9a4708d 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -467,6 +467,9 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
 	keymap = WM_keymap_find(wm->defaultconf, "Object Mode", 0, 0);
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
 
+	keymap = WM_keymap_find(wm->defaultconf, "Curve", 0, 0);
+	WM_event_add_keymap_handler(&ar->handlers, keymap);
+
 	keymap = WM_keymap_find(wm->defaultconf, "Image Paint", 0, 0);
 	WM_event_add_keymap_handler(&ar->handlers, keymap);




More information about the Bf-blender-cvs mailing list