[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28642] trunk/blender/source/blender: Restrict keyboard sensor stored events to only what' s appropriate per property
Matt Ebb
matt at mke3.net
Fri May 7 10:10:20 CEST 2010
Revision: 28642
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28642
Author: broken
Date: 2010-05-07 10:10:20 +0200 (Fri, 07 May 2010)
Log Message:
-----------
Restrict keyboard sensor stored events to only what's appropriate per property
(normal key, modifier key, etc)
Modified Paths:
--------------
trunk/blender/source/blender/makesrna/intern/rna_sensor.c
trunk/blender/source/blender/windowmanager/wm_event_types.h
Modified: trunk/blender/source/blender/makesrna/intern/rna_sensor.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sensor.c 2010-05-07 07:57:15 UTC (rev 28641)
+++ trunk/blender/source/blender/makesrna/intern/rna_sensor.c 2010-05-07 08:10:20 UTC (rev 28642)
@@ -32,6 +32,8 @@
#include "DNA_object_types.h"
#include "DNA_sensor_types.h"
+#include "WM_types.h"
+
EnumPropertyItem sensor_type_items[] ={
{SENS_ACTUATOR, "ACTUATOR", 0, "Actuator", ""},
{SENS_ALWAYS, "ALWAYS", 0, "Always", ""},
@@ -151,6 +153,33 @@
return item;
}
+static void rna_Sensor_keyboard_key_set(struct PointerRNA *ptr, int value)
+{
+ bSensor *sens= (bSensor *)ptr->data;
+ bKeyboardSensor *ks = sens->data;
+
+ if (ISKEYBOARD(value) && !ISKEYMODIFIER(value))
+ ks->key = value;
+}
+
+static void rna_Sensor_keyboard_modifier_set(struct PointerRNA *ptr, int value)
+{
+ bSensor *sens= (bSensor *)ptr->data;
+ bKeyboardSensor *ks = sens->data;
+
+ if (ISKEYMODIFIER(value))
+ ks->qual = value;
+}
+
+static void rna_Sensor_keyboard_modifier2_set(struct PointerRNA *ptr, int value)
+{
+ bSensor *sens= (bSensor *)ptr->data;
+ bKeyboardSensor *ks = sens->data;
+
+ if (ISKEYMODIFIER(value))
+ ks->qual2 = value;
+}
+
#else
static void rna_def_sensor(BlenderRNA *brna)
@@ -284,26 +313,22 @@
RNA_def_struct_ui_text(srna, "Keyboard Sensor", "Sensor to detect keyboard events");
RNA_def_struct_sdna_from(srna, "bKeyboardSensor", "data");
- /*
- prop= RNA_def_property(srna, "key", PROP_INT, PROP_NONE);//XXX need to use another input template
- //RNA_def_property_clear_flag(prop, PROP_EDITABLE); // need better range or enum check
- RNA_def_property_ui_text(prop, "Key", "Input key code");
- RNA_def_property_range(prop, 0, 255);
- */
-
prop= RNA_def_property(srna, "key", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "key");
RNA_def_property_enum_items(prop, event_type_items);
+ RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_key_set", NULL);
RNA_def_property_ui_text(prop, "Key", "");
prop= RNA_def_property(srna, "modifier_key", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "qual");
RNA_def_property_enum_items(prop, event_type_items);
+ RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_modifier_set", NULL);
RNA_def_property_ui_text(prop, "Modifier Key", "Modifier key code");
prop= RNA_def_property(srna, "second_modifier_key", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "qual2");
RNA_def_property_enum_items(prop, event_type_items);
+ RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_modifier2_set", NULL);
RNA_def_property_ui_text(prop, "Second Modifier Key", "Modifier key code");
prop= RNA_def_property(srna, "target", PROP_STRING, PROP_NONE);
Modified: trunk/blender/source/blender/windowmanager/wm_event_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/wm_event_types.h 2010-05-07 07:57:15 UTC (rev 28641)
+++ trunk/blender/source/blender/windowmanager/wm_event_types.h 2010-05-07 08:10:20 UTC (rev 28642)
@@ -213,6 +213,9 @@
/* test whether the event is a key on the keyboard */
#define ISKEYBOARD(event) (event >=' ' && event <=320)
+ /* test whether the event is a modifier key */
+#define ISKEYMODIFIER(event) ((event >= LEFTCTRLKEY && event <= LEFTSHIFTKEY) || event == COMMANDKEY)
+
/* test whether the event is a mouse button */
#define ISMOUSE(event) (event >= LEFTMOUSE && event <= MOUSEROTATE)
More information about the Bf-blender-cvs
mailing list