[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29059] trunk/blender/source/blender: Esc as input for Key Buttons (e.g Logic Brick Keyboard Sensor)

Dalai Felinto dfelinto at gmail.com
Sat May 29 03:42:43 CEST 2010


Revision: 29059
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29059
Author:   dfelinto
Date:     2010-05-29 03:42:42 +0200 (Sat, 29 May 2010)

Log Message:
-----------
Esc as input for Key Buttons (e.g Logic Brick Keyboard Sensor)

After talking with Brecht he agreed on allowing Esc to be used as input for key input butons.
In order to let the user to cancel an input it can cancel it clicking outside the button.

Also replacing manual check by ui_mouse_inside_button in ui_text function
(patch reviewed (and helped) by Matt (but the change on ISHOTKEY, that's on my own risk ;))

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/windowmanager/wm_event_types.h

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-05-29 00:25:00 UTC (rev 29058)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2010-05-29 01:42:42 UTC (rev 29059)
@@ -1659,7 +1659,7 @@
 				my= event->y;
 				ui_window_to_block(data->region, block, &mx, &my);
 
-				if ((but->y1 <= my) && (my <= but->y2) && (but->x1 <= mx) && (mx <= but->x2)) {
+				if (ui_mouse_inside_button(data->region, but, mx, my)) {
 					ui_textedit_set_cursor_pos(but, data, mx);
 					but->selsta = but->selend = but->pos;
 					data->selstartx= mx;
@@ -1999,14 +1999,17 @@
 		if(event->type == MOUSEMOVE)
 			return WM_UI_HANDLER_CONTINUE;
 		
-		if(event->type == ESCKEY) {
-			/* data->cancel doesnt work, this button opens immediate */
-			if(but->flag & UI_BUT_IMMEDIATE)
-				ui_set_but_val(but, 0);
-			else
-				data->cancel= 1;
-			button_activate_state(C, but, BUTTON_STATE_EXIT);
-			return WM_UI_HANDLER_BREAK;
+		if(event->type == LEFTMOUSE && event->val==KM_PRESS) {
+			/* only cancel if click outside the button */
+			if(ui_mouse_inside_button(but->active->region, but, event->x, event->y) == 0) {
+				/* data->cancel doesnt work, this button opens immediate */
+				if(but->flag & UI_BUT_IMMEDIATE)
+					ui_set_but_val(but, 0);
+				else
+					data->cancel= 1;
+				button_activate_state(C, but, BUTTON_STATE_EXIT);
+				return WM_UI_HANDLER_BREAK;
+			}
 		}
 		
 		/* always set */
@@ -2040,15 +2043,11 @@
 	return WM_UI_HANDLER_CONTINUE;
 }
 
-
 static int ui_do_but_KEYEVT(bContext *C, uiBut *but, uiHandleButtonData *data, wmEvent *event)
 {
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
 		if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val==KM_PRESS) {
-			short event= (short)ui_get_but_val(but);
-			/* hardcoded prevention from editing or assigning ESC */
-			if(event!=ESCKEY)
-				button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
+			button_activate_state(C, but, BUTTON_STATE_WAIT_KEY_EVENT);
 			return WM_UI_HANDLER_BREAK;
 		}
 	}
@@ -2057,7 +2056,7 @@
 			return WM_UI_HANDLER_CONTINUE;
 
 		if(event->val==KM_PRESS) {
-			if(event->type!=ESCKEY && WM_key_event_string(event->type)[0])
+			if(WM_key_event_string(event->type)[0])
 				ui_set_but_val(but, event->type);
 			else
 				data->cancel= 1;

Modified: trunk/blender/source/blender/windowmanager/wm_event_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/wm_event_types.h	2010-05-29 00:25:00 UTC (rev 29058)
+++ trunk/blender/source/blender/windowmanager/wm_event_types.h	2010-05-29 01:42:42 UTC (rev 29059)
@@ -226,7 +226,7 @@
 #define ISTWEAK(event)	(event >= EVT_TWEAK_L && event <= EVT_GESTURE)
 
 /* test whether event type is acceptable as hotkey, excluding modifiers */
-#define ISHOTKEY(event)	((ISKEYBOARD(event) || ISMOUSE(event)) && !(event>=LEFTCTRLKEY && event<=ESCKEY) && !(event>=UNKNOWNKEY && event<=GRLESSKEY))
+#define ISHOTKEY(event)	((ISKEYBOARD(event) || ISMOUSE(event)) && !(event>=LEFTCTRLKEY && event<=LEFTSHIFTKEY) && !(event>=UNKNOWNKEY && event<=GRLESSKEY))
 
 /* **************** BLENDER GESTURE EVENTS ********************* */
 





More information about the Bf-blender-cvs mailing list