[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