[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25178] trunk/blender/source/blender/ editors/transform: Use custom cursor draw in transform to draw the new arrow cursors ( to indicate direction of motion for a particular transformations).

Martin Poirier theeth at yahoo.com
Mon Dec 7 19:10:12 CET 2009


Revision: 25178
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25178
Author:   theeth
Date:     2009-12-07 19:10:11 +0100 (Mon, 07 Dec 2009)

Log Message:
-----------
Use custom cursor draw in transform to draw the new arrow cursors (to indicate direction of motion for a particular transformations). This insures that it's drawn under the cursor and not far away when cursor is warped (rubber band still points to event location, this helps visualize too).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2009-12-07 18:08:19 UTC (rev 25177)
+++ trunk/blender/source/blender/editors/transform/transform.c	2009-12-07 18:10:11 UTC (rev 25178)
@@ -1148,7 +1148,7 @@
 	/* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */
 	special_aftertrans_update(t);
 
-	postTrans(t);
+	postTrans(C, t);
 
 	MEM_freeN(t);
 
@@ -1239,11 +1239,14 @@
 	glEnd();
 }
 
-void drawHelpline(const struct bContext *C, TransInfo *t)
+static void drawHelpline(bContext *C, int x, int y, void *customdata)
 {
+	TransInfo *t = (TransInfo*)customdata;
+
 	if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR))
 	{
 		float vecrot[3], cent[2];
+		int mval[2] = {x, y};
 
 		VECCOPY(vecrot, t->center);
 		if(t->flag & T_EDIT) {
@@ -1270,7 +1273,7 @@
 				glVertex2fv(cent);
 				glEnd();
 
-				glTranslatef(t->mval[0], t->mval[1], 0);
+				glTranslatef(mval[0], mval[1], 0);
 				glRotatef(-180 / M_PI * atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1]), 0, 0, 1);
 
 				setlinestyle(0);
@@ -1282,7 +1285,7 @@
 			case HLP_HARROW:
 				UI_ThemeColor(TH_WIRE);
 
-				glTranslatef(t->mval[0], t->mval[1], 0);
+				glTranslatef(mval[0], mval[1], 0);
 
 				glLineWidth(3.0);
 				drawArrow(RIGHT, 5, 10, 5);
@@ -1292,7 +1295,7 @@
 			case HLP_VARROW:
 				UI_ThemeColor(TH_WIRE);
 
-				glTranslatef(t->mval[0], t->mval[1], 0);
+				glTranslatef(mval[0], mval[1], 0);
 
 				glLineWidth(3.0);
 				glBegin(GL_LINES);
@@ -1315,7 +1318,7 @@
 					glVertex2fv(cent);
 					glEnd();
 
-					glTranslatef(cent[0], cent[1], 0);
+					glTranslatef(cent[0] - t->mval[0] + mval[0], cent[1] - t->mval[1] + mval[1], 0);
 
 					setlinestyle(0);
 					glLineWidth(3.0);
@@ -1344,7 +1347,7 @@
 					char col[3], col2[3];
 					UI_GetThemeColor3ubv(TH_GRID, col);
 
-					glTranslatef(t->mval[0], t->mval[1], 0);
+					glTranslatef(mval[0], mval[1], 0);
 
 					glLineWidth(3.0);
 
@@ -1379,9 +1382,9 @@
 
 void drawTransformPixel(const struct bContext *C, struct ARegion *ar, void *arg)
 {
-	TransInfo *t = arg;
-
-	drawHelpline(C, t);
+//	TransInfo *t = arg;
+//
+//	drawHelpline(C, t->mval[0], t->mval[1], t);
 }
 
 void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
@@ -1505,12 +1508,13 @@
 		initTransformOrientation(C, t);
 
 		t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
-		t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
+		//t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
+		t->draw_handle_cursor = WM_paint_cursor_activate(CTX_wm_manager(C), NULL, drawHelpline, t);
 	}
 	else if(t->spacetype == SPACE_IMAGE) {
 		unit_m3(t->spacemtx);
 		t->draw_handle_view = ED_region_draw_cb_activate(t->ar->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
-		t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
+		//t->draw_handle_pixel = ED_region_draw_cb_activate(t->ar->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
 	}
 	else
 		unit_m3(t->spacemtx);
@@ -1518,7 +1522,7 @@
 	createTransData(C, t);			// make TransData structs from selection
 
 	if (t->total == 0) {
-		postTrans(t);
+		postTrans(C, t);
 		return 0;
 	}
 
@@ -1714,7 +1718,7 @@
 		special_aftertrans_update(t);
 
 		/* free data */
-		postTrans(t);
+		postTrans(C, t);
 
 		/* send events out for redraws */
 		viewRedrawPost(t);

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2009-12-07 18:08:19 UTC (rev 25177)
+++ trunk/blender/source/blender/editors/transform/transform.h	2009-12-07 18:10:11 UTC (rev 25178)
@@ -321,6 +321,7 @@
     struct Object   *obedit;
     void		*draw_handle_view;
     void		*draw_handle_pixel;
+    void		*draw_handle_cursor;
 } TransInfo;
 
 
@@ -633,7 +634,7 @@
 /*********************** Generics ********************************/
 
 int initTransInfo(struct bContext *C, TransInfo *t, struct wmOperator *op, struct wmEvent *event);
-void postTrans (TransInfo *t);
+void postTrans (struct bContext *C, TransInfo *t);
 void resetTransRestrictions(TransInfo *t);
 
 void drawLine(TransInfo *t, float *center, float *dir, char axis, short options);

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2009-12-07 18:08:19 UTC (rev 25177)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2009-12-07 18:10:11 UTC (rev 25178)
@@ -108,6 +108,7 @@
 #include "RNA_access.h"
 
 #include "WM_types.h"
+#include "WM_api.h"
 
 #include "UI_resources.h"
 
@@ -1065,7 +1066,7 @@
 }
 
 /* Here I would suggest only TransInfo related issues, like free data & reset vars. Not redraws */
-void postTrans (TransInfo *t)
+void postTrans (bContext *C, TransInfo *t)
 {
 	TransData *td;
 	
@@ -1073,7 +1074,8 @@
 		ED_region_draw_cb_exit(t->ar->type, t->draw_handle_view);
 	if (t->draw_handle_pixel)
 		ED_region_draw_cb_exit(t->ar->type, t->draw_handle_pixel);
-	
+	if (t->draw_handle_cursor)
+		WM_paint_cursor_end(CTX_wm_manager(C), t->draw_handle_cursor);
 
 	if (t->customFree) {
 		/* Can take over freeing t->data and data2d etc... */





More information about the Bf-blender-cvs mailing list