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

Ton Roosendaal ton at blender.org
Mon Feb 2 15:13:14 CET 2009


Revision: 18790
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18790
Author:   ton
Date:     2009-02-02 15:13:14 +0100 (Mon, 02 Feb 2009)

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

Sanitized the 'tweak' event.

Original idea was to have WM event system generating it 
automatically. However, I first tested it via a handler
and operator, to check what kind of configurations would
be useful. It appeared to not work nice, also because
that inserting a tweak operator in a keymap is confusing.

Now 'tweaks' are generated automatically, and can be
catched by keymaps as any event. The current definition
of tweak is:

- if Left/Middle/Rightmouse pressed
    if event wasn't handled by window queue (modal handlers)
       start checking mousepositions

- while mousepositions are checked
   - escape on any event other than mouse
   - on mouse events:
     - add tweak event if mousemove > 10 pixels
     - stop checking for tweak if mousebutton released

- Tweak events have a define indicating mousebutton used
  EVT_TWEAK_L, EVT_TWEAK_M, EVT_TWEAK_R  

- In keymap definitions you can use _S or _A to map to
  action or select mouse userdef.

- Event value in keymap should be KM_ANY for all tweaks,
  or use one of the eight directions:
  EVT_GESTURE_E, _SE, _S, _SW, _W, _NW, _N, _NE 

- And of course you can add modifier checks in keymaps for it.

- Because tweaks are a result of mouse events, the handlers get
  both to evaluate. That means that RMB-select + tweak will work
  correctly.
  In case you don't want both to be handled, for example the 
  CTRL+LMB 'extrude' and CTRL+LMB-tweak 'lasso select', you will
  need to set the first acting on a EVT_RELEASE, this event only
  gets passed on when tweak fails.

The current system allows all options, configurable, we had in 2.48,
and many more! A diagram of what's possible is on the todo. :)

Also in this commit: lasso select editmesh failed with 'zbuffer 
occluded select'. Also circle-select failed.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c
    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/uvedit/uvedit_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.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_keymap.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-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -3945,11 +3945,13 @@
 		win->ghostwin= NULL;
 		win->eventstate= NULL;
 		win->curswin= NULL;
-		
+		win->tweak= NULL;
+
 		win->timers.first= win->timers.last= NULL;
 		win->queue.first= win->queue.last= NULL;
 		win->handlers.first= win->handlers.last= NULL;
 		win->subwindows.first= win->subwindows.last= NULL;
+		win->gesture.first= win->gesture.last= NULL;
 
 		win->drawdata= NULL;
 		win->drawmethod= -1;

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -889,7 +889,4 @@
 	
 	WM_keymap_add_item(keymap, "MARKER_OT_move", GKEY, KM_PRESS, 0, 0);
 	
-	/* generates event, needs to be after select to work */
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-	
 }

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -247,10 +247,9 @@
 	}
 	else if(vc->v3d->drawtype<OB_SOLID || (vc->v3d->flag & V3D_ZBUF_SELECT)==0) return 0;
 
-	if(em_vertoffs==0) return 0;
-	
 	buf= view3d_read_backbuf(vc, xmin, ymin, xmax, ymax);
 	if(buf==NULL) return 0;
+	if(em_vertoffs==0) return 0;
 
 	dr = buf->rect;
 
@@ -260,6 +259,7 @@
 	glColor3ub(0, 0, 0);
 	
 	/* yah, opengl doesn't do concave... tsk! */
+	ED_region_pixelspace(vc->ar);
  	draw_triangulated(mcords, tot);	
 	
 	glBegin(GL_LINE_LOOP);	/* for zero sized masks, lines */
@@ -301,11 +301,11 @@
 		else return 0;
 	}
 	else if(vc->v3d->drawtype<OB_SOLID || (vc->v3d->flag & V3D_ZBUF_SELECT)==0) return 0;
-	if(em_vertoffs==0) return 0;
 	
 	xmin= xs-rads; xmax= xs+rads;
 	ymin= ys-rads; ymax= ys+rads;
 	buf= view3d_read_backbuf(vc, xmin, ymin, xmax, ymax);
+	if(em_vertoffs==0) return 0;
 	if(buf==NULL) return 0;
 
 	dr = buf->rect;

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -206,9 +206,6 @@
 	
 	WM_keymap_add_item(keymap, "MESH_OT_selection_type", TABKEY, KM_PRESS, KM_CTRL, 0);
 	
