[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28002] trunk/blender/source/blender: Bugfixes for Grease Pencil and the Image Editor (includes fix for #20921):

Joshua Leung aligorith at gmail.com
Mon Apr 5 08:52:28 CEST 2010


Revision: 28002
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28002
Author:   aligorith
Date:     2010-04-05 08:52:27 +0200 (Mon, 05 Apr 2010)

Log Message:
-----------
Bugfixes for Grease Pencil and the Image Editor (includes fix for #20921):

* Fixed crash with when/after undoing Grease Pencil sketches in the Image Editor. To get this working, I've had to sacrifice the backwards-compat loading for old .blend files from 2.49 which were using the same pointer as the new data (local data vs datablock data). If anyone has any ingenious hacks to fix this, go ahead, but otherwise, some caution is advised here... 

* Grease Pencil block used for Image Editor instances can now be changed

* Enabled proper active polls on the advanced 3D-view projection methods for drawing. These are not valid in views other than the 3D-View, and so should not be shown as available for use elsewhere (though may still be shown just so that users know what mode an 'imported' datablock may be using).

* Enabled proper updates for Grease Pencil editing in the Image Editor. Was missing notifiers for this stuff.

* When drawing in the Image Editor with no image active, the system now (quietly) switches to using screen-space 'view' vs 'cursor' space for the strokes, since the previous behaviour was confusing with strokes disappearing after drawing them. IMO this is a much better option than the confusion that occurred before, even though it does change the user's settings under their feet!

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c
    trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-04-05 06:45:44 UTC (rev 28001)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-04-05 06:52:27 UTC (rev 28002)
@@ -4610,6 +4610,11 @@
 						SpaceImage *sima= (SpaceImage *)sl;
 
 						sima->image= newlibadr_us(fd, sc->id.lib, sima->image);
+						
+						/* NOTE: pre-2.5, this was local data not lib data, but now we need this as lib data
+						 * so fingers crossed this works fine!
+						 */
+						sima->gpd= newlibadr_us(fd, sc->id.lib, sima->gpd);
 					}
 					else if(sl->spacetype==SPACE_NLA){
 						SpaceNla *snla= (SpaceNla *)sl;
@@ -4824,6 +4829,11 @@
 					SpaceImage *sima= (SpaceImage *)sl;
 
 					sima->image= restore_pointer_by_name(newmain, (ID *)sima->image, 1);
+					
+					/* NOTE: pre-2.5, this was local data not lib data, but now we need this as lib data
+					 * so assume that here we're doing for undo only...
+					 */
+					sima->gpd= restore_pointer_by_name(newmain, (ID *)sima->gpd, 1);
 				}
 				else if(sl->spacetype==SPACE_NLA){
 					SpaceNla *snla= (SpaceNla *)sl;
@@ -5086,13 +5096,18 @@
 				SpaceImage *sima= (SpaceImage *)sl;
 				
 				sima->cumap= newdataadr(fd, sima->cumap);
-				sima->gpd= newdataadr(fd, sima->gpd);
-				if (sima->gpd)
-					direct_link_gpencil(fd, sima->gpd);
 				if(sima->cumap)
 					direct_link_curvemapping(fd, sima->cumap);
+				
 				sima->iuser.scene= NULL;
 				sima->iuser.ok= 1;
+				
+				/* WARNING: gpencil data is no longer stored directly in sima after 2.5 
+				 * so sacrifice a few old files for now to avoid crashes with new files!
+				 */
+				//sima->gpd= newdataadr(fd, sima->gpd);
+				//if (sima->gpd)
+				//	direct_link_gpencil(fd, sima->gpd);
 			}
 			else if(sl->spacetype==SPACE_NODE) {
 				SpaceNode *snode= (SpaceNode *)sl;

Modified: trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c	2010-04-05 06:45:44 UTC (rev 28001)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c	2010-04-05 06:52:27 UTC (rev 28002)
@@ -227,6 +227,7 @@
 	PointerRNA gpd_ptr;
 	bGPDlayer *gpl;
 	uiLayout *col, *row;
+	short v3d_stroke_opts_on = 0;
 	
 	/* make new PointerRNA for Grease Pencil block */
 	RNA_id_pointer_create((ID *)gpd, &gpd_ptr);
@@ -255,17 +256,24 @@
 		/* label */
 		uiItemL(col, "Drawing Settings:", 0);
 		
-		/* 'stick to view' option */
+		/* check whether advanced 3D-View drawing space options can be used */
+		if (CTX_wm_view3d(C)) {
+			if (gpd->flag & (GP_DATA_DEPTH_STROKE|GP_DATA_DEPTH_VIEW))
+				v3d_stroke_opts_on = 1;
+		}
+		
+		/* drawing space options */
 		row= uiLayoutRow(col, 1);
-		uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "VIEW", NULL, 0);
-		uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "CURSOR", NULL, 0);
+			uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "VIEW", NULL, 0);
+			uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "CURSOR", NULL, 0);
 		row= uiLayoutRow(col, 1);
