[Bf-blender-cvs] [7427ac8af24] temp-vse-preview-transform: Make selection work more like in 3D editor

Richard Antalik noreply at git.blender.org
Sun Sep 12 19:03:38 CEST 2021


Commit: 7427ac8af241c014f9bc49c6a057da7d5f773acb
Author: Richard Antalik
Date:   Sun Sep 12 18:04:56 2021 +0200
Branches: temp-vse-preview-transform
https://developer.blender.org/rB7427ac8af241c014f9bc49c6a057da7d5f773acb

Make selection work more like in 3D editor

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

M	source/blender/editors/space_sequencer/sequencer_draw.c
M	source/blender/editors/space_sequencer/sequencer_select.c
M	source/blender/editors/transform/transform_convert_sequencer_image.c
M	source/blender/editors/transform/transform_gizmo_2d.c
M	source/blender/sequencer/SEQ_iterator.h
M	source/blender/sequencer/intern/iterator.c
M	source/blender/sequencer/intern/render.c

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

diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 9b4c075f109..cab59466283 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -2217,7 +2217,7 @@ void sequencer_draw_preview(const bContext *C,
     IMB_freeImBuf(ibuf);
   }
 
-  SeqCollection *collection = Seq_query_rendered_strips(&scene->ed->seqbase, timeline_frame, 0);
+  SeqCollection *collection = SEQ_query_rendered_strips(&scene->ed->seqbase, timeline_frame, 0);
   Sequence *seq;
   SEQ_ITERATOR_FOREACH (seq, collection) {
     seq_draw_image_origin_and_outline(C, seq);
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index 595fba9d9b1..e503c4b7a93 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -44,6 +44,7 @@
 #include "SEQ_sequencer.h"
 #include "SEQ_time.h"
 #include "SEQ_transform.h"
+#include "SEQ_utils.h"
 
 /* For menu, popup, icons, etc. */
 
@@ -676,12 +677,12 @@ static bool seq_select_point_image_isect(const Scene *scene,
   return BLI_rctf_isect_pt(&r_rctf, point[0], point[1]);
 }
 
-/* Check if click happened on image which belongs to strip. Unselected strips are prioritized.
- * Overlapping strips are not ordered. */
+/* Check if click happened on image which belongs to strip. If multiple strips are found, loop
+ * through them in order. */
 static Sequence *seq_select_seq_from_preview(const bContext *C, const int mval[2])
 {
   Scene *scene = CTX_data_scene(C);
-  Editing *ed = SEQ_editing_get(scene, false);
+  Editing *ed = SEQ_editing_get(scene);
   ListBase *seqbase = SEQ_active_seqbase_get(ed);
   SpaceSeq *sseq = CTX_wm_space_seq(C);
   View2D *v2d = UI_view2d_fromcontext(C);
@@ -689,29 +690,25 @@ static Sequence *seq_select_seq_from_preview(const bContext *C, const int mval[2
   float click_x, click_y;
   UI_view2d_region_to_view(v2d, mval[0], mval[1], &click_x, &click_y);
 
-  SeqCollection *strips = Seq_query_rendered_strips(seqbase, scene->r.cfra, sseq->chanshown);
+  SeqCollection *strips = SEQ_query_rendered_strips(seqbase, scene->r.cfra, sseq->chanshown);
+  ListBase strips_ordered = {NULL};
   Sequence *seq;
   SEQ_ITERATOR_FOREACH (seq, strips) {
-    if ((seq->flag & SELECT) != 0) {
-      continue;
-    }
-
     if (seq_select_point_image_isect(scene, seq, click_x, click_y)) {
-      SEQ_collection_free(strips);
-      return seq;
+      BLI_addtail(&strips_ordered, seq);
     }
   }
+  SEQ_collection_free(strips);
+  SEQ_sort(&strips_ordered);
 
-  SEQ_filter_selected_strips(strips);
-  SEQ_ITERATOR_FOREACH (seq, strips) {
-    if (seq_select_point_image_isect(scene, seq, click_x, click_y)) {
-      SEQ_collection_free(strips);
-      return seq;
+  Sequence *seq_active = SEQ_select_active_get(scene);
+  LISTBASE_FOREACH (Sequence *, seq_select, &strips_ordered) {
+    if (seq_select == seq_active && seq_select->next != NULL) {
+      return seq_select->next;
     }
   }
 
-  SEQ_collection_free(strips);
-  return NULL;
+  return strips_ordered.first;
 }
 
 static bool element_already_selected(const Sequence *seq, const int handle_clicked)
diff --git a/source/blender/editors/transform/transform_convert_sequencer_image.c b/source/blender/editors/transform/transform_convert_sequencer_image.c
index 1a4ee0d5b2d..af1c0f13c8c 100644
--- a/source/blender/editors/transform/transform_convert_sequencer_image.c
+++ b/source/blender/editors/transform/transform_convert_sequencer_image.c
@@ -102,7 +102,7 @@ void createTransSeqImageData(TransInfo *t)
 {
   Editing *ed = SEQ_editing_get(t->scene);
   ListBase *seqbase = SEQ_active_seqbase_get(ed);
-  SeqCollection *strips = Seq_query_rendered_strips(seqbase, t->scene->r.cfra, 0);
+  SeqCollection *strips = SEQ_query_rendered_strips(seqbase, t->scene->r.cfra, 0);
   SEQ_filter_selected_strips(strips);
 
   const int count = SEQ_collection_len(strips);
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index a5940bea8f5..e3b8115dfa5 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -249,7 +249,7 @@ static float gizmo2d_calc_rotation(const bContext *C)
   Scene *scene = CTX_data_scene(C);
   Editing *ed = SEQ_editing_get(scene);
   ListBase *seqbase = SEQ_active_seqbase_get(ed);
-  SeqCollection *strips = Seq_query_rendered_strips(seqbase, scene->r.cfra, 0);
+  SeqCollection *strips = SEQ_query_rendered_strips(seqbase, scene->r.cfra, 0);
   SEQ_filter_selected_strips(strips);
 
   Sequence *seq;
@@ -279,7 +279,7 @@ 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));
-    SeqCollection *strips = Seq_query_rendered_strips(seqbase, scene->r.cfra, 0);
+    SeqCollection *strips = SEQ_query_rendered_strips(seqbase, scene->r.cfra, 0);
     SEQ_filter_selected_strips(strips);
 
     if (SEQ_collection_len(strips) <= 0) {
diff --git a/source/blender/sequencer/SEQ_iterator.h b/source/blender/sequencer/SEQ_iterator.h
index 32cf8888b91..d2a47a13db3 100644
--- a/source/blender/sequencer/SEQ_iterator.h
+++ b/source/blender/sequencer/SEQ_iterator.h
@@ -96,7 +96,7 @@ SeqCollection *SEQ_query_selected_strips(struct ListBase *seqbase);
 SeqCollection *SEQ_query_unselected_strips(struct ListBase *seqbase);
 SeqCollection *SEQ_query_all_strips(ListBase *seqbase);
 SeqCollection *SEQ_query_all_strips_recursive(ListBase *seqbase);
-SeqCollection *Seq_query_rendered_strips(ListBase *seqbase,
+SeqCollection *SEQ_query_rendered_strips(ListBase *seqbase,
                                          const int timeline_frame,
                                          const int displayed_channel);
 void SEQ_query_strip_effect_chain(struct Sequence *seq_reference,
diff --git a/source/blender/sequencer/intern/iterator.c b/source/blender/sequencer/intern/iterator.c
index b1b66b7c1b5..2429405350b 100644
--- a/source/blender/sequencer/intern/iterator.c
+++ b/source/blender/sequencer/intern/iterator.c
@@ -438,7 +438,7 @@ static void collection_filter_rendered_strips(SeqCollection *collection)
  * \param displayed_channel: viewed channel. when set to 0, no channel filter is applied
  * \return strip collection
  */
-SeqCollection *Seq_query_rendered_strips(ListBase *seqbase,
+SeqCollection *SEQ_query_rendered_strips(ListBase *seqbase,
                                          const int timeline_frame,
                                          const int displayed_channel)
 {
diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c
index 2fe4aa2aca6..2081b308f6d 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -273,7 +273,7 @@ int seq_get_shown_sequences(ListBase *seqbase,
                             const int chanshown,
                             Sequence **r_seq_arr)
 {
-  SeqCollection *collection = Seq_query_rendered_strips(seqbase, timeline_frame, chanshown);
+  SeqCollection *collection = SEQ_query_rendered_strips(seqbase, timeline_frame, chanshown);
   const int strip_count = BLI_gset_len(collection->set);
 
   if (strip_count > MAXSEQ) {



More information about the Bf-blender-cvs mailing list