[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