[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17551] branches/blender2.5/blender/source /blender: Work on gesture, some more cleaning.

Ton Roosendaal ton at blender.org
Mon Nov 24 11:45:36 CET 2008


Revision: 17551
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17551
Author:   ton
Date:     2008-11-24 11:45:36 +0100 (Mon, 24 Nov 2008)

Log Message:
-----------
Work on gesture, some more cleaning.

- Added standard "tweak" gesture operator, which can be set per region, to
  generate EVT_TWEAK events. You can configure tweaks for any mouse button
  and have handlers for such events check for modifiers etc.
  It even stores tweak direction (8 directions). Might be fun to experiment 
  with tweak gestures N, S, etc. :) 
  In general it can be used to replace the current tweak code in 2.48 
  (std_rmouse_transform). 
  
  Test added: on screen level it now adds LMB tweaks, if tweak-South it splits
  the area. Will be removed of course. 

- Added to Border operator a property to store event used to end border with.

- Moved the "AZone" triangle drawing to the right context (area). It was on
  screen level, not respecting area-redraws. Also cleaned up drawing for it,
  and moved the "swap buffers indicator" square to look nicer. Those squares
  are only for test!

- event-match function had bad code for checking for event-value. Made a 
  "KM_ANY" define so keymaps can be defined ignoring event values.

- Gesture todo: lasso, "real gesture" (like blender now has)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/BIF_glutil.h
    branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/screen/glutil.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_gesture.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_keymap.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
    branches/blender2.5/blender/source/blender/windowmanager/wm.h
    branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h

Modified: branches/blender2.5/blender/source/blender/editors/include/BIF_glutil.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/BIF_glutil.h	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/include/BIF_glutil.h	2008-11-24 10:45:36 UTC (rev 17551)
@@ -35,7 +35,7 @@
 void fdrawbox(float x1, float y1, float x2, float y2);
 void sdrawline(short x1, short y1, short x2, short y2);
 void sdrawtri(short x1, short y1, short x2, short y2);
-void sdrawtrifill(short x1, short y1, short x2, short y2, float r, float g, float b);
+void sdrawtrifill(short x1, short y1, short x2, short y2);
 void sdrawbox(short x1, short y1, short x2, short y2);
 
 void sdrawXORline(int x0, int y0, int x1, int y1);

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h	2008-11-24 10:45:36 UTC (rev 17551)
@@ -51,6 +51,7 @@
 /* areas */
 void	ED_area_initialize(struct wmWindowManager *wm, struct wmWindow *win, struct ScrArea *sa);
 void	ED_area_exit(struct bContext *C, ScrArea *sa);
+void	ED_area_do_draw(struct bContext *C, ScrArea *sa);
 
 /* screens */
 void	ED_screens_initialize(struct wmWindowManager *wm);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_ops.c	2008-11-24 10:45:36 UTC (rev 17551)
@@ -1529,7 +1529,7 @@
 			if(event->shift) fac /= 10.0f;
 			if(event->alt) fac /= 20.0f;
 
-			if(event->custom == EVT_TABLET) {
+			if(event->custom == EVT_DATA_TABLET) {
 				wmTabletData *wmtab= event->customdata;
 
 				/* de-sensitise based on tablet pressure */

Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/area.c	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/screen/area.c	2008-11-24 10:45:36 UTC (rev 17551)
@@ -111,6 +111,27 @@
 	}
 }
 
