[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25212] trunk/blender/source/blender: Sequencer:

Brecht Van Lommel brecht at blender.org
Tue Dec 8 14:57:53 CET 2009


Revision: 25212
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25212
Author:   blendix
Date:     2009-12-08 14:57:51 +0100 (Tue, 08 Dec 2009)

Log Message:
-----------
Sequencer:
* Sound strips now respect metastrips for muting. That means they
  are muted if the metastrip is muted, and don't play when located
  outside of the current metastrip.
* Operators now use notifiers instead of redraw tagging, added a
  separate notifier for selection as well, but that is not used to
  do less redraws yet.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_sequence.h
    trunk/blender/source/blender/blenkernel/intern/sequence.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_select.c
    trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c
    trunk/blender/source/blender/makesrna/intern/rna_sequence.c
    trunk/blender/source/blender/windowmanager/WM_types.h

Modified: trunk/blender/source/blender/blenkernel/BKE_sequence.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_sequence.h	2009-12-08 13:02:03 UTC (rev 25211)
+++ trunk/blender/source/blender/blenkernel/BKE_sequence.h	2009-12-08 13:57:51 UTC (rev 25212)
@@ -186,6 +186,7 @@
 void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
 
 void seq_update_sound(struct Sequence *seq);
+void seq_update_muting(struct Editing *ed);
 
 void clear_scene_in_allseqs(struct Scene *sce);
 

Modified: trunk/blender/source/blender/blenkernel/intern/sequence.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequence.c	2009-12-08 13:02:03 UTC (rev 25211)
+++ trunk/blender/source/blender/blenkernel/intern/sequence.c	2009-12-08 13:57:51 UTC (rev 25212)
@@ -3477,19 +3477,58 @@
 	return offset? 0:1;
 }
 
-
-void seq_update_sound(struct Sequence *seq)
+void seq_update_sound(Sequence *seq)
 {
-	if(seq->type == SEQ_SOUND)
+	if(seq->type == SEQ_SOUND && seq->sound_handle)
 	{
 		seq->sound_handle->startframe = seq->startdisp;
 		seq->sound_handle->endframe = seq->enddisp;
 		seq->sound_handle->frameskip = seq->startofs + seq->anim_startofs;
-		seq->sound_handle->mute = seq->flag & SEQ_MUTE ? 1 : 0;
 		seq->sound_handle->changed = -1;
+		/* mute is set in seq_update_muting_recursive */
 	}
 }
 
+static void seq_update_muting_recursive(ListBase *seqbasep, Sequence *metaseq, int mute)
+{
+	Sequence *seq;
+	int seqmute;
+
+	/* for sound we go over full meta tree to update muted state,
+	   since sound is played outside of evaluating the imbufs, */
+	for(seq=seqbasep->first; seq; seq=seq->next) {
+		seqmute= (mute || (seq->flag & SEQ_MUTE));
+
+		if(seq->type == SEQ_META) {
+			/* if this is the current meta sequence, unmute because
+			   all sequences above this were set to mute */
+			if(seq == metaseq)
+				seqmute= 0;
+
+			seq_update_muting_recursive(&seq->seqbase, metaseq, seqmute);
+		}
+		else if(seq->type == SEQ_SOUND) {
+			if(seq->sound_handle && seqmute != seq->sound_handle->mute) {
+				seq->sound_handle->mute = seqmute;
+				seq->sound_handle->changed = -1;
+			}
+		}
+	}
+}
+
+void seq_update_muting(Editing *ed)
+{
+	if(ed) {
+		/* mute all sounds up to current metastack list */
+		MetaStack *ms= ed->metastack.last;
+
+		if(ms)
+			seq_update_muting_recursive(&ed->seqbase, ms->parseq, 1);
+		else
+			seq_update_muting_recursive(&ed->seqbase, NULL, 0);
+	}
+}
+
 Sequence *active_seq_get(Scene *scene)
 {
 	Editing *ed= seq_give_editing(scene, FALSE);

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-12-08 13:02:03 UTC (rev 25211)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-12-08 13:57:51 UTC (rev 25212)
@@ -4234,6 +4234,9 @@
 				seq->anim= 0;
 			}
 			SEQ_END
+
+			if(sce->ed)
+				seq_update_muting(sce->ed);
 			
 			if(sce->nodetree) {
 				lib_link_ntree(fd, &sce->id, sce->nodetree);

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c	2009-12-08 13:02:03 UTC (rev 25211)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_add.c	2009-12-08 13:57:51 UTC (rev 25212)
@@ -218,7 +218,7 @@
 		seq->flag |= SELECT;
 	}
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -297,8 +297,9 @@
 	}
 
 	sort_seq(scene);
