[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