Fix T73056: Cache not invalidated in fade operator

This operator is written in python it is inserting keyframes to create fade
effects.

Add Sequence.invalidate() python function to invalidate strip if it is
changed in python.

Perhaps I could implement cache invalidation to actual curve manipulation.
I guess it wouldn't be very hard to do but having means to invalidate form
python is useful as well.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D7885
This commit is contained in:
2020-06-18 05:31:42 +02:00
parent 47f98a38d0
commit 67a822e086
2 changed files with 30 additions and 0 deletions

View File

@@ -164,6 +164,7 @@ class SequencerFadesClear(Operator):
if curve:
fcurves.remove(curve)
setattr(sequence, animated_property, 1.0)
sequence.invalidate('COMPOSITE')
return {'FINISHED'}
@@ -230,6 +231,7 @@ class SequencerFadesAdd(Operator):
self.fade_animation_clear(fade_fcurve, fades)
self.fade_animation_create(fade_fcurve, fades)
faded_sequences.append(sequence)
sequence.invalidate('COMPOSITE')
sequence_string = "sequence" if len(faded_sequences) == 1 else "sequences"
self.report({'INFO'}, "Added fade animation to {} {}.".format(len(faded_sequences), sequence_string))

View File

@@ -447,6 +447,21 @@ static void rna_SequenceElements_pop(ID *id, Sequence *seq, ReportList *reports,
WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
}
static void rna_Sequence_invalidate_cache_rnafunc(ID *id, Sequence *self, int type)
{
switch (type) {
case SEQ_CACHE_STORE_RAW:
BKE_sequence_invalidate_cache_raw((Scene *)id, self);
break;
case SEQ_CACHE_STORE_PREPROCESSED:
BKE_sequence_invalidate_cache_preprocessed((Scene *)id, self);
break;
case SEQ_CACHE_STORE_COMPOSITE:
BKE_sequence_invalidate_cache_composite((Scene *)id, self);
break;
}
}
#else
void RNA_api_sequence_strip(StructRNA *srna)
@@ -454,6 +469,13 @@ void RNA_api_sequence_strip(StructRNA *srna)
FunctionRNA *func;
PropertyRNA *parm;
static const EnumPropertyItem seq_cahce_type_items[] = {
{SEQ_CACHE_STORE_RAW, "RAW", 0, "Raw", ""},
{SEQ_CACHE_STORE_PREPROCESSED, "PREPROCESSED", 0, "Preprocessed", ""},
{SEQ_CACHE_STORE_COMPOSITE, "COMPOSITE", 0, "Composite", ""},
{0, NULL, 0, NULL, NULL},
};
func = RNA_def_function(srna, "update", "rna_Sequence_update_rnafunc");
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
RNA_def_function_ui_description(func, "Update the strip dimensions");
@@ -479,6 +501,12 @@ void RNA_api_sequence_strip(StructRNA *srna)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "other", "Sequence", "Other", "");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
func = RNA_def_function(srna, "invalidate_cache", "rna_Sequence_invalidate_cache_rnafunc");
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
RNA_def_function_ui_description(func, "Invalidate Cached images for strip and all dependant strips. ");
parm = RNA_def_enum(func, "type", seq_cahce_type_items, 0, "Type", "Cache Type");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
}
void RNA_api_sequence_elements(BlenderRNA *brna, PropertyRNA *cprop)