[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25401] trunk/blender/source/blender: * rna attributes for sequence strips - seq.start_frame_final & seq. end_frame_final

Campbell Barton ideasman42 at gmail.com
Tue Dec 15 12:27:46 CET 2009


Revision: 25401
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25401
Author:   campbellbarton
Date:     2009-12-15 12:27:46 +0100 (Tue, 15 Dec 2009)

Log Message:
-----------
* rna attributes for sequence strips - seq.start_frame_final & seq.end_frame_final
  these expose the final start and end after offsets are applied. when set this is like grabbing the handle and moving it.
* made swapping strips shuffle effects and check for overlap.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequencer.h
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h
    trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/makesrna/intern/rna_sequencer.c

Modified: trunk/blender/source/blender/blenkernel/BKE_sequencer.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/blenkernel/BKE_sequencer.h	2009-12-15 11:27:46 UTC (rev 25401)
@@ -178,8 +178,8 @@
 void seq_tx_set_final_right(struct Sequence *seq, int val);
 void seq_tx_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag);
 int seq_tx_test(struct Sequence * seq);
-int check_single_seq(struct Sequence *seq);
-void fix_single_seq(struct Sequence *seq);
+int seq_single_check(struct Sequence *seq);
+void seq_single_fix(struct Sequence *seq);
 int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
 void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
 int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test);

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2009-12-15 11:27:46 UTC (rev 25401)
@@ -3259,7 +3259,7 @@
 
 /* used so we can do a quick check for single image seq
    since they work a bit differently to normal image seq's (during transform) */
-int check_single_seq(Sequence *seq)
+int seq_single_check(Sequence *seq)
 {
 	if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR))
 		return 1;
@@ -3276,7 +3276,7 @@
 			seq_tx_set_final_left(seq, seq_tx_get_final_right(seq, 0)-1);
 		}
 
-		if (check_single_seq(seq)==0) {
+		if (seq_single_check(seq)==0) {
 			if (seq_tx_get_final_left(seq, 0) >= seq_tx_get_end(seq)) {
 				seq_tx_set_final_left(seq, seq_tx_get_end(seq)-1);
 			}
@@ -3298,7 +3298,7 @@
 			seq_tx_set_final_right(seq, seq_tx_get_final_left(seq, 0)+1);
 		}
 
-		if (check_single_seq(seq)==0) {
+		if (seq_single_check(seq)==0) {
 			if (seq_tx_get_final_right(seq, 0) <= seq_tx_get_start(seq)) {
 				seq_tx_set_final_right(seq, seq_tx_get_start(seq)+1);
 			}
@@ -3312,10 +3312,10 @@
 	}
 }
 
-void fix_single_seq(Sequence *seq)
+void seq_single_fix(Sequence *seq)
 {
 	int left, start, offset;
-	if (!check_single_seq(seq))
+	if (!seq_single_check(seq))
 		return;
 
 	/* make sure the image is always at the start since there is only one,

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2009-12-15 11:27:46 UTC (rev 25401)
@@ -525,7 +525,7 @@
 	char col[3], background_col[3], is_single_image;
 
 	/* we need to know if this is a single image/color or not for drawing */
-	is_single_image = (char)check_single_seq(seq);
+	is_single_image = (char)seq_single_check(seq);
 	
 	/* body */
 	if(seq->startstill) x1= seq->start;

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-15 11:27:46 UTC (rev 25401)
@@ -2652,10 +2652,25 @@
 
 		// XXX - should be a generic function
 		for(iseq= scene->ed->seqbasep->first; iseq; iseq= iseq->next) {
-			if((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq)))
+			if((iseq->type & SEQ_EFFECT) && (seq_is_parent(iseq, active_seq) || seq_is_parent(iseq, seq))) {
 				calc_sequence(iseq);
+			}
 		}
 
+		/* do this in a new loop since both effects need to be calculated first */
+		for(iseq= scene->ed->seqbasep->first; iseq; iseq= iseq->next) {
+			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);
+				}
+			}
+		}
+
+
+
+		sort_seq(scene);
+
 		WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 		return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_intern.h	2009-12-15 11:27:46 UTC (rev 25401)
@@ -54,7 +54,7 @@
 
 /* sequencer_edit.c */
 struct View2D;
-int check_single_seq(struct Sequence *seq);
+int seq_single_check(struct Sequence *seq);
 int seq_tx_get_final_left(struct Sequence *seq, int metaclip);
 int seq_tx_get_final_right(struct Sequence *seq, int metaclip);
 void seq_rectf(struct Sequence *seq, struct rctf *rectf);

