Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-21 19:57:39 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-21 19:57:39 +0300
commit1f8cd19d4bc76b294841f3495132ecbdf9964228 (patch)
tree4f1708819439a115ff6ece610a994d164e535f1c /source
parent76ce02ddc04e04f7931655b77383b9aeb2bc94d1 (diff)
removing sequence strip overlap didnt adjust the animation key time
single images were not having their animation data transformed correctly made sequence strip opacity 0-1 rather then 0-100 in RNA
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h4
-rw-r--r--source/blender/blenkernel/intern/sequencer.c14
-rw-r--r--source/blender/editors/space_sequencer/sequencer_add.c2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c12
-rw-r--r--source/blender/editors/transform/transform_conversions.c14
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c17
6 files changed, 36 insertions, 27 deletions
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index c078b92af2d..070d98ce25f 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -188,8 +188,8 @@ void seq_single_fix(struct Sequence *seq);
int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq);
void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
-int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test);
-int shuffle_seq_time(ListBase * seqbasep);
+int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test, struct Scene *evil_scene);
+int shuffle_seq_time(ListBase * seqbasep, struct Scene *evil_scene);
int seqbase_isolated_sel_check(struct ListBase *seqbase);
void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 84458b0e921..aa81cea79f5 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -3442,13 +3442,15 @@ int seq_test_overlap(ListBase * seqbasep, Sequence *test)
}
-static void seq_translate(Sequence *seq, int delta)
+static void seq_translate(Scene *evil_scene, Sequence *seq, int delta)
{
+ seq_offset_animdata(evil_scene, seq, delta);
seq->start += delta;
+
if(seq->type==SEQ_META) {
Sequence *seq_child;
for(seq_child= seq->seqbase.first; seq_child; seq_child= seq_child->next) {
- seq_translate(seq_child, delta);
+ seq_translate(evil_scene, seq_child, delta);
}
}
@@ -3456,7 +3458,7 @@ static void seq_translate(Sequence *seq, int delta)
}
/* return 0 if there werent enough space */
-int shuffle_seq(ListBase * seqbasep, Sequence *test)
+int shuffle_seq(ListBase * seqbasep, Sequence *test, Scene *evil_scene)
{
int orig_machine= test->machine;
test->machine++;
@@ -3484,7 +3486,7 @@ int shuffle_seq(ListBase * seqbasep, Sequence *test)
test->machine= orig_machine;
new_frame = new_frame + (test->start-test->startdisp); /* adjust by the startdisp */
- seq_translate(test, new_frame - test->start);
+ seq_translate(evil_scene, test, new_frame - test->start);
calc_sequence(test);
return 0;
@@ -3540,7 +3542,7 @@ static int shuffle_seq_time_offset(ListBase * seqbasep, char dir)
return tot_ofs;
}
-int shuffle_seq_time(ListBase * seqbasep)
+int shuffle_seq_time(ListBase * seqbasep, Scene *evil_scene)
{
/* note: seq->tmp is used to tag strips to move */
@@ -3553,7 +3555,7 @@ int shuffle_seq_time(ListBase * seqbasep)
if(offset) {
for(seq= seqbasep->first; seq; seq= seq->next) {
if(seq->tmp) {
- seq_translate(seq, offset);
+ seq_translate(evil_scene, seq, offset);
seq->flag &= ~SEQ_OVERLAP;
}
}
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 48c364b6c6b..354b4712ce4 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -548,7 +548,7 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
RNA_float_get_array(op->ptr, "color", colvars->col);
}
- if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq);
+ if(seq_test_overlap(ed->seqbasep, seq)) shuffle_seq(ed->seqbasep, seq, scene);
update_changed_seq_and_deps(scene, seq, 1, 1); /* runs calc_sequence */
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 6704cf0ef62..bfb7d139074 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -195,7 +195,7 @@ static void change_plugin_seq(Scene *scene, char *str) /* called from fileselect
last_seq->seq2->machine,
last_seq->seq3->machine);
- if( seq_test_overlap(ed->seqbasep, last_seq) ) shuffle_seq(ed->seqbasep, last_seq);
+ if( seq_test_overlap(ed->seqbasep, last_seq) ) shuffle_seq(ed->seqbasep, last_seq, scene);
}
@@ -1395,7 +1395,7 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op)
if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
seq->flag &= ~SEQ_OVERLAP;
if( seq_test_overlap(ed->seqbasep, seq) ) {
- shuffle_seq(ed->seqbasep, seq);
+ shuffle_seq(ed->seqbasep, seq, scene);
}
}
else if(seq->type & SEQ_EFFECT) {
@@ -1975,7 +1975,7 @@ static int sequencer_separate_images_exec(bContext *C, wmOperator *op)
calc_sequence(seq_new);
seq_new->flag &= ~SEQ_OVERLAP;
if (seq_test_overlap(ed->seqbasep, seq_new)) {
- shuffle_seq(ed->seqbasep, seq_new);
+ shuffle_seq(ed->seqbasep, seq_new, scene);
}
seqUniqueName(scene->ed->seqbasep, seq_new);
@@ -2138,7 +2138,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op)
active_seq_set(scene, seqm);
- if( seq_test_overlap(ed->seqbasep, seqm) ) shuffle_seq(ed->seqbasep, seqm);
+ if( seq_test_overlap(ed->seqbasep, seqm) ) shuffle_seq(ed->seqbasep, seqm, scene);
seq_update_muting(ed);
@@ -2207,7 +2207,7 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *op)
if(seq->flag & SELECT) {
seq->flag &= ~SEQ_OVERLAP;
if( seq_test_overlap(ed->seqbasep, seq) ) {
- shuffle_seq(ed->seqbasep, seq);
+ shuffle_seq(ed->seqbasep, seq, scene);
}
}
}
@@ -2632,7 +2632,7 @@ static int sequencer_swap_exec(bContext *C, wmOperator *op)
if((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) {
/* this may now overlap */
if( seq_test_overlap(ed->seqbasep, iseq) ) {
- shuffle_seq(ed->seqbasep, iseq);
+ shuffle_seq(ed->seqbasep, iseq, scene);
}
}
}
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 98c1b333844..d5b9a85e347 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -2365,23 +2365,21 @@ void flushTransSeq(TransInfo *t)
/* flush to 2d vector from internally used 3d vector */
for(a=0, td= t->data, td2d= t->data2d; a<t->total; a++, td++, td2d++) {
-
tdsq= (TransDataSeq *)td->extra;
seq= tdsq->seq;
new_frame= (int)floor(td2d->loc[0] + 0.5f);
switch (tdsq->sel_flag) {
case SELECT:
- if (seq->type != SEQ_META && (seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */
- seq->start= new_frame - tdsq->start_offset;
-
#ifdef XXX_DURIAN_ANIM_TX_HACK
- if (seq->type != SEQ_META && seq != seq_prev) {
- int ofs = (new_frame - tdsq->start_offset) - seq->start;
+ if (seq != seq_prev) {
+ int ofs = (new_frame - tdsq->start_offset) - seq->start; // breaks for single strips - color/image
seq_offset_animdata(t->scene, seq, ofs);
}
#endif
-
+ if (seq->type != SEQ_META && (seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */
+ seq->start= new_frame - tdsq->start_offset;
+
if (seq->depth==0) {
seq->machine= (int)floor(td2d->loc[1] + 0.5f);
CLAMP(seq->machine, 1, MAXSEQ);
@@ -4130,7 +4128,7 @@ static void freeSeqData(TransInfo *t)
}
}
- shuffle_seq_time(seqbasep);
+ shuffle_seq_time(seqbasep, t->scene);
}
}
#endif
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index 767da5dc042..f875e6a7fa2 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -96,7 +96,7 @@ static void rna_Sequence_frame_change_update(Scene *scene, Sequence *seq)
calc_sequence_disp(seq);
if(seq_test_overlap(seqbase, seq)) {
- shuffle_seq(seqbase, seq);
+ shuffle_seq(seqbase, seq, scene); // XXX - BROKEN!, uses context seqbasep
}
sort_seq(scene);
}
@@ -155,7 +155,7 @@ static void rna_Sequence_channel_set(PointerRNA *ptr, int value)
seq->machine= value;
if( seq_test_overlap(seqbase, seq) ) {
- shuffle_seq(seqbase, seq);
+ shuffle_seq(seqbase, seq, scene); // XXX - BROKEN!, uses context seqbasep
}
sort_seq(scene);
}
@@ -362,6 +362,14 @@ static void rna_Sequence_mute_update(Main *bmain, Scene *scene, PointerRNA *ptr)
rna_Sequence_update(bmain, scene, ptr);
}
+/* do_versions? */
+static float rna_Sequence_opacity_get(PointerRNA *ptr) {
+ return ((Sequence*)(ptr->data))->blend_opacity / 100.0f;
+}
+static void rna_Sequence_opacity_set(PointerRNA *ptr, float value) {
+ ((Sequence*)(ptr->data))->blend_opacity = value * 100.0f;
+}
+
#else
static void rna_def_strip_element(BlenderRNA *brna)
@@ -660,9 +668,10 @@ static void rna_def_sequence(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Blend Mode", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_NONE);
- RNA_def_property_range(prop, 0.0f, 100.0f);
+ prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Blend Opacity", "");
+ RNA_def_property_float_funcs(prop, "rna_Sequence_opacity_get", "rna_Sequence_opacity_set", NULL); // stupid 0-100 -> 0-1
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
prop= RNA_def_property(srna, "effect_fader", PROP_FLOAT, PROP_NONE);