[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18430] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Fri Jan 9 14:55:47 CET 2009


Revision: 18430
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18430
Author:   ton
Date:     2009-01-09 14:55:45 +0100 (Fri, 09 Jan 2009)

Log Message:
-----------
2.5

Vertex Paint back!

Added WM level "paint cursor" system, which manages a custom painting
cursor for tools or modes. 

- Activate it with WM_paint_cursor_activate(). That function wants two
  callbacks, a poll(C) to check whether there's a cursor in given context
  and ARegion, and a draw(C, x, y) which gets called when appropriate.
- While paintcursor is active, the WM handles necessary redrawing events
  for all regions, also to nicely clear the cursor on region exit.
- WM_paint_cursor_activate returns a handle, which you have to use to
  end the paint cursor. This handle also means you can register as many
  custom cursors as you want.

At the moment, vertex paint mode registers only a mousemove handler,
all other events are still normally handled. This is stuff for the 
future todo.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
    branches/blender2.5/blender/source/blender/windowmanager/wm.h

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-01-09 13:55:45 UTC (rev 18430)
@@ -3828,7 +3828,7 @@
 	
 	wm->operators.first= wm->operators.last= NULL;
 	wm->keymaps.first= wm->keymaps.last= NULL;
-	
+	wm->paintcursors.first= wm->paintcursors.last= NULL;
 	wm->queue.first= wm->queue.last= NULL;
 	wm->reports.first= wm->reports.last= NULL;
 	

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-01-09 13:55:45 UTC (rev 18430)
@@ -40,6 +40,7 @@
 struct EditFace;
 struct ImBuf;
 struct Scene;
+struct bContext;
 
 /* for derivedmesh drawing callbacks, for view3d_select, .... */
 typedef struct ViewContext {
@@ -60,6 +61,8 @@
 	int tot, pad;						/* allocation size of prev buffers */
 	unsigned int *vpaint_prev;			/* previous mesh colors */
 	struct MDeformVert *wpaint_prev;	/* previous vertex weights */
+	
+	void *paintcursor;					/* wm handle */
 } VPaint;
 
 /* Gvp.flag and Gwp.flag */
@@ -112,6 +115,9 @@
 #define MAXPICKBUF      10000
 short view3d_opengl_select(struct ViewContext *vc, unsigned int *buffer, unsigned int bufsize, rcti *input);
 
+/* modes */
+void ED_view3d_exit_paint_modes(struct bContext *C);
 
+
 #endif /* ED_VIEW3D_H */
 

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-01-09 13:55:45 UTC (rev 18430)
@@ -180,8 +180,8 @@
 	Base *tbase;
 	
 	/* activating a non-mesh, should end a couple of modes... */
-	//	if(base && base->object->type!=OB_MESH)
-	// XXX		exit_paint_modes();
+	if(base && base->object->type!=OB_MESH)
+		ED_view3d_exit_paint_modes(C);
 	
 	/* sets scene->basact */
 	BASACT= base;
@@ -235,19 +235,6 @@
 
 
 
-void exit_paint_modes(void)
-{
-#if 0
-	if(G.f & G_VERTEXPAINT) set_vpaint();
-	if(G.f & G_TEXTUREPAINT) set_texturepaint();
-	if(G.f & G_WEIGHTPAINT) set_wpaint();
-	if(G.f & G_SCULPTMODE) set_sculptmode();
-	if(G.f & G_PARTICLEEDIT) PE_set_particle_edit();
-
-	G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
-#endif
-}
-
 /* exported */
 void ED_object_base_init_from_view(Scene *scene, View3D *v3d, Base *base)
 {
@@ -284,7 +271,7 @@
 {
 	Object *ob;
 	
-	exit_paint_modes();
+//	ED_view3d_exit_paint_modes(C);
 
 // XXX	if (obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* freedata, and undo */
 	ob= add_object(scene, type);
@@ -362,7 +349,7 @@
 				}
 			}
 			
-			exit_paint_modes();
+//			ED_view3d_exit_paint_modes(C);
 
 			if(base->object->type==OB_LAMP) islamp= 1;
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/area.c	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/editors/screen/area.c	2009-01-09 13:55:45 UTC (rev 18430)
@@ -206,34 +206,32 @@
 	/* note; this sets state, so we can use wmOrtho and friends */
 	wmSubWindowSet(win, ar->swinid);
 	
-	if(ar->swinid) {
-		/* optional header info instead? */
-		if(ar->headerstr) {
-			float col[3];
-			UI_SetTheme(sa);
-			UI_GetThemeColor3fv(TH_HEADER, col);
-			glClearColor(col[0], col[1], col[2], 0.0);
-			glClear(GL_COLOR_BUFFER_BIT);
-			
-			UI_ThemeColor(TH_MENU_TEXT);
-			glRasterPos2i(20, 6);
-			BMF_DrawString(G.font, ar->headerstr);
-		}
-		else if(at->draw) {
-			UI_SetTheme(sa);
-			at->draw(C, ar);
-			UI_SetTheme(NULL);
-		}
+	/* optional header info instead? */
+	if(ar->headerstr) {
+		float col[3];
+		UI_SetTheme(sa);
+		UI_GetThemeColor3fv(TH_HEADER, col);
+		glClearColor(col[0], col[1], col[2], 0.0);
+		glClear(GL_COLOR_BUFFER_BIT);
 		
-		if(sa)
-			region_draw_emboss(ar);
-
-		uiFreeInactiveBlocks(C, &ar->uiblocks);
-		
-		/* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */
-		ED_region_pixelspace(ar);
+		UI_ThemeColor(TH_MENU_TEXT);
+		glRasterPos2i(20, 6);
+		BMF_DrawString(G.font, ar->headerstr);
 	}
+	else if(at->draw) {
+		UI_SetTheme(sa);
+		at->draw(C, ar);
+		UI_SetTheme(NULL);
+	}
 	
+	if(sa)
+		region_draw_emboss(ar);
+
+	uiFreeInactiveBlocks(C, &ar->uiblocks);
+	
+	/* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */
+	ED_region_pixelspace(ar);
+	
 	ar->do_draw= 0;
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2009-01-09 13:55:45 UTC (rev 18430)
@@ -1119,7 +1119,8 @@
 }
 
 
