[Bf-blender-cvs] [f1672a3206f] temp-vse-preview-transform2: Make selection work more like in 3D editor
Richard Antalik
noreply at git.blender.org
Wed Sep 15 17:19:55 CEST 2021
Commit: f1672a3206fd3c8880f99c5861dfb0a717489115
Author: Richard Antalik
Date: Sun Sep 12 18:04:56 2021 +0200
Branches: temp-vse-preview-transform2
https://developer.blender.org/rBf1672a3206fd3c8880f99c5861dfb0a717489115
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