[Bf-blender-cvs] [1ef8ef4941d] master: Cleanup: Remove seq->tmp_flag DNA member

Richard Antalik noreply at git.blender.org
Wed Dec 1 12:49:42 CET 2021


Commit: 1ef8ef4941dd84c8968109b5c858ed8d082d9187
Author: Richard Antalik
Date:   Wed Dec 1 12:30:57 2021 +0100
Branches: master
https://developer.blender.org/rB1ef8ef4941dd84c8968109b5c858ed8d082d9187

Cleanup: Remove seq->tmp_flag DNA member

Commit f0d20198b290 used this field to flag rendered strips which were
queried by `SEQ_query_rendered_strips()`. Then operators iterate all
strips and checks state of `seq->tmp_flag`.

Use collection returned by `SEQ_query_rendered_strips` directly.
There should be no functional changes.

This commit adds functions `all_strips_from_context` and
`selected_strips_from_context` that provide collection of strips based
on context. Most operators can use this collection directly.
There is already `seq->tmp` DNA field, but is should not be used unless
absolutely necessary. Better option is to use human readable flag.
Best is to not use DNA fields for temporary storage in runtime.

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

M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/space_sequencer/sequencer_intern.h
M	source/blender/editors/space_sequencer/sequencer_select.c
M	source/blender/makesdna/DNA_sequence_types.h
M	source/blender/sequencer/SEQ_iterator.h
M	source/blender/sequencer/intern/iterator.c

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

diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index ce538961875..71fd6bb80f5 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1728,26 +1728,22 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op))
   Scene *scene = CTX_data_scene(C);
   ListBase *seqbasep = SEQ_active_seqbase_get(SEQ_editing_get(scene));
 
+  if (sequencer_view_has_preview_poll(C) && !sequencer_view_preview_only_poll(C)) {
+    return OPERATOR_CANCELLED;
+  }
+
   SEQ_prefetch_stop(scene);
 
-  const bool is_preview = sequencer_view_has_preview_poll(C);
-  if (is_preview) {
-    if (!sequencer_view_preview_only_poll(C)) {
-      return OPERATOR_CANCELLED;
-    }
-    SEQ_query_rendered_strips_to_tag(seqbasep, scene->r.cfra, 0);
-  }
+  SeqCollection *selected_strips = selected_strips_from_context(C);
+  Sequence *seq;
 
