Depsgraph: Tag sequencer for update on changes

Currently only adding, removing and transforming strips. Most likely more
tags is needed.
This commit is contained in:
2019-05-01 12:10:32 +02:00
parent 6e4b7a6e4d
commit e8f10d6475
6 changed files with 23 additions and 0 deletions

View File

@@ -215,6 +215,9 @@ void depsgraph_tag_to_component_opcode(const ID *id,
/* There is no such node in depsgraph, this tag is to be handled
* separately. */
break;
case ID_RECALC_SEQUENCER:
*component_type = NodeType::SEQUENCER;
break;
case ID_RECALC_ALL:
case ID_RECALC_PSYS_ALL:
BLI_assert(!"Should not happen");
@@ -615,6 +618,8 @@ const char *DEG_update_tag_as_string(IDRecalcFlag flag)
return "POINT_CACHE";
case ID_RECALC_EDITORS:
return "EDITORS";
case ID_RECALC_SEQUENCER:
return "SEQUENCER";
case ID_RECALC_ALL:
return "ALL";
}

View File

@@ -21,6 +21,7 @@ set(INC
../../blenlib
../../blentranslation
../../gpu
../../depsgraph
../../imbuf
../../makesdna
../../makesrna

View File

@@ -64,6 +64,8 @@
# include <AUD_Sequence.h>
#endif
#include "DEG_depsgraph.h"
/* own include */
#include "sequencer_intern.h"
@@ -355,6 +357,7 @@ static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
sequencer_add_apply_replace_sel(C, op, seq);
sequencer_add_apply_overlap(C, op, seq);
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
@@ -441,6 +444,7 @@ static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op)
sequencer_add_apply_replace_sel(C, op, seq);
sequencer_add_apply_overlap(C, op, seq);
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
@@ -527,6 +531,7 @@ static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op)
sequencer_add_apply_replace_sel(C, op, seq);
sequencer_add_apply_overlap(C, op, seq);
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
@@ -641,6 +646,7 @@ static int sequencer_add_generic_strip_exec(bContext *C, wmOperator *op, SeqLoad
BKE_sequencer_sort(scene);
BKE_sequencer_update_muting(ed);
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
@@ -968,6 +974,7 @@ static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
MEM_freeN(op->customdata);
}
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
@@ -1123,6 +1130,7 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
* it was NOT called in blender 2.4x, but wont hurt */
BKE_sequencer_sort(scene);
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;

View File

@@ -64,6 +64,8 @@
#include "UI_view2d.h"
#include "UI_interface.h"
#include "DEG_depsgraph.h"
/* own include */
#include "sequencer_intern.h"
@@ -2379,6 +2381,7 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op))
ms = ms->prev;
}
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;

View File

@@ -1121,6 +1121,8 @@ static void recalcData_sequencer(TransInfo *t)
seq_prev = seq;
}
DEG_id_tag_update(&t->scene->id, ID_RECALC_SEQUENCER);
flushTransSeq(t);
}

View File

@@ -604,6 +604,10 @@ typedef enum IDRecalcFlag {
*/
ID_RECALC_COPY_ON_WRITE = (1 << 13),
/* Sequences in the sequencer did change.
* Use this tag with a scene ID which owns the sequences. */
ID_RECALC_SEQUENCER = (1 << 14),
/***************************************************************************
* Pseudonyms, to have more semantic meaning in the actual code without
* using too much low-level and implementation specific tags. */