[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35455] trunk/blender/source/blender: Bugfix #26424

Ton Roosendaal ton at blender.org
Thu Mar 10 18:34:27 CET 2011


Revision: 35455
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35455
Author:   ton
Date:     2011-03-10 17:34:27 +0000 (Thu, 10 Mar 2011)
Log Message:
-----------
Bugfix #26424

More problems with Undo and Render Slots (Image editor)

- Undo storage for operator is now back, but only when new
  buffers were added (not when viewing existing)

- A real bug: On undo/redo, the stored buffers were never
  retrieved, but always freed entirely.

Note however that when you undo back to a state before you
rendered (or added slots), the render buffers that didn't
exist back then also get freed. A redo doesn't bring it back.

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_image/image_ops.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-03-10 16:36:16 UTC (rev 35454)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-03-10 17:34:27 UTC (rev 35455)
@@ -1200,7 +1200,7 @@
 	OldNew *entry= fd->imamap->entries;
 	Image *ima= oldmain->image.first;
 	Scene *sce= oldmain->scene.first;
-	int i, a;
+	int i;
 	
 	/* used entries were restored, so we put them to zero */
 	for (i=0; i<fd->imamap->nentries; i++, entry++) {
@@ -1220,10 +1220,10 @@
 				ima->gputexture= NULL;
 			}
 		}
+		for(i=0; i<IMA_MAX_RENDER_SLOT; i++)
+			ima->renders[i]= newimaadr(fd, ima->renders[i]);
 
 		ima->gputexture= newimaadr(fd, ima->gputexture);
-		for(a=0; a<IMA_MAX_RENDER_SLOT; a++)
-			ima->renders[a]= newimaadr(fd, ima->renders[a]);
 	}
 	for(; sce; sce= sce->id.next) {
 		if(sce->nodetree) {
@@ -2773,9 +2773,19 @@
 	ima->anim= NULL;
 	ima->rr= NULL;
 	ima->repbind= NULL;
-	memset(ima->renders, 0, sizeof(ima->renders));
-	ima->last_render_slot= ima->render_slot;
 	
+	/* undo system, try to restore render buffers */
+	if(fd->imamap) {
+		int a;
+		
+		for(a=0; a<IMA_MAX_RENDER_SLOT; a++)
+			ima->renders[a]= newimaadr(fd, ima->renders[a]);
+	}
+	else {
+		memset(ima->renders, 0, sizeof(ima->renders));
+		ima->last_render_slot= ima->render_slot;
+	}
+	
 	ima->packedfile = direct_link_packedfile(fd, ima->packedfile);
 	ima->preview = direct_link_preview_image(fd, ima->preview);
 	ima->ok= 1;

Modified: trunk/blender/source/blender/editors/space_image/image_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_ops.c	2011-03-10 16:36:16 UTC (rev 35454)
+++ trunk/blender/source/blender/editors/space_image/image_ops.c	2011-03-10 17:34:27 UTC (rev 35455)
@@ -2133,6 +2133,10 @@
 	
 	WM_event_add_notifier(C, NC_IMAGE|ND_DRAW, NULL);
 
+	/* no undo push for browsing existing */
+	if(ima->renders[ima->render_slot])
+		return OPERATOR_CANCELLED;
+	
 	return OPERATOR_FINISHED;
 }
 
@@ -2146,7 +2150,8 @@
 	ot->exec= cycle_render_slot_exec;
 	ot->poll= cycle_render_slot_poll;
 
-	/* no registry or undo flags, this is a UI option */
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 
 	RNA_def_boolean(ot->srna, "reverse", 0, "Cycle in Reverse", "");
 }




More information about the Bf-blender-cvs mailing list