[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25293] trunk/blender: Double Click event value.

Martin Poirier theeth at yahoo.com
Thu Dec 10 18:41:03 CET 2009


Revision: 25293
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25293
Author:   theeth
Date:     2009-12-10 18:41:03 +0100 (Thu, 10 Dec 2009)

Log Message:
-----------
Double Click event value.

Timeout between both clicks is user configurable, should be taken from the OS when possible.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_userpref.py
    trunk/blender/source/blender/editors/interface/resources.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/windowmanager/WM_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/release/scripts/ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/ui/space_userpref.py	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/release/scripts/ui/space_userpref.py	2009-12-10 17:41:03 UTC (rev 25293)
@@ -1186,6 +1186,12 @@
         sub.prop(inputs, "ndof_pan_speed", text="Pan Speed")
         sub.prop(inputs, "ndof_rotate_speed", text="Orbit Speed")
 
+        col.separator()
+
+        sub = col.column()
+        sub.label(text="Double Click:")
+        sub.prop(inputs, "double_click_time", text="Speed")
+
         row.separator()
 
         # Keymap Settings

Modified: trunk/blender/source/blender/editors/interface/resources.c
===================================================================
--- trunk/blender/source/blender/editors/interface/resources.c	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/editors/interface/resources.c	2009-12-10 17:41:03 UTC (rev 25293)
@@ -1280,6 +1280,9 @@
 	if (U.frameserverport == 0) {
 		U.frameserverport = 8080;
 	}
+	if (U.dbl_click_time == 0) {
+		U.dbl_click_time = 350;
+	}
 
 	/* funny name, but it is GE stuff, moves userdef stuff to engine */
 // XXX	space_set_commmandline_options();

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2009-12-10 17:41:03 UTC (rev 25293)
@@ -288,7 +288,9 @@
 	char sounddir[160];
 	/* yafray: temporary xml export directory */
 	char yfexportdir[160];
-	short versions, pad;
+	short versions;
+
+	short dbl_click_time;
 	
 	int gameflags;
 	int wheellinescroll;

Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-12-10 17:41:03 UTC (rev 25293)
@@ -158,6 +158,7 @@
 	
 	short last_type; /* last event information, used for click */
 	short last_val;
+	double last_click_time; /* for double click */
 
 	struct wmEvent *eventstate;	/* storage for event system */
 	
@@ -291,6 +292,7 @@
 /* wmKeyMap.flag */
 #define KEYMAP_MODAL		1	/* modal map, not using operatornames */
 #define KEYMAP_USER			2	/* user created keymap */
+#define KEYMAP_EXPANDED		4
 
 typedef struct wmKeyConfig {
 	struct wmKeyConfig *next, *prev;

Modified: trunk/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2009-12-10 17:41:03 UTC (rev 25293)
@@ -2338,6 +2338,11 @@
 	RNA_def_property_range(prop, 0, 200);
 	RNA_def_property_ui_text(prop, "NDof Rotation Speed", "The overall rotation speed of an NDOF device, as percent of standard.");
 	
+	prop= RNA_def_property(srna, "double_click_time", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "dbl_click_time");
+	RNA_def_property_range(prop, 1, 1000);
+	RNA_def_property_ui_text(prop, "Double Click Timeout", "The time (in ms) for a double click.");
+
 	prop= RNA_def_property(srna, "emulate_3_button_mouse", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_TWOBUTTONMOUSE);
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_userdef_emulate_set");

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c	2009-12-10 17:41:03 UTC (rev 25293)
@@ -43,6 +43,7 @@
 	{KM_PRESS, "PRESS", 0, "Press", ""},
 	{KM_RELEASE, "RELEASE", 0, "Release", ""},
 	{KM_CLICK, "CLICK", 0, "Click", ""},
+	{KM_DBL_CLICK, "DOUBLE_CLICK", 0, "Double Click", ""},
 	{0, NULL, 0, NULL, NULL}};
 
 EnumPropertyItem event_tweak_value_items[]= {
@@ -871,16 +872,19 @@
 
 	prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
 	RNA_def_property_string_sdna(prop, NULL, "idname");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Name", "Name of the key map.");
 	RNA_def_struct_name_property(srna, prop);
 
 	prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "spaceid");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_enum_items(prop, space_type_items);
 	RNA_def_property_ui_text(prop, "Space Type", "Optional space type keymap is associated with.");
 
 	prop= RNA_def_property(srna, "region_type", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "regionid");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_enum_items(prop, region_type_items);
 	RNA_def_property_ui_text(prop, "Region Type", "Optional region type keymap is associated with.");
 
@@ -894,8 +898,14 @@
 
 	prop= RNA_def_property(srna, "modal", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_MODAL);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Modal Keymap", "Indicates that a keymap is used for translate modal events for an operator.");
 
+	prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_EXPANDED);
+	RNA_def_property_ui_text(prop, "Expanded", "Expanded in the user interface.");
+
+
 	RNA_api_keymap(srna);
 
 	/* KeyMapItem */

Modified: trunk/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_types.h	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/windowmanager/WM_types.h	2009-12-10 17:41:03 UTC (rev 25293)
@@ -83,6 +83,7 @@
 #define KM_PRESS	1
 #define KM_RELEASE	2
 #define KM_CLICK	3
+#define KM_DBL_CLICK	4
 
 
 /* ************** UI Handler ***************** */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-12-10 17:37:04 UTC (rev 25292)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-12-10 17:41:03 UTC (rev 25293)
@@ -60,6 +60,8 @@
 
 #include "UI_interface.h"
 
+#include "PIL_time.h"
+
 #include "WM_api.h"
 #include "WM_types.h"
 #include "wm.h"
@@ -1163,6 +1165,12 @@
 			event->val = KM_CLICK;
 			action |= wm_handlers_do(C, event, handlers);
 
+			/* if not handled and time is right, check double click */
+			if ((action & WM_HANDLER_BREAK) == 0 && (PIL_check_seconds_timer() - win->last_click_time) * 1000 < U.dbl_click_time) {
+				event->val = KM_DBL_CLICK;
+				action |= wm_handlers_do(C, event, handlers);
+			}
+
 			/* revert value if not handled */
 			if ((action & WM_HANDLER_BREAK) == 0) {
 				event->val = KM_RELEASE;
@@ -1354,11 +1362,22 @@
 			/* mousemove event don't overwrite last type */
 			if (event->type != MOUSEMOVE) {
 				if (action == WM_HANDLER_CONTINUE || action == (WM_HANDLER_BREAK|WM_HANDLER_MODAL)) {
+					if (win->last_type == event->type) {
+						/* set click time on first click (press -> release) */
+						if (win->last_val == KM_PRESS && event->val == KM_RELEASE) {
+							win->last_click_time = PIL_check_seconds_timer();
+						}
+					} else {
+						/* reset click time if event type not the same */
+						win->last_click_time = 0;
+					}
+
+					win->last_val = event->val;
 					win->last_type = event->type;
-					win->last_val = event->val;
 				} else {
 					win->last_type = -1;
 					win->last_val = 0;
+					win->last_click_time = 0;
 				}
 			}
 





More information about the Bf-blender-cvs mailing list