-  LISTBASE_FOREACH (Sequence *, seq, seqbasep) {
-    if (is_preview && (seq->tmp_tag == false)) {
-      continue;
-    }
-    if (seq->flag & SELECT) {
-      SEQ_edit_flag_for_removal(scene, seqbasep, seq);
-    }
+  SEQ_ITERATOR_FOREACH (seq, selected_strips) {
+    SEQ_edit_flag_for_removal(scene, seqbasep, seq);
   }
   SEQ_edit_remove_flagged_sequences(scene, seqbasep);
 
+  SEQ_collection_free(selected_strips);
+
   DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
   DEG_relations_tag_update(bmain);
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index 37f17de08a0..d6360be8693 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -34,6 +34,7 @@ struct Depsgraph;
 struct Main;
 struct Scene;
 struct Sequence;
+struct SeqCollection;
 struct SpaceSeq;
 struct StripElem;
 struct bContext;
@@ -114,6 +115,25 @@ bool sequencer_view_has_preview_poll(struct bContext *C);
 bool sequencer_view_preview_only_poll(const struct bContext *C);
 bool sequencer_view_strips_poll(struct bContext *C);
 
+/**
+ * Returns collection with all strips presented to user. If operation is done in preview,
+ * collection is limited to all presented strips that can produce image output.
+ *
+ * \param C: context
+ * \return collection of strips (`Sequence`)
+ */
+struct SeqCollection *all_strips_from_context(struct bContext *C);
+
+/**
+ * Returns collection with selected strips presented to user. If operation is done in preview,
+ * collection is limited to selected presented strips, that can produce image output at current
+ * frame.
+ *
+ * \param C: context
+ * \return collection of strips (`Sequence`)
+ */
+struct SeqCollection *selected_strips_from_context(struct bContext *C);
+
 /* Externs. */
 extern EnumPropertyItem sequencer_prop_effect_types[];
 extern EnumPropertyItem prop_side_types[];
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index cf18429862e..90dfcc7b14d 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -64,6 +64,34 @@
 /** \name Selection Utilities
  * \{ */
 
+SeqCollection *all_strips_from_context(bContext *C)
+{
+  Scene *scene = CTX_data_scene(C);
+  ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene));
+
+  const bool is_preview = sequencer_view_has_preview_poll(C);
+  if (is_preview) {
+    return SEQ_query_rendered_strips(seqbase, scene->r.cfra, 0);
+  }
+
+  return SEQ_query_all_strips(seqbase);
+}
+
+SeqCollection *selected_strips_from_context(bContext *C)
+{
+  Scene *scene = CTX_data_scene(C);
+  ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene));
+
+  const bool is_preview = sequencer_view_has_preview_poll(C);
+  if (is_preview) {
+    SeqCollection *strips = SEQ_query_rendered_strips(seqbase, scene->r.cfra, 0);
+    SEQ_filter_selected_strips(strips);
+    return strips;
+  }
+
+  return SEQ_query_selected_strips(seqbase);
+}
+
 static void select_surrounding_handles(Scene *scene, Sequence *test) /* XXX BRING BACK */
 {
   Sequence *neighbor;
@@ -411,25 +439,18 @@ static void sequencer_select_do_updates(bContext *C, Scene *scene)
 static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
 {
   int action = RNA_enum_get(op->ptr, "action");
-
   Scene *scene = CTX_data_scene(C);
-  Editing *ed = SEQ_editing_get(scene);
-  Sequence *seq;
 
-  const bool is_preview = sequencer_view_has_preview_poll(C);
-  if (is_preview) {
-    if (!sequencer_view_preview_only_poll(C)) {
-      return OPERATOR_CANCELLED;
-    }
-    SEQ_query_rendered_strips_to_tag(ed->seqbasep, scene->r.cfra, 0);
+  if (sequencer_view_has_preview_poll(C) && !sequencer_view_preview_only_poll(C)) {
+    return OPERATOR_CANCELLED;
   }
 
+  SeqCollection *strips = all_strips_from_context(C);
+  Sequence *seq;
+
   if (action == SEL_TOGGLE) {
     action = SEL_SELECT;
-    for (seq = ed->seqbasep->first; seq; seq = seq->next) {
-      if (is_preview && (seq->tmp_tag == false)) {
-        continue;
-      }
+    SEQ_ITERATOR_FOREACH (seq, strips) {
       if (seq->flag & SEQ_ALLSEL) {
         action = SEL_DESELECT;
         break;
@@ -437,10 +458,7 @@ static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
     }
   }
 
-  for (seq = ed->seqbasep->first; seq; seq = seq->next) {
-    if (is_preview && (seq->tmp_tag == false)) {
-      continue;
-    }
+  SEQ_ITERATOR_FOREACH (seq, strips) {
     switch (action) {
       case SEL_SELECT:
         seq->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL);
@@ -461,8 +479,9 @@ static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
     }
   }
 
-  ED_outliner_select_sync_from_sequence_tag(C);
+  SEQ_collection_free(strips);
 
+  ED_outliner_select_sync_from_sequence_tag(C);
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
 
   return OPERATOR_FINISHED;
@@ -494,21 +513,15 @@ void SEQUENCER_OT_select_all(struct wmOperatorType *ot)
 static int sequencer_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
 {
   Scene *scene = CTX_data_scene(C);
-  Editing *ed = SEQ_editing_get(scene);
-  Sequence *seq;
 
-  const bool is_preview = sequencer_view_has_preview_poll(C);
-  if (is_preview) {
-    if (!sequencer_view_preview_only_poll(C)) {
-      return OPERATOR_CANCELLED;
-    }
-    SEQ_query_rendered_strips_to_tag(ed->seqbasep, scene->r.cfra, 0);
+  if (sequencer_view_has_preview_poll(C) && !sequencer_view_preview_only_poll(C)) {
+    return OPERATOR_CANCELLED;
   }
 
-  for (seq = ed->seqbasep->first; seq; seq = seq->next) {
-    if (is_preview && (seq->tmp_tag == false)) {
-      continue;
-    }
+  SeqCollection *strips = all_strips_from_context(C);
+  Sequence *seq;
+
+  SEQ_ITERATOR_FOREACH (seq, strips) {
     if (seq->flag & SELECT) {
       seq->flag &= ~SEQ_ALLSEL;
     }
@@ -518,8 +531,9 @@ static int sequencer_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
     }
   }
 
-  ED_outliner_select_sync_from_sequence_tag(C);
+  SEQ_collection_free(strips);
 
+  ED_outliner_select_sync_from_sequence_tag(C);
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
 
   return OPERATOR_FINISHED;
@@ -1784,17 +1798,15 @@ static const EnumPropertyItem sequencer_prop_select_grouped_types[] = {
 
 #define SEQ_CHANNEL_CHECK(_seq, _chan) (ELEM((_chan), 0, (_seq)->machine))
 
-static bool select_grouped_type(ListBase *seqbasep,
-                                const bool is_preview,
+static bool select_grouped_type(SeqCollection *strips,
+                                ListBase *seqbase,
                                 Sequence *actseq,
                                 const int channel)
 {
   bool changed = false;
 
-  LISTBASE_FOREACH (Sequence *, seq, seqbasep) {
-    if (is_preview && (seq->tmp_tag == false)) {
-      continue;
-    }
+  Sequence *seq;
+  SEQ_ITERATOR_FOREACH (seq, strips) {
     if (SEQ_CHANNEL_CHECK(seq, channel) && seq->type == actseq->type) {
       seq->flag |= SELECT;
       changed = true;
@@ -1804,18 +1816,16 @@ static bool select_grouped_type(ListBase *seqbasep,
   return changed;
 }
 
-static bool select_grouped_type_basic(ListBase *seqbase,
-                                      const bool is_preview,
+static bool select_grouped_type_basic(SeqCollection *strips,
+                                      ListBase *seqbase,
                                       Sequence *actseq,
                                       const int channel)
 {
   bool changed = false;
   const bool is_sound = SEQ_IS_SOUND(actseq);
 
-  LISTBASE_FOREACH (Sequence *, seq, seqbase) {
-    if (is_preview && (seq->tmp_tag == false)) {
-      continue;
-    }
+  Sequence *seq;
+  SEQ_ITERATOR_FOREACH (seq, strips) {
     if (SEQ_CHANNEL_CHECK(seq, channel) && (is_sound ? SEQ_IS_SOUND(seq) : !SEQ_IS_SOUND(seq))) {
       seq->flag |= SELECT;
       changed = true;
@@ -1825,18 +1835,16 @@ static bool select_grouped_type_basic(ListBase *seqbase,
   return changed;
 }
 
-static bool select_grouped_type_effect(ListBase *seqbase,
-                                       const bool is_preview,
+static bool select_grouped_type_effect(SeqCollection *strips,
+                                       ListBase *seqbase,
                                        Sequence *actseq,
                                        const int channel)
 {
   bool changed = false;
   const bool is_effect = SEQ_IS_EFFECT(actseq);
 
-  LISTBASE_FOREACH (Sequence *, seq, seqbase) {
-    if (is_preview && (seq->tmp_tag == false)) {
-      continue;
-    }
+  Sequence *seq;
+  SEQ_ITERATOR_FOREACH (seq, strips) {
     if (SEQ_CHANNEL_CHECK(seq, channel) &&
         (is_effect ? SEQ_IS_EFFECT(seq) : !SEQ_IS_EFFECT(seq))) {
       seq->flag |= SELECT;
@@ -1847,8 +1855,8 @@ static bool select_grouped_type_effect(ListBase *seqbase,
   return changed;
 }
 
-static bool select_grouped_data(ListBase *seqbase,
-                                const bool is_preview,
+static bool select_grouped_data(SeqCollect

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list