[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47014] trunk/blender/source/blender: Animation playback: now all windows are update during playback, rather than

Brecht Van Lommel brechtvanlommel at pandora.be
Fri May 25 14:37:12 CEST 2012


Revision: 47014
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47014
Author:   blendix
Date:     2012-05-25 12:37:11 +0000 (Fri, 25 May 2012)
Log Message:
-----------
Animation playback: now all windows are update during playback, rather than
just the active window.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_screen.h
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
    trunk/blender/source/blender/editors/physics/physics_fluid.c
    trunk/blender/source/blender/editors/render/render_internal.c
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_clip/tracking_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/include/ED_screen.h	2012-05-25 12:37:11 UTC (rev 47014)
@@ -113,10 +113,11 @@
 struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa);
 
 /* anim */
-void    ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute);
+void    ED_update_for_newframe(struct Main *bmain, struct Scene *scene, int mute);
 
 void    ED_refresh_viewport_fps(struct bContext *C);
-int ED_screen_animation_play(struct bContext *C, int sync, int mode);
+int		ED_screen_animation_play(struct bContext *C, int sync, int mode);
+bScreen	*ED_screen_animation_playing(const struct bContext *C);
 
 /* screen keymaps */
 void    ED_operatortypes_screen(void);

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2012-05-25 12:37:11 UTC (rev 47014)
@@ -2023,7 +2023,7 @@
 		 * this part of the process before a threaded job is created */
 		
 		//scene->r.cfra = f;
-		//ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
+		//ED_update_for_newframe(CTX_data_main(C), scene, 1);
 		
 		/* ok, this doesn't work with drivers, but is way faster. 
 		 * let's use this for now and hope nobody wants to drive the time value... */

Modified: trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
===================================================================
--- trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c	2012-05-25 12:37:11 UTC (rev 47014)
@@ -285,7 +285,7 @@
 	/* Set frame to start point (also inits modifier data) */
 	frame = surface->start_frame;
 	scene->r.cfra = (int)frame;
-	ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1);
+	ED_update_for_newframe(CTX_data_main(C), scene, 1);
 
 	/* Init surface	*/
 	if (!dynamicPaint_createUVSurface(surface)) return 0;
@@ -303,7 +303,7 @@
 
 		/* calculate a frame */
 		scene->r.cfra = (int)frame;
-		ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1);
+		ED_update_for_newframe(CTX_data_main(C), scene, 1);
 		if (!dynamicPaint_calculateFrame(surface, scene, cObject, frame)) return 0;
 
 		/*

Modified: trunk/blender/source/blender/editors/physics/physics_fluid.c
===================================================================
--- trunk/blender/source/blender/editors/physics/physics_fluid.c	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/physics/physics_fluid.c	2012-05-25 12:37:11 UTC (rev 47014)
@@ -419,7 +419,7 @@
 		/* Modifying the global scene isn't nice, but we can do it in 
 		 * this part of the process before a threaded job is created */
 		scene->r.cfra = (int)eval_time;
-		ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
+		ED_update_for_newframe(CTX_data_main(C), scene, 1);
 		
 		/* now scene data should be current according to animation system, so we fill the channels */
 		
@@ -967,7 +967,7 @@
 
 	/* reset to original current frame */
 	scene->r.cfra = origFrame;
-	ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
+	ED_update_for_newframe(CTX_data_main(C), scene, 1);
 		
 	/* ******** init domain object's matrix ******** */
 	copy_m4_m4(domainMat, fsDomain->obmat);

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2012-05-25 12:37:11 UTC (rev 47014)
@@ -236,7 +236,7 @@
 	RE_SetReports(re, NULL);
 
 	// no redraw needed, we leave state as we entered it
-	ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
+	ED_update_for_newframe(mainp, scene, 1);
 
 	WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, scene);
 
@@ -408,7 +408,7 @@
 
 	/* else the frame will not update for the original value */
 	if (!(rj->scene->r.scemode & R_NO_FRAME_UPDATE))
-		ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1);
+		ED_update_for_newframe(G.main, rj->scene, 1);
 	
 	/* XXX above function sets all tags in nodes */
 	ntreeCompositClearTags(rj->scene->nodetree);
@@ -470,7 +470,6 @@
 	Main *mainp;
 	Scene *scene = CTX_data_scene(C);
 	SceneRenderLayer *srl = NULL;
-	bScreen *screen = CTX_wm_screen(C);
 	View3D *v3d = CTX_wm_view3d(C);
 	Render *re;
 	wmJob *steve;
@@ -507,7 +506,7 @@
 		mainp = CTX_data_main(C);
 
 	/* cancel animation playback */
-	if (screen->animtimer)
+	if (ED_screen_animation_playing(C))
 		ED_screen_animation_play(C, 0, 0);
 	
 	/* handle UI stuff */

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c	2012-05-25 12:37:11 UTC (rev 47014)
@@ -1506,7 +1506,7 @@
 	BKE_scene_set_background(bmain, scene);
 	
 	ED_render_engine_changed(bmain);
-	ED_update_for_newframe(bmain, scene, screen, 1);
+	ED_update_for_newframe(bmain, scene, 1);
 	
 	/* complete redraw */
 	WM_event_add_notifier(C, NC_WINDOW, NULL);
