[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22890] branches/blender2.5/blender/source /blender/editors: Grease Pencil: Basic Support for Image Editor Again

Joshua Leung aligorith at gmail.com
Sun Aug 30 15:32:08 CEST 2009


Revision: 22890
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22890
Author:   aligorith
Date:     2009-08-30 15:32:08 +0200 (Sun, 30 Aug 2009)

Log Message:
-----------
Grease Pencil: Basic Support for Image Editor Again

* Grease Pencil works again from Image Editor now. For now, the GPencil datablock is linked to the Image Editor space, but this can be changed if need be.

* Made Grease Pencil hotkeys into a separate Grease Pencil keymap, which can get included automagically like for frames/ui/v2d/etc. by supplying ED_KEYMAP_GPENCIL as part of st->keymapflag

* Temporarily restored the nasty hack to make View2D-aligned sketches in Image Editor to use OpenGL lines only. I still dunno why this doesn't work normally. 
(Probably related is that strokes are not visible when there's no image visible atm).

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/gpencil/drawgpencil.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_edit.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_ops.c
    branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_paint.c
    branches/blender2.5/blender/source/blender/editors/include/ED_gpencil.h
    branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c
    branches/blender2.5/blender/source/blender/editors/space_image/image_intern.h
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/gpencil/drawgpencil.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/gpencil/drawgpencil.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/gpencil/drawgpencil.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -83,6 +83,7 @@
 	GP_DRAWDATA_ONLY3D		= (1<<1),	/* only draw 3d-strokes */
 	GP_DRAWDATA_ONLYV2D		= (1<<2),	/* only draw 'canvas' strokes */
 	GP_DRAWDATA_ONLYI2D		= (1<<3),	/* only draw 'image' strokes */
+	GP_DRAWDATA_IEDITHACK	= (1<<4),	/* special hack for drawing strokes in Image Editor (weird coordinates) */
 };
 
 /* thickness above which we should use special drawing */
@@ -254,14 +255,12 @@
 /* draw a given stroke in 2d */
 static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness, short dflag, short sflag, 
 							short debug, int offsx, int offsy, int winx, int winy)
-{	
-	int spacetype= 0; // XXX make local gpencil state var? 
-	
+{
 	/* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, 'smooth' opengl lines look better
 	 * 	- 'smooth' opengl lines are also required if Image Editor 'image-based' stroke
 	 */
 	if ( (thickness < GP_DRAWTHICKNESS_SPECIAL) || 
-		 ((spacetype==SPACE_IMAGE) && (dflag & GP_DRAWDATA_ONLYV2D)) ) 
+		 ((dflag & GP_DRAWDATA_IEDITHACK) && (dflag & GP_DRAWDATA_ONLYV2D)) ) 
 	{
 		bGPDspoint *pt;
 		int i;
@@ -519,6 +518,9 @@
 {
 	bGPDlayer *gpl, *actlay=NULL;
 	
+	/* reset line drawing style (in case previous user didn't reset) */
+	setlinestyle(0);
+	
 	/* turn on smooth lines (i.e. anti-aliasing) */
 	glEnable(GL_LINE_SMOOTH);
 	
@@ -669,7 +671,7 @@
 			
 			wmOrtho2(ar->v2d.cur.xmin, ar->v2d.cur.xmax, ar->v2d.cur.ymin, ar->v2d.cur.ymax);
 			
-			dflag |= GP_DRAWDATA_ONLYV2D;
+			dflag |= GP_DRAWDATA_ONLYV2D|GP_DRAWDATA_IEDITHACK;
 		}
 			break;
 			
@@ -729,6 +731,11 @@
 	gpd= gpencil_data_get_active(C); // XXX
 	if (gpd == NULL) return;
 	
+	/* special hack for Image Editor */
+	// FIXME: the opengl poly-strokes don't draw at right thickness when done this way, so disabled
+	if (sa->spacetype == SPACE_IMAGE)
+		dflag |= GP_DRAWDATA_IEDITHACK;
+	
 	/* draw it! */
 	if (onlyv2d) dflag |= (GP_DRAWDATA_ONLYV2D|GP_DRAWDATA_NOSTATUS);
 	gp_draw_data(gpd, 0, 0, ar->winx, ar->winy, CFRA, dflag);

Modified: branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_edit.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_edit.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -125,6 +125,17 @@
 			}
 				break;
 				
+			case SPACE_IMAGE: /* Image/UV Editor */
+			{
+				SpaceImage *sima= (SpaceImage *)CTX_wm_space_data(C);
+				
+				/* for now, Grease Pencil data is associated with the space... */
+				// XXX our convention for everything else is to link to data though...
+				if (ptr) RNA_pointer_create((ID *)CTX_wm_screen(C), &RNA_SpaceImageEditor, sima, ptr);
+				return &sima->gpd;
+			}
+				break;
+				
 			default: /* unsupported space */
 				return NULL;
 		}

Modified: branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_ops.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_ops.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -45,14 +45,11 @@
 /* ****************************************** */
 /* Generic Editing Keymap */
 
-void gpencil_common_keymap(wmWindowManager *wm, ListBase *keymap)
+void ED_keymap_gpencil(wmWindowManager *wm)
 {
+	ListBase *keymap= WM_keymap_listbase(wm, "Grease Pencil", 0, 0);
 	wmKeymapItem *kmi;
 	
-	/* if no keymap provided, use default */
-	if (keymap == NULL)
-		keymap= WM_keymap_listbase(wm, "Grease Pencil Generic", 0, 0);
-	
 	/* Draw */
 		/* draw */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_draw", LEFTMOUSE, KM_PRESS, 0, DKEY);

Modified: branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_paint.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_paint.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/gpencil/gpencil_paint.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -828,6 +828,7 @@
 			}
 		}
 			break;	
