svn update: 48958 (latest:48959)
[framework/uifw/ecore.git] / src / lib / ecore_x / xlib / ecore_x_sync.c
1 /*
2  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3  */
4
5 /*
6  * XSync code
7  */
8
9 #ifdef HAVE_CONFIG_H
10 # include <config.h>
11 #endif
12
13 #include "Ecore.h"
14 #include "ecore_x_private.h"
15 #include "Ecore_X.h"
16 #include "Ecore_X_Atoms.h"
17
18 EAPI Ecore_X_Sync_Alarm
19 ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
20 {
21    Ecore_X_Sync_Alarm alarm;
22    XSyncAlarmAttributes values;
23    XSyncValue init;
24
25    LOGFN(__FILE__, __LINE__, __FUNCTION__);
26    XSyncIntToValue(&init, 0);
27    XSyncSetCounter(_ecore_x_disp, counter, init);
28    
29    values.trigger.counter = counter;
30    values.trigger.value_type = XSyncAbsolute;
31    XSyncIntToValue(&values.trigger.wait_value, 1);
32    values.trigger.test_type = XSyncPositiveComparison;
33
34    XSyncIntToValue(&values.delta, 1);
35
36    values.events = True;
37
38    alarm = XSyncCreateAlarm(_ecore_x_disp,
39                             XSyncCACounter |
40                             XSyncCAValueType |
41                             XSyncCAValue |
42                             XSyncCATestType |
43                             XSyncCADelta |
44                             XSyncCAEvents,
45                             &values);
46
47    ecore_x_sync();
48    return alarm;
49 }
50
51 EAPI int
52 ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm)
53 {
54    LOGFN(__FILE__, __LINE__, __FUNCTION__);
55    return XSyncDestroyAlarm(_ecore_x_disp, alarm);
56 }
57
58 EAPI int
59 ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter, unsigned int *val)
60 {
61    XSyncValue value;
62    
63    LOGFN(__FILE__, __LINE__, __FUNCTION__);
64    if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
65      {
66         *val = (unsigned int) XSyncValueLow32(value);
67         return 1;
68      }
69    
70    return 0;
71 }
72
73 EAPI Ecore_X_Sync_Counter
74 ecore_x_sync_counter_new(int val)
75 {
76    XSyncCounter counter;
77    XSyncValue v;
78    
79    LOGFN(__FILE__, __LINE__, __FUNCTION__);
80    XSyncIntToValue(&v, val);
81    counter = XSyncCreateCounter(_ecore_x_disp, v);
82    return counter;
83 }
84
85 EAPI void
86 ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
87 {
88    LOGFN(__FILE__, __LINE__, __FUNCTION__);
89    XSyncDestroyCounter(_ecore_x_disp, counter);
90 }
91
92 EAPI void
93 ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter, int by)
94 {
95    XSyncValue v;
96    
97    LOGFN(__FILE__, __LINE__, __FUNCTION__);
98    XSyncIntToValue(&v, by);
99    XSyncChangeCounter(_ecore_x_disp, counter, v);
100 }
101
102 EAPI void
103 ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter, int val)
104 {
105    XSyncWaitCondition cond;
106    XSyncValue v, v2;
107
108    LOGFN(__FILE__, __LINE__, __FUNCTION__);
109    XSyncQueryCounter(_ecore_x_disp, counter, &v);
110    XSyncIntToValue(&v, val);
111    XSyncIntToValue(&v2, val + 1);
112    cond.trigger.counter = counter;
113    cond.trigger.value_type = XSyncAbsolute;
114    cond.trigger.wait_value = v;
115    cond.trigger.test_type = XSyncPositiveComparison;
116    cond.event_threshold = v2;
117    XSyncAwait(_ecore_x_disp, &cond, 1);
118 //   XSync(_ecore_x_disp, False); // dont need this
119 }