+/* only internal decoration, AZone for now */
+void ED_area_do_draw(bContext *C, ScrArea *sa)
+{
+	AZone *az;
+	
+	/* hrmf, screenspace for zones */
+	wm_subwindow_set(C->window, C->window->screen->mainwin);
+	
+	/* temporary viz for 'action corner' */
+	for(az= sa->actionzones.first; az; az= az->next) {
+		
+		glEnable( GL_BLEND );
+		glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+		glColor4ub(0, 0, 0, 80);
+		if(az->type==AZONE_TRI) sdrawtrifill(az->x1, az->y1, az->x2, az->y2);
+		//if(az->type==AZONE_TRI) sdrawtri(az->x1, az->y1, az->x2, az->y2);
+		glDisable( GL_BLEND );
+	}
+	
+}
+
 void ED_region_do_draw(bContext *C, ARegion *ar)
 {
 	ARegionType *at= ar->type;
@@ -128,9 +149,10 @@
 		glClearColor(0.5, fac, 1.0f-fac, 0.0); 
 		glClear(GL_COLOR_BUFFER_BIT);
 		
+		/* swapbuffers indicator */
 		fac= BLI_frand();
 		glColor3f(fac, fac, fac);
-		glRecti(2,  2,  12,  12);
+		glRecti(20,  2,  30,  12);
 		
 		region_draw_emboss(ar);
 	}
@@ -295,9 +317,10 @@
 			az->y1= sa->v1->vec.y+1;
 			az->x2= sa->v1->vec.x+AZONESPOT;
 			az->y2= sa->v1->vec.y+AZONESPOT;
-		} else if (az->pos==AZONE_NE) {
-			az->x1= sa->v3->vec.x-1;
-			az->y1= sa->v3->vec.y-1;
+		} 
+		else if (az->pos==AZONE_NE) {
+			az->x1= sa->v3->vec.x;
+			az->y1= sa->v3->vec.y;
 			az->x2= sa->v3->vec.x-AZONESPOT;
 			az->y2= sa->v3->vec.y-AZONESPOT;
 		}

Modified: branches/blender2.5/blender/source/blender/editors/screen/glutil.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/glutil.c	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/screen/glutil.c	2008-11-24 10:45:36 UTC (rev 17551)
@@ -120,10 +120,9 @@
 	glEnd();
 }
 
-void sdrawtrifill(short x1, short y1, short x2, short y2, float r, float g, float b)
+void sdrawtrifill(short x1, short y1, short x2, short y2)
 {
 	glBegin(GL_TRIANGLES);
-	glColor3f(r, g, b);
 	sdrawtripoints(x1, y1, x2, y2);
 	glEnd();
 }

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2008-11-24 10:45:36 UTC (rev 17551)
@@ -768,7 +768,6 @@
 /** screen edges drawing **/
 static void drawscredge_area(ScrArea *sa)
 {
-	AZone *az;
 	short x1= sa->v1->vec.x;
 	short y1= sa->v1->vec.y;
 	short x2= sa->v3->vec.x;
@@ -790,11 +789,6 @@
 	/* bottom border area */
 	sdrawline(x1, y1, x2, y1);
 	
-	/* temporary viz for 'action corner' */
-	for(az= sa->actionzones.first; az; az= az->next) {
-		if(az->type==AZONE_TRI) sdrawtrifill(az->x1, az->y1, az->x2, az->y2, .2, .2, .2);
-		//if(az->type==AZONE_TRI) sdrawtri(az->x1, az->y1, az->x2, az->y2);
-	}
 }
 
 /* ****************** EXPORTED API TO OTHER MODULES *************************** */

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2008-11-24 10:45:36 UTC (rev 17551)
@@ -834,6 +834,11 @@
 		return OPERATOR_RUNNING_MODAL;
 		
 	}
+	else {
+		/* nonmodal for now */
+		return op->type->exec(C, op);
+	}
+	
 	return OPERATOR_PASS_THROUGH;
 }
 
@@ -911,7 +916,7 @@
 	ot->invoke= area_split_invoke;
 	ot->modal= area_split_modal;
 	
-	ot->poll= ED_operator_screenactive; /* XXX should be area active */
+	ot->poll= ED_operator_areaactive;
 
 	/* rna */
 	prop= RNA_def_property(ot->rna, "dir", PROP_ENUM, PROP_NONE);
@@ -1227,7 +1232,15 @@
 
 static int border_select_do(bContext *C, wmOperator *op)
 {
-	printf("border select do\n");
+	int event_type= RNA_int_get(op->rna, "event_type");
+	
+	if(event_type==LEFTMOUSE)
+		printf("border select do select\n");
+	else if(event_type==RIGHTMOUSE)
+		printf("border select deselect\n");
+	else 
+		printf("border select do something\n");
+	
 	return 1;
 }
 
