diff options
author | Martin Poirier <theeth@yahoo.com> | 2010-04-02 23:40:51 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2010-04-02 23:40:51 +0400 |
commit | 5a805c5fc3f2e262e37dfcc3673b70bf666ffe9f (patch) | |
tree | 4ff5db9f88471550d532e6853dd550d75b576250 /source | |
parent | 9a027080df135ade5d2237ffff299a0b1762910d (diff) |
[#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.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/include/ED_transform.h | 12 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_ops.c | 4 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 24 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.h | 2 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 15 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 165 |
7 files changed, 105 insertions, 121 deletions
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 8267ed022e3..d8954be08c9 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -135,9 +135,15 @@ void BIF_selectOrientation(void); /* 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 */ diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index de644e3f6f3..d5678590d53 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -5048,8 +5048,8 @@ void MESH_OT_rip(wmOperatorType *ot) 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); } diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index dd09260ad97..9994da909d3 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -74,12 +74,10 @@ void node_operatortypes(void) 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) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index d5d22a670f1..13684708f8e 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1032,10 +1032,13 @@ int transformEvent(TransInfo *t, wmEvent *event) } /* 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,16 +1446,13 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int 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) diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 8264bc7c0b0..ef13634a6ae 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -382,6 +382,8 @@ typedef struct TransInfo { /* 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 diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index d27b9f4795c..e9ee45259e9 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -991,6 +991,21 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) 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")) diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index fb1282495a4..53cbfd208b6 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -381,45 +381,65 @@ static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event) } } -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 @@ void TRANSFORM_OT_translate(struct wmOperatorType *ot) 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 @@ void TRANSFORM_OT_resize(struct wmOperatorType *ot) 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); + Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP); } @@ -492,11 +500,7 @@ void TRANSFORM_OT_trackball(struct wmOperatorType *ot) RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "angle", "", -FLT_MAX, FLT_MAX); - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); } void TRANSFORM_OT_rotate(struct wmOperatorType *ot) @@ -516,15 +520,7 @@ void TRANSFORM_OT_rotate(struct wmOperatorType *ot) RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2); - Properties_Axis(ot); - - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Constraints(ot); - - Properties_Snapping(ot, 1, 0); + Transform_Properties(ot, P_AXIS|P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_GEO_SNAP); } void TRANSFORM_OT_tilt(struct wmOperatorType *ot) @@ -547,13 +543,7 @@ void TRANSFORM_OT_tilt(struct wmOperatorType *ot) RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", -M_PI*2, M_PI*2); - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Constraints(ot); - - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_SNAP); } void TRANSFORM_OT_warp(struct wmOperatorType *ot) @@ -573,14 +563,8 @@ void TRANSFORM_OT_warp(struct wmOperatorType *ot) RNA_def_float_rotation(ot->srna, "value", 1, NULL, -FLT_MAX, FLT_MAX, "Angle", "", 0, 1); - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Snapping(ot, 0, 0); - + Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); // XXX Warp axis? -// Properties_Constraints(ot); } void TRANSFORM_OT_shear(struct wmOperatorType *ot) @@ -600,14 +584,8 @@ void TRANSFORM_OT_shear(struct wmOperatorType *ot) RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX); - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Snapping(ot, 0, 0); - + Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); // XXX Shear axis? -// Properties_Constraints(ot); } void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot) @@ -627,11 +605,7 @@ void TRANSFORM_OT_shrink_fatten(struct wmOperatorType *ot) RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX); - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); } void TRANSFORM_OT_tosphere(struct wmOperatorType *ot) @@ -652,11 +626,7 @@ void TRANSFORM_OT_tosphere(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, 0, 1, "Factor", "", 0, 1); - Properties_Proportional(ot); - - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_PROPORTIONAL|P_MIRROR|P_SNAP); } void TRANSFORM_OT_mirror(struct wmOperatorType *ot) @@ -674,8 +644,7 @@ void TRANSFORM_OT_mirror(struct wmOperatorType *ot) ot->cancel = transform_cancel; ot->poll = ED_operator_areaactive; - Properties_Proportional(ot); - Properties_Constraints(ot); + Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL); } void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) @@ -695,9 +664,7 @@ void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f); - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_MIRROR|P_SNAP); } void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot) @@ -717,7 +684,7 @@ void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f); - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_SNAP); } void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot) @@ -737,7 +704,7 @@ void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot) RNA_def_float_vector(ot->srna, "value", 2, VecOne, -FLT_MAX, FLT_MAX, "angle", "", -FLT_MAX, FLT_MAX); - Properties_Snapping(ot, 0, 0); + Transform_Properties(ot, P_SNAP); } void TRANSFORM_OT_transform(struct wmOperatorType *ot) @@ -791,12 +758,7 @@ void TRANSFORM_OT_transform(struct wmOperatorType *ot) RNA_def_float_vector(ot->srna, "value", 4, NULL, -FLT_MAX, FLT_MAX, "Values", "", -FLT_MAX, FLT_MAX); - Properties_Axis(ot); - - Properties_Proportional(ot); - RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - - Properties_Constraints(ot); + Transform_Properties(ot, P_AXIS|P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_ALIGN_SNAP); } void transform_operatortypes(void) @@ -912,6 +874,7 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_A, KM_ANY, 0, 0); km= WM_keymap_add_item(keymap, OP_TRANSLATION, EVT_TWEAK_S, KM_ANY, 0, 0); + RNA_enum_set(km->ptr, "release_confirm", 1); km = WM_keymap_add_item(keymap, OP_ROTATION, RKEY, KM_PRESS, 0, 0); |