[Bf-blender-cvs] [1e0b7903649] blender-v2.82-release: Fix T70273: Auto-keyframe ignored by gizmos

Campbell Barton noreply at git.blender.org
Tue Jan 14 07:12:10 CET 2020


Commit: 1e0b7903649f69295d1b842d05e015676098ac12
Author: Campbell Barton
Date:   Tue Jan 14 16:48:01 2020 +1100
Branches: blender-v2.82-release
https://developer.blender.org/rB1e0b7903649f69295d1b842d05e015676098ac12

Fix T70273: Auto-keyframe ignored by gizmos

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

M	source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
M	source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
M	source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
M	source/blender/windowmanager/gizmo/WM_gizmo_api.h
M	source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c

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

diff --git a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
index a56b4f43e8f..f1a8bc62cd3 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
@@ -408,7 +408,14 @@ static void gizmo_arrow_exit(bContext *C, wmGizmo *gz, const bool cancel)
   wmGizmoProperty *gz_prop = WM_gizmo_target_property_find(gz, "offset");
   const bool is_prop_valid = WM_gizmo_target_property_is_valid(gz_prop);
 
-  if (!cancel) {
+  if (cancel) {
+    GizmoInteraction *inter = gz->interaction_data;
+    if (is_prop_valid) {
+      gizmo_property_value_reset(C, gz, inter, gz_prop);
+    }
+    data->offset = inter->init_offset;
+  }
+  else {
     /* Assign in case applying the operation needs an updated offset
      * edit-mesh bisect needs this. */
     if (is_prop_valid) {
@@ -418,14 +425,13 @@ static void gizmo_arrow_exit(bContext *C, wmGizmo *gz, const bool cancel)
       const float value = WM_gizmo_target_property_float_get(gz, gz_prop);
       data->offset = gizmo_offset_from_value(data, value, constrained, inverted);
     }
-    return;
   }
 
-  GizmoInteraction *inter = gz->interaction_data;
-  if (is_prop_valid) {
-    gizmo_property_value_reset(C, gz, inter, gz_prop);
+  if (!cancel) {
+    if (is_prop_valid) {
+      WM_gizmo_target_property_anim_autokey(C, gz, gz_prop);
+    }
   }
-  data->offset = inter->init_offset;
 }
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
index d3121711e28..25a066ae36b 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/dial3d_gizmo.c
@@ -537,6 +537,13 @@ static void gizmo_dial_exit(bContext *C, wmGizmo *gz, const bool cancel)
       WM_gizmo_target_property_float_set(C, gz, gz_prop, reset_value);
     }
   }
+
+  if (!cancel) {
+    wmGizmoProperty *gz_prop = WM_gizmo_target_property_find(gz, "offset");
+    if (WM_gizmo_target_property_is_valid(gz_prop)) {
+      WM_gizmo_target_property_anim_autokey(C, gz, gz_prop);
+    }
+  }
 }
 
 static void gizmo_dial_setup(wmGizmo *gz)
diff --git a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
index 5342f8695b2..f040e67ae44 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
@@ -335,6 +335,13 @@ static void gizmo_move_exit(bContext *C, wmGizmo *gz, const bool cancel)
     ED_transform_snap_object_context_destroy(inter->snap_context_v3d);
     inter->snap_context_v3d = NULL;
   }
+
+  if (!cancel) {
+    wmGizmoProperty *gz_prop = WM_gizmo_target_property_find(gz, "offset");
+    if (WM_gizmo_target_property_is_valid(gz_prop)) {
+      WM_gizmo_target_property_anim_autokey(C, gz, gz_prop);
+    }
+  }
 }
 
 static int gizmo_move_invoke(bContext *C, wmGizmo *gz, const wmEvent *event)
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
index e66243009f1..7b07546f668 100644
--- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h
+++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
@@ -236,6 +236,10 @@ void WM_gizmo_target_property_subscribe_all(struct wmGizmo *gz,
                                             struct wmMsgBus *mbus,
                                             struct ARegion *ar);
 
+void WM_gizmo_target_property_anim_autokey(struct bContext *C,
+                                           const struct wmGizmo *gz,
+                                           struct wmGizmoProperty *gz_prop);
+
 /* -------------------------------------------------------------------- */
 /* wmGizmoGroup */
 
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
index 094fdf3f514..8acdf2de86f 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
@@ -33,6 +33,7 @@
 
 #include "wm.h"
 
+#include "ED_keyframing.h"
 #include "ED_screen.h"
 #include "ED_view3d.h"
 
@@ -357,4 +358,19 @@ void WM_gizmo_target_property_subscribe_all(wmGizmo *gz, struct wmMsgBus *mbus,
   }
 }
 
+/**
+ * Auto-key function if auto-key is enabled.
+ */
+void WM_gizmo_target_property_anim_autokey(bContext *C,
+                                           const wmGizmo *UNUSED(gz),
+                                           wmGizmoProperty *gz_prop)
+{
+  if (gz_prop->prop != NULL) {
+    Scene *scene = CTX_data_scene(C);
+    const float cfra = (float)CFRA;
+    const int index = gz_prop->index == -1 ? 0 : gz_prop->index;
+    ED_autokeyframe_property(C, scene, &gz_prop->ptr, gz_prop->prop, index, cfra);
+  }
+}
+
 /** \} */



More information about the Bf-blender-cvs mailing list