[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35837] trunk/blender/source/blender/ makesrna: RNA functions for adding timer (needed for demo mode, also useful for python modal operators).

Campbell Barton ideasman42 at gmail.com
Mon Mar 28 06:55:24 CEST 2011


Revision: 35837
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35837
Author:   campbellbarton
Date:     2011-03-28 04:55:24 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
RNA functions for adding timer (needed for demo mode, also useful for python modal operators).
 - timer = WindowManager.event_timer_add(time_step, window=None)
 - WindowManager.event_timer_remove(timer)

Still TODO, is a way for python to check the timer identity.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_wm.c
    trunk/blender/source/blender/makesrna/intern/rna_wm_api.c

Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h	2011-03-28 04:22:50 UTC (rev 35836)
+++ trunk/blender/source/blender/makesrna/RNA_access.h	2011-03-28 04:55:24 UTC (rev 35837)
@@ -532,6 +532,7 @@
 extern StructRNA RNA_ThemeWidgetColors;
 extern StructRNA RNA_ThemeWidgetStateColors;
 extern StructRNA RNA_TimelineMarker;
+extern StructRNA RNA_Timer;
 extern StructRNA RNA_ToolSettings;
 extern StructRNA RNA_TouchSensor;
 extern StructRNA RNA_TrackToConstraint;

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c	2011-03-28 04:22:50 UTC (rev 35836)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c	2011-03-28 04:55:24 UTC (rev 35837)
@@ -1418,6 +1418,36 @@
 	RNA_define_verify_sdna(1); // not in sdna
 }
 
+static void rna_def_timer(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna= RNA_def_struct(brna, "Timer", NULL);
+	RNA_def_struct_ui_text(srna, "Timer", "Window event timer");
+	RNA_def_struct_sdna(srna, "wmTimer");
+
+	RNA_define_verify_sdna(0); // not in sdna
+
+	/* could wrap more, for now this is enough */
+	prop= RNA_def_property(srna, "time_step", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "timestep");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Time Step", "");
+
+	prop= RNA_def_property(srna, "time_delta", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "delta");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Delta", "Time since last step in seconds");
+
+	prop= RNA_def_property(srna, "time_duration", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "duration");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Delta", "Time since last step in seconds");
+
+	RNA_define_verify_sdna(1); // not in sdna
+}
+
 static void rna_def_window(BlenderRNA *brna)
 {
 	StructRNA *srna;
@@ -1801,6 +1831,7 @@
 	rna_def_macro_operator(brna);
 	rna_def_operator_type_macro(brna);
 	rna_def_event(brna);
+	rna_def_timer(brna);
 	rna_def_window(brna);
 	rna_def_windowmanager(brna);
 	rna_def_keyconfig(brna);

Modified: trunk/blender/source/blender/makesrna/intern/rna_wm_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm_api.c	2011-03-28 04:22:50 UTC (rev 35836)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm_api.c	2011-03-28 04:55:24 UTC (rev 35837)
@@ -73,6 +73,17 @@
 	return WM_event_add_modal_handler(C, operator) != NULL;
 }
 
+/* XXX, need a way for python to know event types, 0x0110 is hard coded */
+struct wmTimer *rna_event_timer_add(struct wmWindowManager *wm, float time_step, wmWindow *win)
+{
+	return WM_event_add_timer(wm, win, 0x0110, time_step);
+}
+
+void rna_event_timer_remove(struct wmWindowManager *wm, wmTimer *timer)
+{
+	return WM_event_remove_timer(wm, timer->win, timer);
+}
+
 #else
 
 #define WM_GEN_INVOKE_EVENT (1<<0)
@@ -118,6 +129,22 @@
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 	RNA_def_function_return(func, RNA_def_boolean(func, "handle", 1, "", ""));
 
+
+	func= RNA_def_function(srna, "event_timer_add", "rna_event_timer_add");
+	parm= RNA_def_property(func, "time_step", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	RNA_def_property_range(parm, 0.0, FLT_MAX);
+	RNA_def_property_ui_text(parm, "Time Step", "Interval in seconds between timer events");
+	parm= RNA_def_pointer(func, "window", "Window", "", "Window to attach the timer to or None.");
+	parm= RNA_def_pointer(func, "result", "Timer", "", "");
+	RNA_def_function_return(func, parm);
+
+
+	func= RNA_def_function(srna, "event_timer_remove", "rna_event_timer_remove");
+	parm= RNA_def_pointer(func, "timer", "Timer", "", "");
+	RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+
 	/* invoke functions, for use with python */
 	func= RNA_def_function(srna, "invoke_props_popup", "WM_operator_props_popup");
 	RNA_def_function_ui_description(func, "Operator popup invoke.");




More information about the Bf-blender-cvs mailing list