-/* called in wm_event_system.c. sets state var in screen */
+/* called in wm_event_system.c. sets state vars in screen, cursors */
+/* event type is mouse move */
 void ED_screen_set_subwinactive(wmWindow *win, wmEvent *event)
 {
 	if(win->screen) {

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c	2009-01-09 13:55:45 UTC (rev 18430)
@@ -136,6 +136,25 @@
 
 /* end XXX ************* */
 
+
+/* well... in this file a lot of view mode manipulation happens, so let's have it defined here */
+void ED_view3d_exit_paint_modes(bContext *C)
+{
+	if(G.f & G_VERTEXPAINT)
+		WM_operator_name_call(C, "VIEW3D_OT_vpaint_toggle", WM_OP_EXEC_REGION_WIN, NULL, NULL);
+
+//	if(G.f & G_TEXTUREPAINT) set_texturepaint();
+//	if(G.f & G_WEIGHTPAINT) set_wpaint();
+//	if(G.f & G_SCULPTMODE) set_sculptmode();
+//	if(G.f & G_PARTICLEEDIT) PE_set_particle_edit();
+	
+	G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
+}
+
+
+
+
+
 static void do_view3d_buttons(bContext *C, void *arg, int event);
 
 #define B_SCENELOCK 101
@@ -5368,7 +5387,7 @@
 		if (v3d->modeselect == V3D_OBJECTMODE_SEL) {
 			
 			v3d->flag &= ~V3D_MODE;
-// XXX			exit_paint_modes();
+			ED_view3d_exit_paint_modes(C);
 			ED_armature_exit_posemode(basact);
 			if(obedit) 
 				ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
@@ -5376,7 +5395,7 @@
 		else if (v3d->modeselect == V3D_EDITMODE_SEL) {
 			if(!obedit) {
 				v3d->flag &= ~V3D_MODE;
-// XXX				exit_paint_modes();
+				ED_view3d_exit_paint_modes(C);
 				ED_object_enter_editmode(C, EM_WAITCURSOR);
 				ED_undo_push(C, "Original");	/* here, because all over code enter_editmode is abused */
 			}
@@ -5384,7 +5403,7 @@
 		else if (v3d->modeselect == V3D_SCULPTMODE_SEL) {
 			if (!(G.f & G_SCULPTMODE)) {
 				v3d->flag &= ~V3D_MODE;
-// XXX				exit_paint_modes();
+				ED_view3d_exit_paint_modes(C);
 				if(obedit) ED_object_exit_editmode(C, EM_FREEUNDO);	/* exit editmode and undo */
 					
 // XXX				set_sculptmode();
@@ -5393,16 +5412,16 @@
 		else if (v3d->modeselect == V3D_VERTEXPAINTMODE_SEL) {
 			if (!(G.f & G_VERTEXPAINT)) {
 				v3d->flag &= ~V3D_MODE;
-// XXX				exit_paint_modes();
+				ED_view3d_exit_paint_modes(C);
 				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
-					
-// XXX				set_vpaint();
+				
+				WM_operator_name_call(C, "VIEW3D_OT_vpaint_toggle", WM_OP_EXEC_REGION_WIN, NULL, NULL);
 			}
 		} 
 		else if (v3d->modeselect == V3D_TEXTUREPAINTMODE_SEL) {
 			if (!(G.f & G_TEXTUREPAINT)) {
 				v3d->flag &= ~V3D_MODE;
-// XXX				exit_paint_modes();
+				ED_view3d_exit_paint_modes(C);
 				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
 					
 // XXX				set_texturepaint();
@@ -5411,7 +5430,7 @@
 		else if (v3d->modeselect == V3D_WEIGHTPAINTMODE_SEL) {
 			if (!(G.f & G_WEIGHTPAINT) && (ob && ob->type == OB_MESH) ) {
 				v3d->flag &= ~V3D_MODE;
-// XXX				exit_paint_modes();
+				ED_view3d_exit_paint_modes(C);
 				if(obedit) 
 					ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
 				
@@ -5431,7 +5450,7 @@
 		else if(v3d->modeselect == V3D_PARTICLEEDITMODE_SEL){
 			if (!(G.f & G_PARTICLEEDIT)) {
 				v3d->flag &= ~V3D_MODE;
-// XXX				exit_paint_modes();
+				ED_view3d_exit_paint_modes(C);
 				if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR);	/* exit editmode and undo */
 
 // XXX				PE_set_particle_edit();

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-01-09 06:25:14 UTC (rev 18429)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-01-09 13:55:45 UTC (rev 18430)
@@ -116,6 +116,12 @@
 void VIEW3D_OT_borderselect(struct wmOperatorType *ot);
 void VIEW3D_OT_lasso_select(struct wmOperatorType *ot);
 
+void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc);
+
+/* vpaint.c */
+void VIEW3D_OT_vpaint_toggle(struct wmOperatorType *ot);
+void VIEW3D_OT_vpaint(struct wmOperatorType *ot);
+
 /* view3d_view.c */
 void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
 void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-01-09 06:25:14 UTC (rev 18429)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list