diff options
author | Martin Poirier <theeth@yahoo.com> | 2009-07-09 06:45:48 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2009-07-09 06:45:48 +0400 |
commit | d7a333f83fcaa33a73304c8bbff7c0809ada9aa0 (patch) | |
tree | db2295e409d08f18b9f01f14bacb3108e6d433bc /source/blender/editors/transform/transform_ops.c | |
parent | b0038be275b24253989dbfd19c2543c770849653 (diff) |
Hooking transform operators with manipulator.
It's just a straight application of the normal operator for now, none of the normal manipulator goodies yet (no draw code and you have to click to confirm).
Diffstat (limited to 'source/blender/editors/transform/transform_ops.c')
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 105 |
1 files changed, 65 insertions, 40 deletions
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 9e4115f38f0..97fb3531718 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -89,6 +89,7 @@ char OP_SHEAR[] = "TFM_OT_shear"; char OP_WARP[] = "TFM_OT_warp"; char OP_SHRINK_FATTEN[] = "TFM_OT_shrink_fatten"; char OP_TILT[] = "TFM_OT_tilt"; +char OP_TRACKBALL[] = "TFM_OT_trackball"; TransformModeItem transform_modes[] = @@ -101,6 +102,7 @@ TransformModeItem transform_modes[] = {OP_WARP, TFM_WARP}, {OP_SHRINK_FATTEN, TFM_SHRINKFATTEN}, {OP_TILT, TFM_TILT}, + {OP_TRACKBALL, TFM_TRACKBALL}, {NULL, 0} }; @@ -111,7 +113,7 @@ static int select_orientation_exec(bContext *C, wmOperator *op) if(orientation == V3D_MANIP_CUSTOM) orientation += custom_index; - + BIF_selectTransformOrientationValue(C, orientation); return OPERATOR_FINISHED; @@ -121,15 +123,15 @@ static int select_orientation_invoke(bContext *C, wmOperator *op, wmEvent *event { uiPopupMenu *pup; uiLayout *layout; - + pup= uiPupMenuBegin(C, "Orientation", 0); layout= uiPupMenuLayout(pup); BIF_menuTransformOrientation(C, layout, NULL); uiPupMenuEnd(C, pup); - + return OPERATOR_CANCELLED; } - + void TFM_OT_select_orientation(struct wmOperatorType *ot) { static EnumPropertyItem orientation_items[]= { @@ -183,27 +185,27 @@ static int transformops_data(bContext *C, wmOperator *op, wmEvent *event) } retval = initTransform(C, t, op, event, mode); - + /* store data */ op->customdata = t; } - + return retval; /* return 0 on error */ } static int transform_modal(bContext *C, wmOperator *op, wmEvent *event) { int exit_code; - + TransInfo *t = op->customdata; - + transformEvent(t, event); - + transformApply(C, t); - - + + exit_code = transformEnd(C, t); - + if (exit_code != OPERATOR_RUNNING_MODAL) { transformops_exit(C, op); @@ -215,11 +217,11 @@ static int transform_modal(bContext *C, wmOperator *op, wmEvent *event) static int transform_cancel(bContext *C, wmOperator *op) { TransInfo *t = op->customdata; - + t->state = TRANS_CANCEL; transformEnd(C, t); transformops_exit(C, op); - + return OPERATOR_CANCELLED; } @@ -237,11 +239,11 @@ static int transform_exec(bContext *C, wmOperator *op) t->options |= CTX_AUTOCONFIRM; transformApply(C, t); - + transformEnd(C, t); transformops_exit(C, op); - + return OPERATOR_FINISHED; } @@ -279,7 +281,7 @@ void Properties_Snapping(struct wmOperatorType *ot, short align) RNA_def_boolean(ot->srna, "snap", 0, "Snap to Point", ""); RNA_def_enum(ot->srna, "snap_mode", snap_mode_types, 0, "Mode", ""); RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX); - + if (align) { RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", ""); @@ -314,7 +316,7 @@ void TFM_OT_translation(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); Properties_Constraints(ot); - + Properties_Snapping(ot, 1); } @@ -339,10 +341,32 @@ void TFM_OT_resize(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); Properties_Constraints(ot); - + Properties_Snapping(ot, 0); } + +void TFM_OT_trackball(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Trackball"; + ot->idname = OP_TRACKBALL; + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; + + /* api callbacks */ + ot->invoke = transform_invoke; + ot->exec = transform_exec; + ot->modal = transform_modal; + ot->cancel = transform_cancel; + ot->poll = ED_operator_areaactive; + + 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", ""); +} + void TFM_OT_rotation(struct wmOperatorType *ot) { /* identifiers */ @@ -364,7 +388,7 @@ void TFM_OT_rotation(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); Properties_Constraints(ot); - + Properties_Snapping(ot, 0); } @@ -547,10 +571,11 @@ void transform_operatortypes(void) WM_operatortype_append(TFM_OT_warp); WM_operatortype_append(TFM_OT_shrink_fatten); WM_operatortype_append(TFM_OT_tilt); + WM_operatortype_append(TFM_OT_trackball); WM_operatortype_append(TFM_OT_select_orientation); } - + void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid) { wmKeymapItem *km; @@ -558,9 +583,9 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key { case SPACE_VIEW3D: km = WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); - + km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); @@ -568,9 +593,9 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key km = WM_keymap_add_item(keymap, "TFM_OT_warp", WKEY, KM_PRESS, KM_SHIFT, 0); km = WM_keymap_add_item(keymap, "TFM_OT_tosphere", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_shear", SKEY, KM_PRESS, KM_ALT|KM_CTRL|KM_SHIFT, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_shrink_fatten", SKEY, KM_PRESS, KM_ALT, 0); km = WM_keymap_add_item(keymap, "TFM_OT_tilt", TKEY, KM_PRESS, 0, 0); @@ -581,55 +606,55 @@ void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *key case SPACE_ACTION: km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); - + km= WM_keymap_add_item(keymap, "TFM_OT_transform", EVT_TWEAK_S, KM_ANY, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_TRANSLATE); - + km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); - + km= WM_keymap_add_item(keymap, "TFM_OT_transform", SKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_SCALE); - + km= WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_SLIDE); break; case SPACE_IPO: km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); - + km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); - + // XXX the 'mode' identifier here is not quite right km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); - + km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); break; case SPACE_NODE: km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); - + km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_A, KM_ANY, 0, 0); km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); break; case SPACE_SEQ: km= WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); - + km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); - + km= WM_keymap_add_item(keymap, "TFM_OT_transform", EKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "mode", TFM_TIME_EXTEND); break; case SPACE_IMAGE: km = WM_keymap_add_item(keymap, "TFM_OT_translation", GKEY, KM_PRESS, 0, 0); - + km= WM_keymap_add_item(keymap, "TFM_OT_translation", EVT_TWEAK_S, KM_ANY, 0, 0); - + km = WM_keymap_add_item(keymap, "TFM_OT_rotation", RKEY, KM_PRESS, 0, 0); km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0); |