[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40770] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: Fix #28780: Undo while painting image sequences issue
Sergey Sharybin
g.ulairi at gmail.com
Mon Oct 3 13:04:05 CEST 2011
Revision: 40770
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40770
Author: nazgul
Date: 2011-10-03 11:04:05 +0000 (Mon, 03 Oct 2011)
Log Message:
-----------
Fix #28780: Undo while painting image sequences issue
- Store imbuf file path in UndoImageTile structure, so imbuf can be verified
before applying titles on it.
- If current image's imbuf file path isn't equal to file path stored in
undo block, search for imbuf in ima->ibufs.
Probably it can be optimized, but storing all settings which defines
needed imbuf (image source type, offset, image file name, current
scene frame and so messes up undo code and requires deeper changes
which probably better not to start on bcon4).
Modified Paths:
--------------
trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2011-10-03 08:01:07 UTC (rev 40769)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2011-10-03 11:04:05 UTC (rev 40770)
@@ -356,6 +356,7 @@
struct UndoImageTile *next, *prev;
char idname[MAX_ID_NAME]; /* name instead of pointer*/
+ char ibufname[IB_FILENAME_SIZE];
void *rect;
int x, y;
@@ -389,7 +390,7 @@
int allocsize;
for(tile=lb->first; tile; tile=tile->next)
- if(tile->x == x_tile && tile->y == y_tile && strcmp(tile->idname, ima->id.name)==0)
+ if(tile->x == x_tile && tile->y == y_tile && strcmp(tile->idname, ima->id.name)==0 && strcmp(tile->ibufname, ibuf->name)==0)
return tile->rect;
if (*tmpibuf==NULL)
@@ -404,6 +405,8 @@
allocsize *= (ibuf->rect_float)? sizeof(float): sizeof(char);
tile->rect= MEM_mapallocN(allocsize, "UndeImageTile.rect");
+ strcpy(tile->ibufname, ibuf->name);
+
undo_copy_tile(tile, *tmpibuf, ibuf, 0);
undo_paint_push_count_alloc(UNDO_PAINT_IMAGE, allocsize);
@@ -433,6 +436,21 @@
ibuf= BKE_image_get_ibuf(ima, NULL);
+ if(ima && strcmp(tile->ibufname, ibuf->name)!=0) {
+ /* current ImBuf filename was changed, probably current frame
+ was changed when paiting on image sequence, rather than storing
+ full image user (which isn't so obvious, btw) try to find ImBuf with
+ matched file name in list of already loaded images */
+
+ ibuf= ima->ibufs.first;
+ while(ibuf) {
+ if(strcmp(tile->ibufname, ibuf->name)==0)
+ break;
+
+ ibuf= ibuf->next;
+ }
+ }
+
if (!ima || !ibuf || !(ibuf->rect || ibuf->rect_float))
continue;
More information about the Bf-blender-cvs
mailing list