diff options
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_sequencer.c | 169 |
1 files changed, 113 insertions, 56 deletions
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index 070c0e8febe..d49ea264c81 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -59,6 +59,11 @@ typedef struct EffectInfo { #ifdef RNA_RUNTIME +typedef struct SequenceSearchData { + Sequence *seq; + void *data; +} SequenceSearchData; + /* build a temp reference to the parent */ static void meta_tmp_ref(Sequence *seq_par, Sequence *seq) { @@ -292,28 +297,33 @@ static void rna_Sequence_use_crop_set(PointerRNA *ptr, int value) static int transform_seq_cmp_cb(Sequence *seq, void *arg_pt) { - struct { Sequence *seq; void *transform; } *data = arg_pt; + SequenceSearchData *data = arg_pt; - if (seq->strip && seq->strip->transform == data->transform) { + if (seq->strip && seq->strip->transform == data->data) { data->seq = seq; return -1; /* done so bail out */ } return 1; } -static char *rna_SequenceTransform_path(PointerRNA *ptr) +static Sequence *sequence_get_by_transform(Editing *ed, StripTransform *transform) { - Scene *scene = ptr->id.data; - Editing *ed = BKE_sequencer_editing_get(scene, FALSE); - Sequence *seq; + SequenceSearchData data; - struct { Sequence *seq; void *transform; } data; data.seq = NULL; - data.transform = ptr->data; + data.data = transform; /* irritating we need to search for our sequence! */ BKE_sequencer_base_recursive_apply(&ed->seqbase, transform_seq_cmp_cb, &data); - seq = data.seq; + + return data.seq; +} + +static char *rna_SequenceTransform_path(PointerRNA *ptr) +{ + Scene *scene = ptr->id.data; + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_transform(ed, ptr->data); if (seq && seq->name + 2) return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].transform", seq->name + 2); @@ -321,30 +331,43 @@ static char *rna_SequenceTransform_path(PointerRNA *ptr) return BLI_strdup(""); } +static void rna_SequenceTransform_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) +{ + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_transform(ed, ptr->data); + + BKE_sequence_invalidate_cache(scene, seq); +} + static int crop_seq_cmp_cb(Sequence *seq, void *arg_pt) { - struct { Sequence *seq; void *crop; } *data = arg_pt; + SequenceSearchData *data = arg_pt; - if (seq->strip && seq->strip->crop == data->crop) { + if (seq->strip && seq->strip->crop == data->data) { data->seq = seq; return -1; /* done so bail out */ } return 1; } -static char *rna_SequenceCrop_path(PointerRNA *ptr) +static Sequence *sequence_get_by_crop(Editing *ed, StripCrop *crop) { - Scene *scene = ptr->id.data; - Editing *ed = BKE_sequencer_editing_get(scene, FALSE); - Sequence *seq; + SequenceSearchData data; - struct { Sequence *seq; void *crop; } data; data.seq = NULL; - data.crop = ptr->data; + data.data = crop; /* irritating we need to search for our sequence! */ BKE_sequencer_base_recursive_apply(&ed->seqbase, crop_seq_cmp_cb, &data); - seq = data.seq; + + return data.seq; +} + +static char *rna_SequenceCrop_path(PointerRNA *ptr) +{ + Scene *scene = ptr->id.data; + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_crop(ed, ptr->data); if (seq && seq->name + 2) return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].crop", seq->name + 2); @@ -352,6 +375,13 @@ static char *rna_SequenceCrop_path(PointerRNA *ptr) return BLI_strdup(""); } +static void rna_SequenceCrop_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) +{ + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_crop(ed, ptr->data); + + BKE_sequence_invalidate_cache(scene, seq); +} /* name functions that ignore the first two characters */ static void rna_Sequence_name_get(PointerRNA *ptr, char *value) @@ -575,12 +605,15 @@ static void rna_SequenceElement_filename_set(PointerRNA *ptr, const char *value) } #endif -static void rna_Sequence_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr)) +static void rna_Sequence_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) { Editing *ed = BKE_sequencer_editing_get(scene, FALSE); - if (ed) - BKE_sequencer_free_imbuf(scene, &ed->seqbase, FALSE, TRUE); + if (ed) { + Sequence *seq = (Sequence *) ptr->data; + + BKE_sequence_invalidate_cache(scene, seq); + } } static void rna_Sequence_update_reopen_files(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) @@ -611,32 +644,43 @@ static void rna_Sequence_filepath_update(Main *bmain, Scene *scene, PointerRNA * static int seqproxy_seq_cmp_cb(Sequence *seq, void *arg_pt) { - struct { Sequence *seq; void *seq_proxy; } *data = arg_pt; + SequenceSearchData *data = arg_pt; - if (seq->strip && seq->strip->proxy == data->seq_proxy) { + if (seq->strip && seq->strip->proxy == data->data) { data->seq = seq; return -1; /* done so bail out */ } return 1; } -static void rna_Sequence_tcindex_update(Main *bmain, Scene *scene, PointerRNA *ptr) +static Sequence *sequence_get_by_proxy(Editing *ed, StripProxy *proxy) { - Editing *ed = BKE_sequencer_editing_get(scene, FALSE); - Sequence *seq; - - struct { Sequence *seq; void *seq_proxy; } data; + SequenceSearchData data; data.seq = NULL; - data.seq_proxy = ptr->data; + data.data = proxy; BKE_sequencer_base_recursive_apply(&ed->seqbase, seqproxy_seq_cmp_cb, &data); - seq = data.seq; + return data.seq; +} + +static void rna_Sequence_tcindex_update(Main *bmain, Scene *scene, PointerRNA *ptr) +{ + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_proxy(ed, ptr->data); BKE_sequence_reload_new_file(scene, seq, FALSE); rna_Sequence_frame_change_update(scene, seq); } +static void rna_SequenceProxy_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) +{ + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_proxy(ed, ptr->data); + + BKE_sequence_invalidate_cache(scene, seq); +} + /* do_versions? */ static float rna_Sequence_opacity_get(PointerRNA *ptr) { @@ -650,30 +694,35 @@ static void rna_Sequence_opacity_set(PointerRNA *ptr, float value) seq->blend_opacity = value * 100.0f; } - static int colbalance_seq_cmp_cb(Sequence *seq, void *arg_pt) { - struct { Sequence *seq; void *color_balance; } *data = arg_pt; + SequenceSearchData *data = arg_pt; - if (seq->strip && seq->strip->color_balance == data->color_balance) { + if (seq->strip && seq->strip->color_balance == data->data) { data->seq = seq; return -1; /* done so bail out */ } return 1; } -static char *rna_SequenceColorBalance_path(PointerRNA *ptr) + +static Sequence *sequence_get_by_colorbalance(Editing *ed, StripColorBalance *cb) { - Scene *scene = ptr->id.data; - Editing *ed = BKE_sequencer_editing_get(scene, FALSE); - Sequence *seq; + SequenceSearchData data; - struct { Sequence *seq; void *color_balance; } data; data.seq = NULL; - data.color_balance = ptr->data; + data.data = cb; /* irritating we need to search for our sequence! */ BKE_sequencer_base_recursive_apply(&ed->seqbase, colbalance_seq_cmp_cb, &data); - seq = data.seq; + + return data.seq; +} + +static char *rna_SequenceColorBalance_path(PointerRNA *ptr) +{ + Scene *scene = ptr->id.data; + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_colorbalance(ed, ptr->data); if (seq && seq->name + 2) return BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].color_balance", seq->name + 2); @@ -681,6 +730,14 @@ static char *rna_SequenceColorBalance_path(PointerRNA *ptr) return BLI_strdup(""); } +static void rna_SequenceColorBalance_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) +{ + Editing *ed = BKE_sequencer_editing_get(scene, FALSE); + Sequence *seq = sequence_get_by_colorbalance(ed, ptr->data); + + BKE_sequence_invalidate_cache(scene, seq); +} + static void rna_SequenceEditor_overlay_lock_set(PointerRNA *ptr, int value) { Scene *scene = ptr->id.data; @@ -787,25 +844,25 @@ static void rna_def_strip_crop(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "top"); RNA_def_property_ui_text(prop, "Top", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceCrop_update"); prop = RNA_def_property(srna, "min_y", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "bottom"); RNA_def_property_ui_text(prop, "Bottom", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceCrop_update"); prop = RNA_def_property(srna, "min_x", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "left"); RNA_def_property_ui_text(prop, "Left", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceCrop_update"); prop = RNA_def_property(srna, "max_x", PROP_INT, PROP_UNSIGNED); RNA_def_property_int_sdna(prop, NULL, "right"); RNA_def_property_ui_text(prop, "Right", ""); RNA_def_property_ui_range(prop, 0, 4096, 1, 0); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceCrop_update"); RNA_def_struct_path_func(srna, "rna_SequenceCrop_path"); } @@ -823,13 +880,13 @@ static void rna_def_strip_transform(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "xofs"); RNA_def_property_ui_text(prop, "Offset X", ""); RNA_def_property_ui_range(prop, -4096, 4096, 1, 0); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceTransform_update"); prop = RNA_def_property(srna, "offset_y", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "yofs"); RNA_def_property_ui_text(prop, "Offset Y", ""); RNA_def_property_ui_range(prop, -4096, 4096, 1, 0); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceTransform_update"); RNA_def_struct_path_func(srna, "rna_SequenceTransform_path"); @@ -862,14 +919,14 @@ static void rna_def_strip_proxy(BlenderRNA *brna) prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH); RNA_def_property_string_sdna(prop, NULL, "dir"); RNA_def_property_ui_text(prop, "Directory", "Location to store the proxy files"); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceProxy_update"); prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH); RNA_def_property_ui_text(prop, "Path", "Location of custom proxy file"); RNA_def_property_string_funcs(prop, "rna_Sequence_proxy_filepath_get", "rna_Sequence_proxy_filepath_length", "rna_Sequence_proxy_filepath_set"); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceProxy_update"); prop = RNA_def_property(srna, "build_25", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "build_size_flags", SEQ_PROXY_IMAGE_SIZE_25); @@ -924,32 +981,32 @@ static void rna_def_strip_color_balance(BlenderRNA *brna) prop = RNA_def_property(srna, "lift", PROP_FLOAT, PROP_COLOR); RNA_def_property_ui_text(prop, "Lift", "Color balance lift (shadows)"); RNA_def_property_ui_range(prop, 0, 2, 0.1, 3); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceColorBalance_update"); prop = RNA_def_property(srna, "gamma", PROP_FLOAT, PROP_COLOR); RNA_def_property_ui_text(prop, "Gamma", "Color balance gamma (midtones)"); RNA_def_property_ui_range(prop, 0, 2, 0.1, 3); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceColorBalance_update"); prop = RNA_def_property(srna, "gain", PROP_FLOAT, PROP_COLOR); RNA_def_property_ui_text(prop, "Gain", "Color balance gain (highlights)"); RNA_def_property_ui_range(prop, 0, 2, 0.1, 3); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceColorBalance_update"); prop = RNA_def_property(srna, "invert_gain", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN); RNA_def_property_ui_text(prop, "Inverse Gain", ""); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceColorBalance_update"); prop = RNA_def_property(srna, "invert_gamma", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA); RNA_def_property_ui_text(prop, "Inverse Gamma", ""); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceColorBalance_update"); prop = RNA_def_property(srna, "invert_lift", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT); RNA_def_property_ui_text(prop, "Inverse Lift", ""); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceColorBalance_update"); RNA_def_struct_path_func(srna, "rna_SequenceColorBalance_path"); @@ -958,12 +1015,12 @@ static void rna_def_strip_color_balance(BlenderRNA *brna) prop = RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Exposure", ""); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_ColorBabalnce_update"); prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Saturation", ""); - RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_update"); + RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_ColorBabalnce_update"); #endif } |