[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