[Bf-blender-cvs] [79236d5] GPencil_EditStrokes: GPencil Draw Operator: Implemented proper method to delay start of drawing

Joshua Leung noreply at git.blender.org
Thu Oct 23 12:12:23 CEST 2014


Commit: 79236d5b81bac009d4e058dc11cbdbe9e4c20189
Author: Joshua Leung
Date:   Thu Oct 23 23:03:43 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rB79236d5b81bac009d4e058dc11cbdbe9e4c20189

GPencil Draw Operator: Implemented proper method to delay start of drawing

When running GPencil drawing operators from the toolbar or from a (pie) menu,
drawing operations shouldn't start immediately, but rather, only when users
actually click to start drawing. This is because the mouse is often not in a
suitable location for this to work when the operators get invoked from such
UI controls.

Previously, we used a hack which just detected certain types of events. This worked
ok for toolbars, but not for menus. Now, we've got a proper property to enable this
behaviour instead.

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

M	source/blender/editors/gpencil/gpencil_ops.c
M	source/blender/editors/gpencil/gpencil_paint.c

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

diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index bda69fa..2d25f61 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -63,19 +63,22 @@ static void ed_keymap_gpencil_general(wmKeyConfig *keyconf)
 	/* draw */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, 0, DKEY);
 	RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_DRAW);
+	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
 	
 	/* draw - straight lines */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, KM_CTRL, DKEY);
 	RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_DRAW_STRAIGHT);
+	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
 	
 	/* draw - poly lines */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, KM_ALT, DKEY);
 	RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_DRAW_POLY);
+	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
 	
 	/* erase */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_draw", RIGHTMOUSE, KM_PRESS, 0, DKEY);
 	RNA_enum_set(kmi->ptr, "mode", GP_PAINTMODE_ERASER);
-	
+	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
 	
 	/* Viewport Tools ------------------------------- */
 	
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 401110f..73c09b5 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1739,11 +1739,8 @@ static int gpencil_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event
 	else
 		WM_cursor_modal_set(win, BC_PAINTBRUSHCURSOR);
 	
-	/* special hack: if there was an initial event, then we were invoked via a hotkey, and 
-	 * painting should start immediately. Otherwise, this was called from a toolbar, in which
-	 * case we should wait for the mouse to be clicked.
-	 */
-	if (event->val == KM_PRESS) {
+	/* only start drawing immediately if we're allowed to do so... */
+	if (RNA_boolean_get(op->ptr, "wait_for_input") == false) {
 		/* hotkey invoked - start drawing */
 		/* printf("\tGP - set first spot\n"); */
 		p->status = GP_STATUS_PAINTING;
@@ -2020,6 +2017,8 @@ void GPENCIL_OT_draw(wmOperatorType *ot)
 	
 	/* settings for drawing */
 	ot->prop = RNA_def_enum(ot->srna, "mode", prop_gpencil_drawmodes, 0, "Mode", "Way to interpret mouse movements");
-	
 	RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", "");
+	
+	/* NOTE: wait for input is enabled by default, so that all UI code can work properly without needing users to know about this */
+	RNA_def_boolean(ot->srna, "wait_for_input", true, "Wait for Input", "Wait for first click instead of painting immediately");
 }




More information about the Bf-blender-cvs mailing list