+#endif
 		case SPACE_IMAGE:
 		{
 			SpaceImage *sima= curarea->spacedata.first;
@@ -836,18 +837,20 @@
 			p->sa= curarea;
 			p->ar= ar;
 			p->v2d= &ar->v2d;
-			p->ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
+			//p->ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
 			
+#if 0 // XXX disabled for now
 			/* check that gpencil data is allowed to be drawn */
 			if ((sima->flag & SI_DISPGP)==0) {
 				p->status= GP_STATUS_ERROR;
 				if (G.f & G_DEBUG)
 					printf("Error: In active view, Grease Pencil not shown \n");
-				return;
+				return p;
 			}
+#endif
 		}
 			break;
-#endif
+
 		/* unsupported views */
 		default:
 		{
@@ -998,14 +1001,12 @@
 				p->im2d_settings.offsy= (int)((p->sa->winy-p->im2d_settings.sizey)/2 + sseq->yof);
 			}
 				break;
+#endif
 			case SPACE_IMAGE:
 			{
-				/* check if any ibuf available */
-				if (p->ibuf)
-					p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE;
+				p->gpd->sbuffer_sflag |= GP_STROKE_2DSPACE;
 			}
 				break;
-#endif
 		}
 	}
 }

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_gpencil.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_gpencil.h	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_gpencil.h	2009-08-30 13:32:08 UTC (rev 22890)
@@ -62,8 +62,7 @@
 
 /* ----------- Grease Pencil Operators ----------------- */
 
-void gpencil_common_keymap(struct wmWindowManager *wm, ListBase *keymap);
-
+void ED_keymap_gpencil(struct wmWindowManager *wm);
 void ED_operatortypes_gpencil(void);
 
 /* ------------ Grease-Pencil Drawing API ------------------ */

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2009-08-30 13:32:08 UTC (rev 22890)
@@ -150,7 +150,7 @@
 #define ED_KEYMAP_MARKERS	4
 #define ED_KEYMAP_ANIMATION	8
 #define ED_KEYMAP_FRAMES	16
+#define ED_KEYMAP_GPENCIL	32
 
-
 #endif /* ED_SCREEN_H */
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/area.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/screen/area.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -797,6 +797,10 @@
 		ListBase *keymap= WM_keymap_listbase(wm, "Frames", 0, 0);
 		WM_event_add_keymap_handler(handlers, keymap);
 	}
+	if(flag & ED_KEYMAP_GPENCIL) {
+		ListBase *keymap= WM_keymap_listbase(wm, "Grease Pencil", 0, 0);
+		WM_event_add_keymap_handler(handlers, keymap);
+	}
 }
 
 

Modified: branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -86,6 +86,7 @@
 	ED_operatortypes_screen();
 	ED_operatortypes_anim();
 	ED_operatortypes_animchannels();
+	ED_operatortypes_gpencil();
 	ED_operatortypes_object();
 	ED_operatortypes_mesh();
 	ED_operatortypes_sculpt();
@@ -99,7 +100,6 @@
 	ED_operatortypes_fluid();
 	ED_operatortypes_metaball();
 	ED_operatortypes_boids();
-	ED_operatortypes_gpencil();
 	ED_operatortypes_sound();
 	
 	ui_view2d_operatortypes();
@@ -121,6 +121,7 @@
 	ED_keymap_screen(wm);
 	ED_keymap_anim(wm);
 	ED_keymap_animchannels(wm);
+	ED_keymap_gpencil(wm);
 	ED_keymap_object(wm);
 	ED_keymap_mesh(wm);
 	ED_keymap_uvedit(wm);

Modified: branches/blender2.5/blender/source/blender/editors/space_image/image_buttons.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/image_buttons.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/space_image/image_buttons.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -67,6 +67,7 @@
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 
+#include "ED_gpencil.h"
 #include "ED_image.h"
 #include "ED_mesh.h"
 #include "ED_space_api.h"
@@ -1438,6 +1439,12 @@
 	strcpy(pt->label, "Curves");
 	pt->draw= image_panel_curves;
 	BLI_addtail(&art->paneltypes, pt);
+	
+	pt= MEM_callocN(sizeof(PanelType), "spacetype image panel gpencil");
+	strcpy(pt->idname, "IMAGE_PT_gpencil");
+	strcpy(pt->label, "Grease Pencil");
+	pt->draw= gpencil_panel_standard;
+	BLI_addtail(&art->paneltypes, pt);
 }
 
 static int image_properties(bContext *C, wmOperator *op)

Modified: branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c	2009-08-30 11:37:29 UTC (rev 22889)
+++ branches/blender2.5/blender/source/blender/editors/space_image/image_draw.c	2009-08-30 13:32:08 UTC (rev 22890)
@@ -44,6 +44,7 @@
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 
+#include "BKE_context.h"
 #include "BKE_colortools.h"
 #include "BKE_global.h"
 #include "BKE_image.h"
@@ -53,6 +54,7 @@
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
 
+#include "ED_gpencil.h"
 #include "ED_image.h"
 #include "ED_screen.h"
 
@@ -525,22 +527,26 @@
 /* draw uv edit */
 
 /* draw grease pencil */
-
-static void draw_image_grease_pencil(SpaceImage *sima, ImBuf *ibuf)
+void draw_image_grease_pencil(bContext *C, short onlyv2d)
 {
-	/* XXX bring back */
-	/* draw grease-pencil ('image' strokes) */
-	if (sima->flag & SI_DISPGP)
-		; // XXX draw_gpencil_2dimage(sa, ibuf);
-

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list