@@ -1750,10 +1750,12 @@
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win = CTX_wm_window(C);
 	Scene *scene = CTX_data_scene(C);
+	bScreen *stopscreen = ED_screen_animation_playing(C);
 	
-	if (screen->animtimer)
-		WM_event_remove_timer(wm, win, screen->animtimer);
-	screen->animtimer = NULL;
+	if (stopscreen) {
+		WM_event_remove_timer(wm, win, stopscreen->animtimer);
+		stopscreen->animtimer = NULL;
+	}
 	
 	if (enable) {
 		ScreenAnimData *sad = MEM_callocN(sizeof(ScreenAnimData), "ScreenAnimData");
@@ -1777,8 +1779,9 @@
 		screen->animtimer->customdata = sad;
 		
 	}
+
 	/* notifier catched by top header, for button */
-	WM_event_add_notifier(C, NC_SCREEN | ND_ANIMPLAY, screen);
+	WM_event_add_notifier(C, NC_SCREEN | ND_ANIMPLAY, NULL);
 }
 
 /* helper for screen_animation_play() - only to be used for TimeLine */
@@ -1821,8 +1824,12 @@
 
 /* results in fully updated anim system
  * screen can be NULL */
-void ED_update_for_newframe(Main *bmain, Scene *scene, bScreen *screen, int UNUSED(mute))
-{	
+void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute))
+{
+	wmWindowManager *wm = bmain->wm.first;
+	wmWindow *window;
+	int layers = 0;
+
 #ifdef DURIAN_CAMERA_SWITCH
 	void *camera = BKE_scene_camera_switch_find(scene);
 	if (camera && scene->camera != camera) {
@@ -1843,9 +1850,12 @@
 
 	ED_clip_update_frame(bmain, scene->r.cfra);
 
+	/* get layers from all windows */
+	for (window = wm->windows.first; window; window = window->next)
+		layers |= BKE_screen_visible_layers(window->screen, scene);
+
 	/* this function applies the changes too */
-	/* XXX future: do all windows */
-	BKE_scene_update_for_newframe(bmain, scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
+	BKE_scene_update_for_newframe(bmain, scene, layers); /* BKE_scene.h */
 	
 	//if ( (CFRA>1) && (!mute) && (scene->r.audio.flag & AUDIO_SCRUB)) 
 	//	audiostream_scrub( CFRA );

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2012-05-25 12:37:11 UTC (rev 47014)
@@ -2905,6 +2905,8 @@
 		Scene *scene = CTX_data_scene(C);
 		wmTimer *wt = screen->animtimer;
 		ScreenAnimData *sad = wt->customdata;
+		wmWindowManager *wm = CTX_wm_manager(C);
+		wmWindow *window;
 		ScrArea *sa;
 		int sync;
 		float time;
@@ -2985,22 +2987,24 @@
 			sound_seek_scene(bmain, scene);
 		
 		/* since we follow drawflags, we can't send notifier but tag regions ourselves */
-		ED_update_for_newframe(CTX_data_main(C), scene, screen, 1);
-		
-		for (sa = screen->areabase.first; sa; sa = sa->next) {
-			ARegion *ar;
-			for (ar = sa->regionbase.first; ar; ar = ar->next) {
-				if (ar == sad->ar)
-					ED_region_tag_redraw(ar);
-				else
-				if (match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
-					ED_region_tag_redraw(ar);
+		ED_update_for_newframe(CTX_data_main(C), scene, 1);
+
+		for (window = wm->windows.first; window; window = window->next) {
+			for (sa = window->screen->areabase.first; sa; sa = sa->next) {
+				ARegion *ar;
+				for (ar = sa->regionbase.first; ar; ar = ar->next) {
+					if (ar == sad->ar)
+						ED_region_tag_redraw(ar);
+					else
+					if (match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
+						ED_region_tag_redraw(ar);
+				}
+				
+				if (match_area_with_refresh(sa->spacetype, sad->refresh))
+					ED_area_tag_refresh(sa);
 			}
+		}
 			
-			if (match_area_with_refresh(sa->spacetype, sad->refresh))
-				ED_area_tag_refresh(sa);
-		}
-		
 		/* update frame rate info too 
 		 * NOTE: this may not be accurate enough, since we might need this after modifiers/etc. 
 		 * have been calculated instead of just before updates have been done?
@@ -3034,13 +3038,26 @@
 
 /* ****************** anim player, starts or ends timer ***************** */
 
+/* find window that owns the animation timer */
+bScreen *ED_screen_animation_playing(const bContext *C)
+{
+	wmWindowManager *wm = CTX_wm_manager(C);
+	wmWindow *window;
+
+	for (window = wm->windows.first; window; window = window->next)
+		if (window->screen->animtimer)
+			return window->screen;
+	
+	return NULL;
+}
+
 /* toggle operator */
 int ED_screen_animation_play(bContext *C, int sync, int mode)
 {
 	bScreen *screen = CTX_wm_screen(C);
 	Scene *scene = CTX_data_scene(C);
 
-	if (screen->animtimer) {
+	if (ED_screen_animation_playing(C)) {
 		/* stop playback now */
 		ED_screen_animation_timer(C, 0, 0, 0, 0);
 		sound_stop_scene(scene);
@@ -3097,9 +3114,9 @@
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list