Modified: trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c	2009-12-15 11:27:46 UTC (rev 25401)
@@ -269,7 +269,7 @@
 
 static void sequencer_main_area_draw(const bContext *C, ARegion *ar)
 {
-	ScrArea *sa= CTX_wm_area(C);
+//	ScrArea *sa= CTX_wm_area(C);
 	
 	/* NLE - strip editing timeline interface */
 	draw_timeline_seq(C, ar);

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-12-15 11:27:46 UTC (rev 25401)
@@ -2390,12 +2390,12 @@
 		case SEQ_LEFTSEL: /* no vertical transform  */
 			seq_tx_set_final_left(seq, new_frame);
 			seq_tx_handle_xlimits(seq, tdsq->flag&SEQ_LEFTSEL, tdsq->flag&SEQ_RIGHTSEL);
-			fix_single_seq(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */
+			seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */
 			break;
 		case SEQ_RIGHTSEL: /* no vertical transform  */
 			seq_tx_set_final_right(seq, new_frame);
 			seq_tx_handle_xlimits(seq, tdsq->flag&SEQ_LEFTSEL, tdsq->flag&SEQ_RIGHTSEL);
-			fix_single_seq(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */
+			seq_single_fix(seq); /* todo - move this into aftertrans update? - old seq tx needed it anyway */
 			break;
 		}
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2009-12-15 10:46:19 UTC (rev 25400)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c	2009-12-15 11:27:46 UTC (rev 25401)
@@ -56,8 +56,8 @@
 
 static void rna_SequenceEditor_sequences_all_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
-	Scene *sce= (Scene*)ptr->id.data;
-	Editing *ed= seq_give_editing(sce, FALSE);
+	Scene *scene= (Scene*)ptr->id.data;
+	Editing *ed= seq_give_editing(scene, FALSE);
 
 	meta_tmp_ref(NULL, ed->seqbase.first);
 
@@ -88,34 +88,55 @@
 	iter->valid= (internal->link != NULL);
 }
 
-static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
+/* internal use */
+static void rna_Sequence_frame_change_update(Scene *scene, Sequence *seq)
 {
-	Sequence *seq= (Sequence*)ptr->data;
-	Scene *sce= (Scene*)ptr->id.data;
-	Editing *ed= seq_give_editing(sce, FALSE);
-	
-	seq->start= value;
+	Editing *ed= seq_give_editing(scene, FALSE);
+
 	calc_sequence_disp(seq);
-	
+
 	if( seq_test_overlap(ed->seqbasep, seq) ) {
 		shuffle_seq(ed->seqbasep, seq);
 	}
-	sort_seq(sce);
+	sort_seq(scene);
 }
 
+static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
+{
+	Sequence *seq= (Sequence*)ptr->data;
+	Scene *scene= (Scene*)ptr->id.data;
+	
+	seq->start= value;
+	rna_Sequence_frame_change_update(scene, seq);
+}
+
+static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value)
+{
+	Sequence *seq= (Sequence*)ptr->data;
+	Scene *scene= (Scene*)ptr->id.data;
+
+	seq_tx_set_final_left(seq, value);
+	seq_single_fix(seq);
+	rna_Sequence_frame_change_update(scene, seq);
+}
+
+static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value)
+{
+	Sequence *seq= (Sequence*)ptr->data;
+	Scene *scene= (Scene*)ptr->id.data;
+
+	seq_tx_set_final_right(seq, value);
+	seq_single_fix(seq);
+	rna_Sequence_frame_change_update(scene, seq);
+}
+
 static void rna_Sequence_length_set(PointerRNA *ptr, int value)
 {
 	Sequence *seq= (Sequence*)ptr->data;
-	Scene *sce= (Scene*)ptr->id.data;
-	Editing *ed= seq_give_editing(sce, FALSE);
+	Scene *scene= (Scene*)ptr->id.data;
 	
 	seq_tx_set_final_right(seq, seq->start+value);
-	calc_sequence_disp(seq);
-	
-	if( seq_test_overlap(ed->seqbasep, seq) ) {
-		shuffle_seq(ed->seqbasep, seq);
-	}
-	sort_seq(sce);
+	rna_Sequence_frame_change_update(scene, seq);
 }
 
 static int rna_Sequence_length_get(PointerRNA *ptr)
@@ -127,15 +148,15 @@
 static void rna_Sequence_channel_set(PointerRNA *ptr, int value)
 {
 	Sequence *seq= (Sequence*)ptr->data;
-	Scene *sce= (Scene*)ptr->id.data;
-	Editing *ed= seq_give_editing(sce, FALSE);
+	Scene *scene= (Scene*)ptr->id.data;
+	Editing *ed= seq_give_editing(scene, FALSE);
 	
 	seq->machine= value;
 	
 	if( seq_test_overlap(ed->seqbasep, seq) ) {
 		shuffle_seq(ed->seqbasep, seq);
 	}
-	sort_seq(sce);
+	sort_seq(scene);
 }
 
 /* properties that need to allocate structs */
@@ -212,10 +233,10 @@
 
 static void rna_Sequence_name_set(PointerRNA *ptr, const char *value)
 {
-	Scene *sce= (Scene*)ptr->id.data;
+	Scene *scene= (Scene*)ptr->id.data;
 	Sequence *seq= (Sequence*)ptr->data;
 	BLI_strncpy(seq->name+2, value, sizeof(seq->name)-2);
-	seqUniqueName(&sce->ed->seqbase, seq);
+	seqUniqueName(&scene->ed->seqbase, seq);
 }
 
 static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr)
@@ -573,6 +594,18 @@
 	RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_start_frame_set",NULL); // overlap tests and calc_seq_disp

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list