[Bf-blender-cvs] [17385065747] temp-vse-preview-transform: Calculate gizmo center point and rotation.

Richard Antalik noreply at git.blender.org
Mon Aug 30 00:01:29 CEST 2021


Commit: 17385065747554e92b781fd835f91f32f4226582
Author: Richard Antalik
Date:   Thu Aug 26 07:32:07 2021 +0200
Branches: temp-vse-preview-transform
https://developer.blender.org/rB17385065747554e92b781fd835f91f32f4226582

Calculate gizmo center point and rotation.

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

M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/transform/transform_gizmo_2d.c

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

diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index b8041e775a0..bdc4a9d2386 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -365,7 +365,7 @@ static void sequencer_listener(const wmSpaceTypeListenerParams *params)
 
 /* ************* dropboxes ************* */
 
-static bool SEQUENCER_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
+static bool image_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
 {
   ARegion *region = CTX_wm_region(C);
   Scene *scene = CTX_data_scene(C);
@@ -440,12 +440,8 @@ static void sequencer_dropboxes(void)
 {
   ListBase *lb = WM_dropboxmap_find("Sequencer", SPACE_SEQ, RGN_TYPE_WINDOW);
 
-  WM_dropbox_add(lb,
-                 "SEQUENCER_OT_SEQUENCER_strip_add",
-                 SEQUENCER_drop_poll,
-                 sequencer_drop_copy,
-                 NULL,
-                 NULL);
+  WM_dropbox_add(
+      lb, "SEQUENCER_OT_image_strip_add", image_drop_poll, sequencer_drop_copy, NULL, NULL);
   WM_dropbox_add(
       lb, "SEQUENCER_OT_movie_strip_add", movie_drop_poll, sequencer_drop_copy, NULL, NULL);
   WM_dropbox_add(
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index dd3dea4ae81..f86d757294c 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -237,6 +237,31 @@ static bool gizmo2d_calc_bounds(const bContext *C, float *r_center, float *r_min
   return changed;
 }
 
+static float gizmo2d_calc_rotation(const bContext *C)
+{
+  ScrArea *area = CTX_wm_area(C);
+  if (area->spacetype != SPACE_SEQ) {
+    return 0.0f;
+  }
+
+  Scene *scene = CTX_data_scene(C);
+  Editing *ed = SEQ_editing_get(scene, false);
+  ListBase *seqbase = SEQ_active_seqbase_get(ed);
+  SeqCollection *selected_strips = SEQ_query_selected_strips(seqbase);
+
+  Sequence *seq;
+  SEQ_ITERATOR_FOREACH (seq, selected_strips) {
+    if (seq == ed->act_seq) {
+      StripTransform *transform = seq->strip->transform;
+      SEQ_collection_free(selected_strips);
+      return transform->rotation;
+    }
+  }
+
+  SEQ_collection_free(selected_strips);
+  return 0.0f;
+}
+
 static bool gizmo2d_calc_center(const bContext *C, float r_center[2])
 {
   ScrArea *area = CTX_wm_area(C);
@@ -251,16 +276,23 @@ static bool gizmo2d_calc_center(const bContext *C, float r_center[2])
   else if (area->spacetype == SPACE_SEQ) {
     Scene *scene = CTX_data_scene(C);
     ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene, false));
-
     SeqCollection *selected_strips = SEQ_query_selected_strips(seqbase);
-    has_select = SEQ_collection_len(selected_strips) > 0;
 
+    if (SEQ_collection_len(selected_strips) <= 0) {
+      SEQ_collection_free(selected_strips);
+      return false;
+    }
+
+    has_select = true;
     Sequence *seq;
     SEQ_ITERATOR_FOREACH (seq, selected_strips) {
       StripTransform *transform = seq->strip->transform;
-      r_center[0] = transform->xofs;
-      r_center[1] = transform->yofs;
+      r_center[0] += transform->xofs;
+      r_center[1] += transform->yofs;
     }
+    r_center[0] /= SEQ_collection_len(selected_strips);
+    r_center[1] /= SEQ_collection_len(selected_strips);
+
     SEQ_collection_free(selected_strips);
   }
   return has_select;
@@ -567,6 +599,7 @@ void ED_widgetgroup_gizmo2d_xform_no_cage_callbacks_set(wmGizmoGroupType *gzgt)
 typedef struct GizmoGroup_Resize2D {
   wmGizmo *gizmo_xy[3];
   float origin[2];
+  float rotation;
 } GizmoGroup_Resize2D;
 
 static GizmoGroup_Resize2D *gizmogroup2d_resize_init(wmGizmoGroup *gzgroup)
@@ -599,6 +632,7 @@ static void gizmo2d_resize_refresh(const bContext *C, wmGizmoGroup *gzgroup)
       ggd->gizmo_xy[i]->flag &= ~WM_GIZMO_HIDDEN;
     }
     copy_v2_v2(ggd->origin, origin);
+    ggd->rotation = gizmo2d_calc_rotation(C);
   }
 }
 
@@ -623,6 +657,13 @@ static void gizmo2d_resize_draw_prepare(const bContext *C, wmGizmoGroup *gzgroup
   for (int i = 0; i < ARRAY_SIZE(ggd->gizmo_xy); i++) {
     wmGizmo *gz = ggd->gizmo_xy[i];
     WM_gizmo_set_matrix_location(gz, origin);
+
+    if (i < 2) {
+      float axis[3] = {0.0f}, rotated_axis[3];
+      axis[i] = 1.0f;
+      rotate_v3_v3v3fl(rotated_axis, axis, (float[3]){0, 0, 1}, ggd->rotation);
+      WM_gizmo_set_matrix_rotation_from_z_axis(gz, rotated_axis);
+    }
   }
 }
 
@@ -645,9 +686,10 @@ static void gizmo2d_resize_setup(const bContext *C, wmGizmoGroup *gzgroup)
 
       /* set up widget data */
       RNA_float_set(gz->ptr, "length", 1.0f);
-      float axis[3] = {0.0f};
-      axis[i] = 1.0f;
-      WM_gizmo_set_matrix_rotation_from_z_axis(gz, axis);
+
+      /*      float axis[3] = {0.0f};
+            axis[i] = 1.0f;
+            WM_gizmo_set_matrix_rotation_from_z_axis(gz, axis);*/
 
       RNA_enum_set(gz->ptr, "draw_style", ED_GIZMO_ARROW_STYLE_BOX);



More information about the Bf-blender-cvs mailing list