[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27945] trunk/blender/source/blender: Bugfix #21853: Border zoom in the 2D-Views zooms out

Joshua Leung aligorith at gmail.com
Fri Apr 2 05:52:48 CEST 2010


Revision: 27945
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27945
Author:   aligorith
Date:     2010-04-02 05:52:44 +0200 (Fri, 02 Apr 2010)

Log Message:
-----------
Bugfix #21853: Border zoom in the 2D-Views zooms out

* Fixed the way the operator was checking for what the user wanted when using the operator
* Added a few specific defines to a copy of the gesture border modal keymap (added one for zooming only) labelled 'In' and 'Out' which make this more useful than being hacked to use select and deselect

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/keyframing.c
    trunk/blender/source/blender/editors/interface/view2d_ops.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c
    trunk/blender/source/blender/windowmanager/wm_event_types.h

Modified: trunk/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- trunk/blender/source/blender/editors/animation/keyframing.c	2010-04-02 01:28:14 UTC (rev 27944)
+++ trunk/blender/source/blender/editors/animation/keyframing.c	2010-04-02 03:52:44 UTC (rev 27945)
@@ -286,7 +286,9 @@
 	BezTriple beztr;
 	int a;
 	
-	/* set all three points, for nicer start position */
+	/* set all three points, for nicer start position 
+	 * NOTE: +/- 1 on vec.x for left and right handles is so that 'free' handles work ok...
+	 */
 	memset(&beztr, 0, sizeof(BezTriple));
 	beztr.vec[0][0]= x-1.0f; 
 	beztr.vec[0][1]= y;

Modified: trunk/blender/source/blender/editors/interface/view2d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/view2d_ops.c	2010-04-02 01:28:14 UTC (rev 27944)
+++ trunk/blender/source/blender/editors/interface/view2d_ops.c	2010-04-02 03:52:44 UTC (rev 27945)
@@ -1038,17 +1038,16 @@
 	ARegion *ar= CTX_wm_region(C);
 	View2D *v2d= &ar->v2d;
 	rctf rect;
-	int event_type;
+	int gesture_mode;
 	
 	/* convert coordinates of rect to 'tot' rect coordinates */
 	UI_view2d_region_to_view(v2d, RNA_int_get(op->ptr, "xmin"), RNA_int_get(op->ptr, "ymin"), &rect.xmin, &rect.ymin);
 	UI_view2d_region_to_view(v2d, RNA_int_get(op->ptr, "xmax"), RNA_int_get(op->ptr, "ymax"), &rect.xmax, &rect.ymax);
 	
 	/* check if zooming in/out view */
-	// XXX hardcoded for now!
-	event_type= RNA_int_get(op->ptr, "event_type");
+	gesture_mode= RNA_int_get(op->ptr, "gesture_mode");
 	
-	if (event_type == LEFTMOUSE) {
+	if (gesture_mode == GESTURE_MODAL_IN) {
 		/* zoom in: 
 		 *	- 'cur' rect will be defined by the coordinates of the border region 
 		 *	- just set the 'cur' rect to have the same coordinates as the border region
@@ -1063,7 +1062,7 @@
 			v2d->cur.ymax= rect.ymax;
 		}
 	}
-	else {
+	else /* if (gesture_mode == GESTURE_MODAL_OUT) */ {
 		/* zoom out:
 		 *	- the current 'cur' rect coordinates are going to end upwhere the 'rect' ones are, 
 		 *	  but the 'cur' rect coordinates will need to be adjusted to take in more of the view
@@ -1116,7 +1115,7 @@
 	ot->poll= view_zoom_poll;
 	
 	/* rna */
-	RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX);
+	RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX);
 	RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX);
 	RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX);
 	RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2010-04-02 01:28:14 UTC (rev 27944)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2010-04-02 03:52:44 UTC (rev 27945)
@@ -2070,6 +2070,8 @@
 			break;
 		case GESTURE_MODAL_SELECT:
 		case GESTURE_MODAL_DESELECT:
+		case GESTURE_MODAL_IN:
+		case GESTURE_MODAL_OUT:
 			if(border_apply(C, op, event->val)) {
 				wm_gesture_end(C, op);
 				return OPERATOR_FINISHED;
@@ -2843,7 +2845,7 @@
 
 }
 
-/* called in transform_ops.c, on each regeneration of keymaps  */
+/* circleselect-like modal operators */
 static void gesture_circle_modal_keymap(wmKeyConfig *keyconf)
 {
 	static EnumPropertyItem modal_items[] = {
@@ -2896,7 +2898,7 @@
 
 }
 
-/* called in transform_ops.c, on each regeneration of keymaps  */
+/* borderselect-like modal operators */
 static void gesture_border_modal_keymap(wmKeyConfig *keyconf)
 {
 	static EnumPropertyItem modal_items[] = {
@@ -2948,6 +2950,38 @@
 	WM_modalkeymap_assign(keymap, "VIEW3D_OT_zoom_border"); // XXX TODO: zoom border should perhaps map rightmouse to zoom out instead of in+cancel
 }
 
+/* zoom to border modal operators */
+static void gesture_zoom_border_modal_keymap(wmKeyConfig *keyconf)
+{
+	static EnumPropertyItem modal_items[] = {
+	{GESTURE_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
+	{GESTURE_MODAL_IN,	"IN", 0, "In", ""},
+	{GESTURE_MODAL_OUT, "OUT", 0, "Out", ""},
+	{GESTURE_MODAL_BORDER_BEGIN, "BEGIN", 0, "Begin", ""},
+	{0, NULL, 0, NULL, NULL}};
+
+	wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Gesture Zoom Border");
+
+	/* this function is called for each spacetype, only needs to add map once */
+	if(keymap) return;
+
+	keymap= WM_modalkeymap_add(keyconf, "Gesture Zoom Border", modal_items);
+
+	/* items for modal map */
+	WM_modalkeymap_add_item(keymap, ESCKEY,    KM_PRESS, KM_ANY, 0, GESTURE_MODAL_CANCEL);
+	WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, GESTURE_MODAL_CANCEL);
+
+	WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_BORDER_BEGIN);
+	WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_IN); 
+
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, 0, 0, GESTURE_MODAL_BORDER_BEGIN);
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, 0, 0, GESTURE_MODAL_OUT);
+
+	/* assign map to operators */
+	WM_modalkeymap_assign(keymap, "VIEW2D_OT_zoom_border");
+	WM_modalkeymap_assign(keymap, "VIEW3D_OT_zoom_border");
+}
+
 /* default keymap for windows and screens, only call once per WM */
 void wm_window_keymap(wmKeyConfig *keyconf)
 {
@@ -3035,6 +3069,7 @@
 
 	gesture_circle_modal_keymap(keyconf);
 	gesture_border_modal_keymap(keyconf);
+	gesture_zoom_border_modal_keymap(keyconf);
 }
 
 /* Generic itemf's for operators that take library args */

Modified: trunk/blender/source/blender/windowmanager/wm_event_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/wm_event_types.h	2010-04-02 01:28:14 UTC (rev 27944)
+++ trunk/blender/source/blender/windowmanager/wm_event_types.h	2010-04-02 03:52:44 UTC (rev 27945)
@@ -283,6 +283,9 @@
 
 #define GESTURE_MODAL_BORDER_BEGIN	8 /* border select, activate, use release to detect which button */
 
+#define GESTURE_MODAL_IN			9
+#define GESTURE_MODAL_OUT			10
 
+
 #endif	/* WM_EVENT_TYPES_H */
 





More information about the Bf-blender-cvs mailing list