+	seq_update_muting(ed);
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -425,7 +426,7 @@
 	/* last active name */
 	strncpy(ed->act_imagedir, strip->dir, FILE_MAXDIR-1);
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -557,7 +558,8 @@
 		seq->flag |= SELECT;
 	}
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
 	return OPERATOR_FINISHED;
 }
 

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-08 13:02:03 UTC (rev 25211)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-12-08 13:57:51 UTC (rev 25212)
@@ -1399,7 +1399,7 @@
 	/* as last: */
 	sort_seq(scene);
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1451,21 +1451,18 @@
 	for(seq= ed->seqbasep->first; seq; seq= seq->next) {
 		if ((seq->flag & SEQ_LOCK)==0) {
 			if(selected){ /* mute unselected */
-				if (seq->flag & SELECT) {
+				if(seq->flag & SELECT)
 					seq->flag |= SEQ_MUTE;
-					seq_update_sound(seq);
-				}
 			}
 			else {
-				if ((seq->flag & SELECT)==0) {
+				if((seq->flag & SELECT)==0)
 					seq->flag |= SEQ_MUTE;
-					seq_update_sound(seq);
-				}
 			}
 		}
 	}
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	seq_update_muting(ed);
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1505,21 +1502,18 @@
 	for(seq= ed->seqbasep->first; seq; seq= seq->next) {
 		if ((seq->flag & SEQ_LOCK)==0) {
 			if(selected){ /* unmute unselected */
-				if (seq->flag & SELECT) {
+				if(seq->flag & SELECT)
 					seq->flag &= ~SEQ_MUTE;
-					seq_update_sound(seq);
-				}
 			}
 			else {
-				if ((seq->flag & SELECT)==0) {
+				if((seq->flag & SELECT)==0)
 					seq->flag &= ~SEQ_MUTE;
-					seq_update_sound(seq);
-				}
 			}
 		}
 	}
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	seq_update_muting(ed);
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1559,7 +1553,7 @@
 		}
 	}
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -1596,7 +1590,7 @@
 		}
 	}
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -1633,7 +1627,7 @@
 		}
 	}
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -1665,7 +1659,7 @@
 
 	free_imbuf_seq(scene, &ed->seqbase, FALSE);
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -1741,9 +1735,7 @@
 		sort_seq(scene);
 	}
 
-	if (changed) {
-		ED_area_tag_redraw(CTX_wm_area(C));
-	}
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1803,7 +1795,7 @@
 	recurs_dupli_seq(scene, ed->seqbasep, &new);
 	addlisttolist(ed->seqbasep, &new);
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -1894,8 +1886,7 @@
 		ms= ms->prev;
 	}
 
-	//ED_area_tag_redraw(CTX_wm_area(C));
-	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, NULL); /* redraw other sequencer views */
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -1986,7 +1977,7 @@
 	/* as last: */
 	sort_seq(scene);
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
 
 	return OPERATOR_FINISHED;
 }
@@ -2063,7 +2054,9 @@
 
 	}
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	seq_update_muting(ed);
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
 	return OPERATOR_FINISHED;
 }
 
@@ -2164,7 +2157,9 @@
 
 	if( seq_test_overlap(ed->seqbasep, seqm) ) shuffle_seq(ed->seqbasep, seqm);
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	seq_update_muting(ed);
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
 	return OPERATOR_FINISHED;
 }
 
@@ -2233,8 +2228,10 @@
 	SEQ_END;
 
 	sort_seq(scene);
+	seq_update_muting(ed);
 
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
 	return OPERATOR_FINISHED;
 }
 
@@ -2459,16 +2456,16 @@
 	return change;
 }
 
-/* select less operator */
+/* move frame to next edit point operator */
 static int sequencer_next_edit_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
 	
-	if (next_prev_edit_internal(scene, SEQ_SIDE_RIGHT)) {
-		ED_area_tag_redraw(CTX_wm_area(C));
-		WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
-	}
-	
+	if(!next_prev_edit_internal(scene, SEQ_SIDE_RIGHT))
+		return OPERATOR_CANCELLED;
+
+	WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
+
 	return OPERATOR_FINISHED;
 }
 
@@ -2494,9 +2491,10 @@
 {
 	Scene *scene= CTX_data_scene(C);
 	
-	if (next_prev_edit_internal(scene, SEQ_SIDE_LEFT)) {
-		ED_area_tag_redraw(CTX_wm_area(C));
-	}
+	if(!next_prev_edit_internal(scene, SEQ_SIDE_LEFT))
+		return OPERATOR_CANCELLED;
+
+	WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -2578,10 +2576,13 @@
 				swap_sequence(active_seq, seq);
 				break;
 		}
-		ED_area_tag_redraw(CTX_wm_area(C));
+
+		WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
+		return OPERATOR_FINISHED;
 	}
 
-	return OPERATOR_FINISHED;
+	return OPERATOR_CANCELLED;
 }
 
 static int sequencer_swap_right_exec(bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_select.c	2009-12-08 13:02:03 UTC (rev 25211)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_select.c	2009-12-08 13:57:51 UTC (rev 25212)
@@ -256,7 +256,8 @@
 			seq->flag |= SELECT;
 		}
 	}
-	ED_area_tag_redraw(CTX_wm_area(C));
+
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -297,7 +298,8 @@
 			seq->flag |= SELECT;
 		}
 	}
-	ED_area_tag_redraw(CTX_wm_area(C));
+
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene);
 	
 	return OPERATOR_FINISHED;
 }
@@ -508,7 +510,8 @@
 	}
 #endif
 	
-	ED_area_tag_redraw(CTX_wm_area(C));
+	WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER_SELECT, scene);
+
 	/* allowing tweaks */
 	return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH;
 }
@@ -594,9 +597,10 @@
 {
 	Scene *scene= CTX_data_scene(C);
 	

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list