-	
-	/* transform keymap already defined, so no tweaks for select */
-	
 	/* hide */
 	WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
 	RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "invert", 1);
@@ -236,7 +233,8 @@
 	WM_keymap_add_item(keymap, "MESH_OT_add_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "OBJECT_OT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, KM_SHIFT, 0);
-	WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
+						/* use KM_RELEASE because same key is used for tweaks */
+	WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", LEFTMOUSE, KM_RELEASE, KM_CTRL, 0);
 	
 	WM_keymap_add_item(keymap, "MESH_OT_delete", XKEY, KM_PRESS, 0, 0);
 	

Modified: branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -139,9 +139,6 @@
 	WM_keymap_add_item(keymap, "ACT_OT_set_previewrange", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
 	WM_keymap_add_item(keymap, "ACT_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
 	
-	/* generates event, needs to be after select to work */
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-		
 	/* transform system */
 	transform_keymap_for_space(wm, keymap, SPACE_ACTION);
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -186,9 +186,6 @@
 	//WM_keymap_add_item(keymap, "GRAPHEDIT_OT_set_previewrange", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
 	//WM_keymap_add_item(keymap, "GRAPHEDIT_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
 	
-	/* generates event, needs to be after select to work */
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-
 	/* transform system */
 	transform_keymap_for_space(wm, keymap, SPACE_IPO);
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -73,9 +73,5 @@
 	WM_keymap_add_item(keymap, "NODE_OT_border_select", BKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "NODE_OT_delete_selection", XKEY, KM_PRESS, 0, 0);
 	
-	/* generates event, needs to be after select to work */
-	WM_keymap_tweak(keymap, ACTIONMOUSE, KM_PRESS, 0, 0);
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-	
 	transform_keymap_for_space(wm, keymap, SPACE_NODE);
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -155,8 +155,6 @@
 	
 	WM_keymap_verify_item(keymap, "ANIM_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0);
 
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-
 	transform_keymap_for_space(wm, keymap, SPACE_SEQ);
 }
 

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-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -183,10 +183,5 @@
 
 	transform_keymap_for_space(wm, keymap, SPACE_VIEW3D);
 
-	/* generates event, in end to make select work */
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-	/* tweak event for border, lasso, etc */
-	WM_keymap_tweak(keymap, ACTIONMOUSE, KM_PRESS, KM_CTRL, 0);
-
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -703,6 +703,8 @@
 	RNA_END;
 	
 	if(i>1) {
+		view3d_operator_needs_opengl(C);
+		
 		/* setup view context for argument to callbacks */
 		view3d_set_viewcontext(C, &vc);
 		
@@ -1754,6 +1756,8 @@
 		ViewContext vc;
 		short mval[2], selecting;
 		
+		view3d_operator_needs_opengl(C);
+		
 		view3d_set_viewcontext(C, &vc);
 		mval[0]= x;
 		mval[1]= y;

Modified: branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c	2009-02-02 14:13:14 UTC (rev 18790)
@@ -2568,9 +2568,6 @@
 	// XXX not working?
 	RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, KM_ALT)->ptr, "extend", 1);
 
-	/* generates event, needs to be after select to work */
-	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
-
 	WM_keymap_add_item(keymap, "UV_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "UV_OT_unlink_selection", LKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "UV_OT_de_select_all", AKEY, KM_PRESS, 0, 0);

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-02-02 11:51:10 UTC (rev 18789)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-02-02 14:13:14 UTC (rev 18790)
@@ -38,6 +38,7 @@
 struct wmWindow;
 
 struct wmEvent;
+struct wmGesture;
 struct wmOperatorType;
 struct wmOperator;
 
@@ -102,6 +103,8 @@
 	
 	struct wmSubWindow *curswin;	/* internal for wm_subwindow.c only */
 
+	struct wmGesture *tweak;	/* internal for wm_operators.c */
+	
 	int drawmethod, drawfail;	/* internal for wm_draw.c only */
 	void *drawdata;				/* internal for wm_draw.c only */
 	
@@ -168,7 +171,7 @@
 	short shift, ctrl, alt, oskey;	/* oskey is apple or windowskey, value denotes order of pressed */
 	short keymodifier;				/* rawkey modifier */
 	
-	short is_tweak;					/* internal only, to handle tweak failure events properly */
+	short pad;
 } wmKeymapItem;
 
 #define KMAP_MAX_NAME	64

Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_types.h

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list