Commit: 60d7740fe628f5971d09c697c019489778369fb1
Author: Campbell Barton
Date:   Fri Oct 19 11:54:26 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB60d7740fe628f5971d09c697c019489778369fb1

Tool System: option for transform drag action

See: T57203

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

M       release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M       source/blender/editors/transform/transform_gizmo_3d.c
M       source/blender/editors/transform/transform_ops.c

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

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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to