[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27966] trunk/blender/source/blender/ editors: [#21840] When clicking to move a Node it sticks to the mouse

Martin Poirier theeth at yahoo.com
Fri Apr 2 21:40:51 CEST 2010


Revision: 27966
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27966
Author:   theeth
Date:     2010-04-02 21:40:51 +0200 (Fri, 02 Apr 2010)

Log Message:
-----------
[#21840] When clicking to move a Node it sticks to the mouse

Add hidden property to be able to force confirm on release (drag immediately is a silly name) on or off.

Streamline method for adding common properties to transform operators.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/space_node/node_ops.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/editors/transform/transform_ops.c

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2010-04-02 19:40:51 UTC (rev 27966)
@@ -135,10 +135,16 @@
 
 /* to be able to add operator properties to other operators */
 
-void Properties_Proportional(struct wmOperatorType *ot);
-void Properties_Snapping(struct wmOperatorType *ot, short fullsnap, short align);
-void Properties_Constraints(struct wmOperatorType *ot);
+#define P_MIRROR		(1 << 0)
+#define P_PROPORTIONAL	(1 << 1)
+#define P_AXIS			(1 << 2)
+#define P_SNAP			(1 << 3)
+#define P_GEO_SNAP		(P_SNAP|(1 << 4))
+#define P_ALIGN_SNAP	(P_GEO_SNAP|(1 << 5))
+#define P_CONSTRAINT	(1 << 6)
 
+void Transform_Properties(struct wmOperatorType *ot, int flags);
+
 /* view3d manipulators */
 
 int BIF_do_manipulator(struct bContext *C, struct wmEvent *event, struct wmOperator *op);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2010-04-02 19:40:51 UTC (rev 27966)
@@ -5048,8 +5048,8 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	/* to give to transform */
-	Properties_Proportional(ot);
-	RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
+	/* XXX Transform this in a macro */
+	Transform_Properties(ot, P_CONSTRAINT|P_MIRROR);
 }
 
 

Modified: trunk/blender/source/blender/editors/space_node/node_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_ops.c	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/space_node/node_ops.c	2010-04-02 19:40:51 UTC (rev 27966)
@@ -74,12 +74,10 @@
 void ED_operatormacros_node(void)
 {
 	wmOperatorType *ot;
-	wmOperatorTypeMacro *otmacro;
 	
 	ot= WM_operatortype_append_macro("NODE_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
 	WM_operatortype_macro_define(ot, "NODE_OT_duplicate");
-	otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
-	RNA_enum_set(otmacro->ptr, "proportional", 0);
+	WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
 }
 
 void node_keymap(struct wmKeyConfig *keyconf)

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/transform/transform.c	2010-04-02 19:40:51 UTC (rev 27966)
@@ -1032,10 +1032,13 @@
 		}
 
 		/* confirm transform if launch key is released after mouse move */
-		/* XXX Keyrepeat bug in Xorg fucks this up, will test when fixed */
-		if (event->type == t->launch_event && (t->launch_event == LEFTMOUSE || t->launch_event == RIGHTMOUSE) && t->state != TRANS_STARTING)
+		if (t->flag & T_RELEASE_CONFIRM || t->state != TRANS_STARTING)
 		{
-			t->state = TRANS_CONFIRM;
+			/* XXX Keyrepeat bug in Xorg fucks this up, will test when fixed */
+			if (event->type == t->launch_event && (t->launch_event == LEFTMOUSE || t->launch_event == RIGHTMOUSE))
+			{
+				t->state = TRANS_CONFIRM;
+			}
 		}
 	}
 
@@ -1443,17 +1446,14 @@
 
 	t->launch_event = event ? event->type : -1;
 
-	if (U.flag & USER_DRAGIMMEDIATE)
+	if (t->launch_event == EVT_TWEAK_R)
 	{
-		if (t->launch_event == EVT_TWEAK_R)
-		{
-			t->launch_event = RIGHTMOUSE;
-		}
-		else if (t->launch_event == EVT_TWEAK_L)
-		{
-			t->launch_event = LEFTMOUSE;
-		}
+		t->launch_event = RIGHTMOUSE;
 	}
+	else if (t->launch_event == EVT_TWEAK_L)
+	{
+		t->launch_event = LEFTMOUSE;
+	}
 
 	// XXX Remove this when wm_operator_call_internal doesn't use window->eventstate (which can have type = 0)
 	// For manipulator only, so assume LEFTMOUSE

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/transform/transform.h	2010-04-02 19:40:51 UTC (rev 27966)
@@ -382,6 +382,8 @@
 	/* no retopo */
 #define T_NO_PROJECT		(1 << 22)
 
+#define T_RELEASE_CONFIRM	(1 << 23)
+
 /* TransInfo->modifiers */
 #define	MOD_CONSTRAINT_SELECT	0x01
 #define	MOD_PRECISION			0x02

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2010-04-02 19:40:51 UTC (rev 27966)
@@ -991,6 +991,21 @@
 		t->around = V3D_CENTER;
 	}
 	
