1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
4 * Moonlight List (moonlight-list@lists.ximian.com)
6 * Copyright 2007 Novell, Inc. (http://www.novell.com)
8 * See the LICENSE file included with the distribution for details.
12 #ifndef MOON_TIMEMANAGER_H
13 #define MOON_TIMEMANAGER_H
18 #include "timesource.h"
19 #include "dependencyobject.h"
21 // our root level time manager (basically the object that registers
22 // the gtk_timeout and drives all Clock objects
23 /* @Namespace=None,ManagedEvents=Manual */
24 class TimeManager
: public EventObject
{
33 TimeSource
*GetSource() { return source
; }
35 void AddClock (Clock
*clock
);
37 virtual TimeSpan
GetCurrentTime () { return current_global_time
- start_time
; }
38 virtual TimeSpan
GetLastTime () { return last_global_time
- start_time
; }
39 TimeSpan
GetCurrentTimeUsec () { return current_global_time_usec
- start_time_usec
; }
41 /* @GenerateCBinding,GeneratePInvoke */
42 void AddTickCall (TickCallHandler handler
, EventObject
*tick_data
);
43 /* @GenerateCBinding,GeneratePInvoke */
44 void RemoveTickCall (TickCallHandler handler
, EventObject
*tick_data
);
45 /* @GenerateCBinding,GeneratePInvoke */
46 void AddDispatcherCall (TickCallHandler handler
, EventObject
*tick_data
);
49 void NeedClockTick ();
51 void InvokeTickCalls ();
53 /* @GenerateCBinding, GeneratePInvoke */
54 guint
AddTimeout (gint priority
, guint ms_interval
, GSourceFunc func
, gpointer timeout_data
);
55 /* @GenerateCBinding, GeneratePInvoke */
56 void RemoveTimeout (guint timeout_id
);
58 /* @GenerateCBinding,GeneratePInvoke,ManagedAccess=Internal,Version=2 */
59 void SetMaximumRefreshRate (int hz
);
60 /* @GenerateCBinding,GeneratePInvoke,ManagedAccess=Internal,Version=2 */
61 int GetMaximumRefreshRate () { return max_fps
; }
63 // Events you can AddHandler to
64 const static int UpdateInputEvent
;
65 const static int RenderEvent
;
68 Applier
* GetApplier () { return applier
; }
71 virtual ~TimeManager ();
75 TimelineGroup
*timeline
;
76 ClockGroup
*root_clock
;
81 void RemoveAllRegisteredTimeouts ();
83 TimeSpan current_global_time
;
84 TimeSpan last_global_time
;
87 TimeSpan current_global_time_usec
;
88 TimeSpan start_time_usec
;
90 static void source_tick_callback (EventObject
*sender
, EventArgs
*calldata
, gpointer closure
);
91 bool source_tick_pending
;
97 TimeSpan previous_smoothed
;
100 TIME_MANAGER_UPDATE_CLOCKS
= 0x01,
101 TIME_MANAGER_RENDER
= 0x02,
102 TIME_MANAGER_TICK_CALL
= 0x04,
103 TIME_MANAGER_UPDATE_INPUT
= 0x08
111 Queue dispatcher_calls
;
113 GList
*registered_timeouts
;
118 bool find_tick_call (List::Node
*node
, void *data
);
122 #endif /* MOON_TIMEMANAGER_H */