@@ -1243,6 +1256,10 @@
 	ot->modal= WM_border_select_modal;
 	
 	ot->poll= ED_operator_areaactive;
+	
+	/* rna */
+	RNA_def_property(ot->rna, "event_type", PROP_INT, PROP_NONE);
+
 }
 
 
@@ -1274,10 +1291,13 @@
 	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_area_move", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_area_split", EVT_ACTIONZONE, 0, 0, 0);	/* action tria */
 	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_area_join", EVT_ACTIONZONE, 0, 0, 0);	/* action tria */ 
-	WM_keymap_verify_item(&wm->windowkeymap, "ED_SCR_OT_area_rip", RKEY, KM_PRESS, KM_ALT, 0);
+	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_area_rip", RKEY, KM_PRESS, KM_ALT, 0);
 
 	/* for test only */
-	WM_keymap_verify_item(&wm->windowkeymap, "ED_SCR_OT_border_select", BKEY, KM_PRESS, 0, 0);
+	WM_keymap_verify_item(&wm->screenkeymap, "ED_SCR_OT_border_select", BKEY, KM_PRESS, 0, 0);
+	WM_keymap_verify_item(&wm->screenkeymap, "WM_OT_tweak_gesture", LEFTMOUSE, KM_PRESS, 0, 0); /* generates event */
 
+	WM_keymap_add_item(&wm->screenkeymap, "ED_SCR_OT_area_split", EVT_TWEAK, EVT_GESTURE_S, 0, 0);
+
 }
 

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h	2008-11-24 10:45:36 UTC (rev 17551)
@@ -37,10 +37,6 @@
 struct SpaceType;
 struct SpaceLink;
 struct ARegionType;
-struct bContext;
-struct wmNotifier;
-struct wmWindowManager;
-		
 
 typedef struct bScreen {
 	ID id;

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_api.h	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_api.h	2008-11-24 10:45:36 UTC (rev 17551)
@@ -103,6 +103,9 @@
 int			WM_border_select_invoke	(struct bContext *C, wmOperator *op, struct wmEvent *event);
 int			WM_border_select_modal	(struct bContext *C, wmOperator *op, struct wmEvent *event);
 
+			/* default operator for arearegions, generates event */
+void		WM_OT_tweak_gesture(wmOperatorType *ot);
+
 			/* Gesture manager API */
 struct wmGesture *WM_gesture_new(struct bContext *C, struct wmEvent *event, int type);
 void		WM_gesture_end(struct bContext *C, struct wmGesture *gesture);

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2008-11-24 10:21:18 UTC (rev 17550)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_types.h	2008-11-24 10:45:36 UTC (rev 17551)
@@ -81,8 +81,9 @@
 #define KM_OSKEY2	128
 
 /* val */
-#define KM_PRESS	2
-#define KM_RELEASE	1
+#define KM_ANY		-1
+#define KM_RELEASE	0
+#define KM_PRESS	1
 
 
 /* ************** notifiers ****************** */
@@ -113,17 +114,20 @@
 /* ************** Gesture Manager data ************** */
 
 /* wmGesture->type */
-#define WM_GESTURE_LINE			0
-#define WM_GESTURE_RECT			1
-#define WM_GESTURE_CROSS_RECT	2
-#define WM_GESTURE_LASSO		3
-#define WM_GESTURE_CIRCLE		4
+#define WM_GESTURE_TWEAK		0
+#define WM_GESTURE_LINE			1
+#define WM_GESTURE_RECT			2
+#define WM_GESTURE_CROSS_RECT	3
+#define WM_GESTURE_LASSO		4
+#define WM_GESTURE_CIRCLE		5
 
 /* wmGesture is registered to window listbase, handled by operator callbacks */
 typedef struct wmGesture {
 	struct wmGesture *next, *prev;
-	int eventtype, mode;
-	int type, swinid;
+	int event_type;	/* event->type */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list