+	if (op && RNA_property_is_set(op->ptr, "release_confirm"))
+	{
+		if (RNA_boolean_get(op->ptr, "release_confirm"))
+		{
+			t->flag |= T_RELEASE_CONFIRM;
+		}
+	}
+	else
+	{
+		if (U.flag & USER_DRAGIMMEDIATE)
+		{
+			t->flag |= T_RELEASE_CONFIRM;
+		}
+	}
+
 	if (op && RNA_struct_find_property(op->ptr, "mirror") && RNA_property_is_set(op->ptr, "mirror"))
 	{
 		if (RNA_boolean_get(op->ptr, "mirror"))

Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c	2010-04-02 19:38:20 UTC (rev 27965)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c	2010-04-02 19:40:51 UTC (rev 27966)
@@ -381,45 +381,65 @@
 	}
 }
 
-void Properties_Proportional(struct wmOperatorType *ot)
-{
-	RNA_def_enum(ot->srna, "proportional", proportional_editing_items, 0, "Proportional Editing", "");
-	RNA_def_enum(ot->srna, "proportional_editing_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
-	RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100);
-}
+#define P_MIRROR		(1 << 0)
+#define P_PROPORTIONAL	(1 << 1)
+#define P_AXIS			(1 << 2)
+#define P_SNAP			(1 << 3)
+#define P_GEO_SNAP		(P_SNAP|(1 << 4))
+#define P_ALIGN_SNAP	(P_GEO_SNAP|(1 << 5))
+#define P_CONSTRAINT	(1 << 6)
 
-void Properties_Axis(struct wmOperatorType *ot)
+
+void Transform_Properties(struct wmOperatorType *ot, int flags)
 {
 	PropertyRNA *prop;
 
-	prop= RNA_def_property(ot->srna, "axis", PROP_FLOAT, PROP_DIRECTION);
-	RNA_def_property_array(prop, 3);
-	RNA_def_property_ui_text(prop, "Axis", "The axis around which the transformation occurs");
-}
+	// Add confirm method all the time
+	prop = RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Confirm operation when releasing button");
+	RNA_def_property_flag(prop, PROP_HIDDEN);
 
-void Properties_Snapping(struct wmOperatorType *ot, short fullsnap, short align)
-{
-	RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", "");
+	if (flags & P_AXIS)
+	{
+		prop= RNA_def_property(ot->srna, "axis", PROP_FLOAT, PROP_DIRECTION);
+		RNA_def_property_array(prop, 3);
+		RNA_def_property_ui_text(prop, "Axis", "The axis around which the transformation occurs");
+	}
 
-	if (fullsnap) {
-		RNA_def_enum(ot->srna, "snap_target", snap_target_items, 0, "Target", "");
-		RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX);
+	if (flags & P_CONSTRAINT)
+	{
+		RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", "");
+		prop= RNA_def_property(ot->srna, "constraint_orientation", PROP_ENUM, PROP_NONE);
+		RNA_def_property_ui_text(prop, "Orientation", "Transformation orientation");
+		RNA_def_enum_funcs(prop, rna_TransformOrientation_itemf);
+	}
 
-		if (align) {
-			RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", "");
-			RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX);
-		}
+	if (flags & P_MIRROR)
+	{
+		RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
 	}
-}
 
-void Properties_Constraints(struct wmOperatorType *ot)
-{
-	PropertyRNA *prop;
 
-	RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", "");
-	prop= RNA_def_property(ot->srna, "constraint_orientation", PROP_ENUM, PROP_NONE);
-	RNA_def_property_ui_text(prop, "Orientation", "Transformation orientation");
-	RNA_def_enum_funcs(prop, rna_TransformOrientation_itemf);
+	if (flags & P_PROPORTIONAL)
+	{
+		RNA_def_enum(ot->srna, "proportional", proportional_editing_items, 0, "Proportional Editing", "");
+		RNA_def_enum(ot->srna, "proportional_editing_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
+		RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100);
+	}
+
+	if (flags & P_SNAP)
+	{
+		RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", "");
+
+		if (flags & P_GEO_SNAP) {
+			RNA_def_enum(ot->srna, "snap_target", snap_target_items, 0, "Target", "");
+			RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX);
+
+			if (flags & P_ALIGN_SNAP) {
+				RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", "");
+				RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX);
+			}
+		}
+	}
 }
 
 void TRANSFORM_OT_translate(struct wmOperatorType *ot)
@@ -439,13 +459,7 @@
 
 	RNA_def_float_vector(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
 
-	Properties_Proportional(ot);
-
-	RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
-
-	Properties_Constraints(ot);
-
-	Properties_Snapping(ot, 1, 1);
+	Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_ALIGN_SNAP);
 }
 
 void TRANSFORM_OT_resize(struct wmOperatorType *ot)
@@ -465,13 +479,7 @@
 
 	RNA_def_float_vector(ot->srna, "value", 3, VecOne, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
 
-	Properties_Proportional(ot);
-
-	RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
-
-	Properties_Constraints(ot);
-
-	Properties_Snapping(ot, 1, 0);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list