-		uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, 0);
-		uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, 0);
+			uiLayoutSetActive(row, v3d_stroke_opts_on);
+			uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, 0);
+			uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, 0);
 		
 		row= uiLayoutRow(col, 0);
-		uiLayoutSetActive(row, (gpd->flag & (GP_DATA_DEPTH_STROKE|GP_DATA_DEPTH_VIEW)) ? 1:0);
-		uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, 0);
+			uiLayoutSetActive(row, v3d_stroke_opts_on);
+			uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, 0);
 }	
 
 

Modified: trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_paint.c	2010-04-05 06:45:44 UTC (rev 28001)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_paint.c	2010-04-05 06:52:27 UTC (rev 28002)
@@ -1096,7 +1096,20 @@
 #endif
 			case SPACE_IMAGE:
 			{
-				p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE;
+				SpaceImage *sima= (SpaceImage *)p->sa->spacedata.first;
+				
+				/* only set these flags if the image editor doesn't have an image active,
+				 * otherwise user will be confused by strokes not appearing after they're drawn
+				 *
+				 * Admittedly, this is a bit hacky, but it works much nicer from an ergonomic standpoint!
+				 */
+				if ELEM(NULL, sima, sima->image) {
+					/* make strokes be drawn in screen space */
+					p->gpd->sbuffer_sflag &= ~GP_STROKE_2DSPACE;
+					p->gpd->flag &= ~GP_DATA_VIEWALIGN;
+				}	
+				else
+					p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE;
 			}
 				break;
 		}

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c	2010-04-05 06:45:44 UTC (rev 28001)
+++ trunk/blender/source/blender/editors/space_image/space_image.c	2010-04-05 06:52:27 UTC (rev 28002)
@@ -781,7 +781,10 @@
 {
 	/* context changes */
 	switch(wmn->category) {
-		/* nothing yet */
+		case NC_SCREEN:
+			if (wmn->data==ND_GPENCIL)
+				ED_region_tag_redraw(ar);
+		break;
 	}
 }
 
@@ -807,6 +810,10 @@
 {
 	/* context changes */
 	switch(wmn->category) {
+		case NC_SCREEN:
+			if (wmn->data==ND_GPENCIL)
+				ED_region_tag_redraw(ar);
+			break;
 		case NC_BRUSH:
 			if(wmn->action==NA_EDITED)
 				ED_region_tag_redraw(ar);

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2010-04-05 06:45:44 UTC (rev 28001)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2010-04-05 06:52:27 UTC (rev 28002)
@@ -1263,7 +1263,8 @@
 	/* grease pencil */
 	prop= RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "gpd");
-	RNA_def_property_struct_type(prop, "UnknownType");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_struct_type(prop, "GreasePencil");
 	RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for this space");
 
 	prop= RNA_def_property(srna, "use_grease_pencil", PROP_BOOLEAN, PROP_NONE);





More information about the Bf-blender-cvs mailing list