eolian: rename is_ref API to is_ptr to match syntax
[platform/upstream/efl.git] / src / lib / ecore_x / xlib / ecore_x_sync.c
1 /*
2  * XSync code
3  */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8
9 #include "Ecore.h"
10 #include "ecore_x_private.h"
11 #include "Ecore_X.h"
12 #include "Ecore_X_Atoms.h"
13
14 EAPI Ecore_X_Sync_Alarm
15 ecore_x_sync_alarm_new(Ecore_X_Sync_Counter counter)
16 {
17    Ecore_X_Sync_Alarm alarm;
18    XSyncAlarmAttributes values;
19    XSyncValue init;
20
21    LOGFN(__FILE__, __LINE__, __FUNCTION__);
22    XSyncIntToValue(&init, 0);
23    XSyncSetCounter(_ecore_x_disp, counter, init);
24
25    values.trigger.counter = counter;
26    values.trigger.value_type = XSyncAbsolute;
27    XSyncIntToValue(&values.trigger.wait_value, 1);
28    values.trigger.test_type = XSyncPositiveComparison;
29
30    XSyncIntToValue(&values.delta, 1);
31
32    values.events = True;
33
34    alarm = XSyncCreateAlarm(_ecore_x_disp,
35                             XSyncCACounter |
36                             XSyncCAValueType |
37                             XSyncCAValue |
38                             XSyncCATestType |
39                             XSyncCADelta |
40                             XSyncCAEvents,
41                             &values);
42
43    ecore_x_sync();
44    return alarm;
45 }
46
47 EAPI Eina_Bool
48 ecore_x_sync_alarm_free(Ecore_X_Sync_Alarm alarm)
49 {
50    LOGFN(__FILE__, __LINE__, __FUNCTION__);
51    return XSyncDestroyAlarm(_ecore_x_disp, alarm);
52 }
53
54 EAPI Eina_Bool
55 ecore_x_sync_counter_query(Ecore_X_Sync_Counter counter,
56                            unsigned int *val)
57 {
58    XSyncValue value;
59
60    LOGFN(__FILE__, __LINE__, __FUNCTION__);
61    if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
62      {
63         *val = (unsigned int)XSyncValueLow32(value);
64         return EINA_TRUE;
65      }
66
67    return EINA_FALSE;
68 }
69
70 EAPI Ecore_X_Sync_Counter
71 ecore_x_sync_counter_new(int val)
72 {
73    XSyncCounter counter;
74    XSyncValue v;
75
76    LOGFN(__FILE__, __LINE__, __FUNCTION__);
77    XSyncIntToValue(&v, val);
78    counter = XSyncCreateCounter(_ecore_x_disp, v);
79    return counter;
80 }
81
82 EAPI void
83 ecore_x_sync_counter_free(Ecore_X_Sync_Counter counter)
84 {
85    LOGFN(__FILE__, __LINE__, __FUNCTION__);
86    XSyncDestroyCounter(_ecore_x_disp, counter);
87 }
88
89 EAPI void
90 ecore_x_sync_counter_inc(Ecore_X_Sync_Counter counter,
91                          int by)
92 {
93    XSyncValue v;
94
95    LOGFN(__FILE__, __LINE__, __FUNCTION__);
96    XSyncIntToValue(&v, by);
97    XSyncChangeCounter(_ecore_x_disp, counter, v);
98 }
99
100 EAPI void
101 ecore_x_sync_counter_val_wait(Ecore_X_Sync_Counter counter,
102                               int val)
103 {
104    XSyncWaitCondition cond;
105    XSyncValue v, v2;
106
107    LOGFN(__FILE__, __LINE__, __FUNCTION__);
108    XSyncQueryCounter(_ecore_x_disp, counter, &v);
109    XSyncIntToValue(&v, val);
110    XSyncIntToValue(&v2, val + 1);
111    cond.trigger.counter = counter;
112    cond.trigger.value_type = XSyncAbsolute;
113    cond.trigger.wait_value = v;
114    cond.trigger.test_type = XSyncPositiveComparison;
115    cond.event_threshold = v2;
116    XSyncAwait(_ecore_x_disp, &cond, 1);
117 //   XSync(_ecore_x_disp, False); // dont need this
118 }
119
120 EAPI void
121 ecore_x_sync_counter_set(Ecore_X_Sync_Counter counter,
122                          int val)
123 {
124    XSyncValue v;
125
126    LOGFN(__FILE__, __LINE__, __FUNCTION__);
127    XSyncIntToValue(&v, val);
128    XSyncSetCounter(_ecore_x_disp, counter, v);
129 }
130
131 EAPI void
132 ecore_x_sync_counter_2_set(Ecore_X_Sync_Counter counter,
133                            int val_hi,
134                            unsigned int val_lo)
135 {
136    XSyncValue v;
137
138    LOGFN(__FILE__, __LINE__, __FUNCTION__);
139    XSyncIntsToValue(&v, val_lo, val_hi);
140    XSyncSetCounter(_ecore_x_disp, counter, v);
141 }
142
143 EAPI Eina_Bool
144 ecore_x_sync_counter_2_query(Ecore_X_Sync_Counter counter,
145                              int *val_hi,
146                              unsigned int *val_lo)
147 {
148    XSyncValue value;
149
150    LOGFN(__FILE__, __LINE__, __FUNCTION__);
151    if (XSyncQueryCounter(_ecore_x_disp, counter, &value))
152      {
153         *val_lo = (unsigned int)XSyncValueLow32(value);
154         *val_hi = (int)XSyncValueHigh32(value);
155         return EINA_TRUE;
156      }
157    return EINA_FALSE;
158 }
159