diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-19 03:54:26 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-19 03:54:26 +0300 |
commit | 60d7740fe628f5971d09c697c019489778369fb1 (patch) | |
tree | 247baaf8bd19d88d37b8427d6bb9d313e178efc9 | |
parent | a30c9f710a64d0adca1597c0d0404713a26a401e (diff) |
Tool System: option for transform drag action
See: T57203
-rw-r--r-- | release/scripts/startup/bl_ui/space_toolsystem_toolbar.py | 9 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_gizmo_3d.c | 14 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 54 |
3 files changed, 74 insertions, 3 deletions
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 26a93866b7c..709636beb5f 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -369,8 +369,13 @@ class _defs_transform: @ToolDef.from_fn def transform(): def draw_settings(context, layout, tool): + layout.label(text="Gizmos:") tool_settings = context.tool_settings layout.prop(tool_settings, "use_gizmo_mode") + + props = tool.gizmo_group_properties("TRANSFORM_GGT_gizmo") + layout.prop(props, "drag_action") + return dict( text="Transform", description=( @@ -378,7 +383,9 @@ class _defs_transform: ), icon="ops.transform.transform", widget="TRANSFORM_GGT_gizmo", - # No keymap default action, only for gizmo! + keymap=( + ("transform.from_gizmo", dict(), dict(type='EVT_TWEAK_A', value='ANY')), + ), draw_settings=draw_settings, ) diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c index b2efdcf51cd..921a2090d19 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.c +++ b/source/blender/editors/transform/transform_gizmo_3d.c @@ -44,8 +44,6 @@ #include "BLI_math.h" #include "BLI_utildefines.h" -#include "RNA_access.h" - #include "BKE_action.h" #include "BKE_context.h" #include "BKE_curve.h" @@ -82,6 +80,9 @@ #include "UI_interface.h" #include "UI_resources.h" +#include "RNA_access.h" +#include "RNA_define.h" + /* local module include */ #include "transform.h" @@ -1762,6 +1763,15 @@ void TRANSFORM_GGT_gizmo(wmGizmoGroupType *gzgt) gzgt->refresh = WIDGETGROUP_gizmo_refresh; gzgt->message_subscribe = WIDGETGROUP_gizmo_message_subscribe; gzgt->draw_prepare = WIDGETGROUP_gizmo_draw_prepare; + + static const EnumPropertyItem rna_enum_gizmo_items[] = { + {SCE_GIZMO_SHOW_TRANSLATE, "TRANSLATE", 0, "Move", ""}, + {SCE_GIZMO_SHOW_ROTATE, "ROTATE", 0, "Rotate", ""}, + {SCE_GIZMO_SHOW_SCALE, "SCALE", 0, "Scale", ""}, + {0, "NONE", 0, "None", ""}, + {0, NULL, 0, NULL, NULL} + }; + RNA_def_enum(gzgt->srna, "drag_action", rna_enum_gizmo_items, SCE_GIZMO_SHOW_TRANSLATE, "Drag Action", ""); } /** \} */ diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 1d4b112c597..6979fe73cec 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -47,6 +47,7 @@ #include "WM_api.h" #include "WM_message.h" #include "WM_types.h" +#include "WM_toolsystem.h" #include "UI_interface.h" #include "UI_resources.h" @@ -1119,6 +1120,57 @@ static void TRANSFORM_OT_transform(struct wmOperatorType *ot) ot, P_AXIS | P_CONSTRAINT | P_PROPORTIONAL | P_MIRROR | P_ALIGN_SNAP | P_GPENCIL_EDIT | P_CENTER); } +static int transform_from_gizmo_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event)) +{ + bToolRef *tref = WM_toolsystem_ref_from_context(C); + if (tref) { + ARegion *ar = CTX_wm_region(C); + wmGizmoMap *gzmap = ar->gizmo_map; + wmGizmoGroup *gzgroup = gzmap ? WM_gizmomap_group_find(gzmap, "TRANSFORM_GGT_gizmo") : NULL; + if (gzgroup != NULL) { + PointerRNA gzg_ptr; + WM_toolsystem_ref_properties_ensure_from_gizmo_group(tref, gzgroup->type, &gzg_ptr); + const int drag_action = RNA_enum_get(&gzg_ptr, "drag_action"); + const char *op_id = NULL; + switch (drag_action) { + case SCE_GIZMO_SHOW_TRANSLATE: + op_id = "TRANSFORM_OT_translate"; + break; + case SCE_GIZMO_SHOW_ROTATE: + op_id = "TRANSFORM_OT_rotate"; + break; + case SCE_GIZMO_SHOW_SCALE: + op_id = "TRANSFORM_OT_resize"; + break; + default: + break; + } + if (op_id) { + wmOperatorType *ot = WM_operatortype_find(op_id, true); + PointerRNA op_ptr; + WM_operator_properties_create_ptr(&op_ptr, ot); + RNA_boolean_set(&op_ptr, "release_confirm", true); + WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &op_ptr); + WM_operator_properties_free(&op_ptr); + return OPERATOR_FINISHED; + } + } + } + return OPERATOR_PASS_THROUGH; +} + +/* Use with 'TRANSFORM_GGT_gizmo'. */ +static void TRANSFORM_OT_from_gizmo(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Transform From Gizmo"; + ot->idname = "TRANSFORM_OT_from_gizmo"; + ot->flag = 0; + + /* api callbacks */ + ot->invoke = transform_from_gizmo_invoke; +} + void transform_operatortypes(void) { TransformModeItem *tmode; @@ -1132,6 +1184,8 @@ void transform_operatortypes(void) WM_operatortype_append(TRANSFORM_OT_select_orientation); WM_operatortype_append(TRANSFORM_OT_create_orientation); WM_operatortype_append(TRANSFORM_OT_delete_orientation); + + WM_operatortype_append(TRANSFORM_OT_from_gizmo); } void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spaceid) |