b36c74f5e557327f90c61dc5726a2dae20256506
[profile/ivi/ecore.git] / src / lib / ecore_x / xlib / ecore_x_composite.c
1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif /* ifdef HAVE_CONFIG_H */
4
5 #include "ecore_x_private.h"
6 #include "Ecore_X.h"
7
8 static int _composite_available;
9
10 void
11 _ecore_x_composite_init(void)
12 {
13    _composite_available = 0;
14
15 #ifdef ECORE_XCOMPOSITE
16    int major, minor;
17
18    if (XCompositeQueryVersion(_ecore_x_disp, &major, &minor))
19       _composite_available = 1;
20
21 #endif /* ifdef ECORE_XCOMPOSITE */
22 } /* _ecore_x_composite_init */
23
24 EAPI int
25 ecore_x_composite_query(void)
26 {
27    LOGFN(__FILE__, __LINE__, __FUNCTION__);
28    return _composite_available;
29 } /* ecore_x_composite_query */
30
31 EAPI void
32 ecore_x_composite_redirect_window(Ecore_X_Window                win,
33                                   Ecore_X_Composite_Update_Type type)
34 {
35 #ifdef ECORE_XCOMPOSITE
36    int update = CompositeRedirectAutomatic;
37
38    LOGFN(__FILE__, __LINE__, __FUNCTION__);
39    switch(type)
40      {
41       case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
42          update = CompositeRedirectAutomatic;
43          break;
44
45       case ECORE_X_COMPOSITE_UPDATE_MANUAL:
46          update = CompositeRedirectManual;
47          break;
48      } /* switch */
49    XCompositeRedirectWindow(_ecore_x_disp, win, update);
50 #endif /* ifdef ECORE_XCOMPOSITE */
51 } /* ecore_x_composite_redirect_window */
52
53 EAPI void
54 ecore_x_composite_redirect_subwindows(Ecore_X_Window                win,
55                                       Ecore_X_Composite_Update_Type type)
56 {
57 #ifdef ECORE_XCOMPOSITE
58    int update = CompositeRedirectAutomatic;
59
60    LOGFN(__FILE__, __LINE__, __FUNCTION__);
61    switch(type)
62      {
63       case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
64          update = CompositeRedirectAutomatic;
65          break;
66
67       case ECORE_X_COMPOSITE_UPDATE_MANUAL:
68          update = CompositeRedirectManual;
69          break;
70      } /* switch */
71    XCompositeRedirectSubwindows(_ecore_x_disp, win, update);
72 #endif /* ifdef ECORE_XCOMPOSITE */
73 } /* ecore_x_composite_redirect_subwindows */
74
75 EAPI void
76 ecore_x_composite_unredirect_window(Ecore_X_Window                win,
77                                     Ecore_X_Composite_Update_Type type)
78 {
79 #ifdef ECORE_XCOMPOSITE
80    int update = CompositeRedirectAutomatic;
81
82    LOGFN(__FILE__, __LINE__, __FUNCTION__);
83    switch(type)
84      {
85       case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
86          update = CompositeRedirectAutomatic;
87          break;
88
89       case ECORE_X_COMPOSITE_UPDATE_MANUAL:
90          update = CompositeRedirectManual;
91          break;
92      } /* switch */
93    XCompositeUnredirectWindow(_ecore_x_disp, win, update);
94 #endif /* ifdef ECORE_XCOMPOSITE */
95 } /* ecore_x_composite_unredirect_window */
96
97 EAPI void
98 ecore_x_composite_unredirect_subwindows(Ecore_X_Window                win,
99                                         Ecore_X_Composite_Update_Type type)
100 {
101 #ifdef ECORE_XCOMPOSITE
102    int update = CompositeRedirectAutomatic;
103
104    LOGFN(__FILE__, __LINE__, __FUNCTION__);
105    switch(type)
106      {
107       case ECORE_X_COMPOSITE_UPDATE_AUTOMATIC:
108          update = CompositeRedirectAutomatic;
109          break;
110
111       case ECORE_X_COMPOSITE_UPDATE_MANUAL:
112          update = CompositeRedirectManual;
113          break;
114      } /* switch */
115    XCompositeUnredirectSubwindows(_ecore_x_disp, win, update);
116 #endif /* ifdef ECORE_XCOMPOSITE */
117 } /* ecore_x_composite_unredirect_subwindows */
118
119 EAPI Ecore_X_Pixmap
120 ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win)
121 {
122    Ecore_X_Pixmap pixmap = None;
123
124 #ifdef ECORE_XCOMPOSITE
125    LOGFN(__FILE__, __LINE__, __FUNCTION__);
126    pixmap = XCompositeNameWindowPixmap(_ecore_x_disp, win);
127 #endif /* ifdef ECORE_XCOMPOSITE */
128
129    return pixmap;
130 } /* ecore_x_composite_name_window_pixmap_get */
131
132 EAPI void
133 ecore_x_composite_window_events_disable(Ecore_X_Window win)
134 {
135 #ifdef ECORE_XCOMPOSITE
136    XRectangle rect;
137    rect.x = -1;
138    rect.y = -1;
139    rect.width = 1;
140    rect.height = 1;
141    XShapeCombineRectangles(_ecore_x_disp, win, ShapeInput, 0, 0, &rect, 1,
142                            ShapeSet, Unsorted);
143 #endif /* ifdef ECORE_XCOMPOSITE */
144 }
145
146 EAPI void
147 ecore_x_composite_window_events_enable(Ecore_X_Window win)
148 {
149 #ifdef ECORE_XCOMPOSITE
150    XRectangle rect;
151    rect.x = 0;
152    rect.y = 0;
153    rect.width = 65535;
154    rect.height = 65535;
155    XShapeCombineRectangles(_ecore_x_disp, win, ShapeInput, 0, 0, &rect, 1,
156                            ShapeSet, Unsorted);
157 #endif /* ifdef ECORE_XCOMPOSITE */
158 }
159
160 EAPI Ecore_X_Window
161 ecore_x_composite_render_window_enable(Ecore_X_Window root)
162 {
163    Ecore_X_Window win = 0;
164 #ifdef ECORE_XCOMPOSITE
165    XRectangle rect;
166
167    LOGFN(__FILE__, __LINE__, __FUNCTION__);
168    win = XCompositeGetOverlayWindow(_ecore_x_disp, root);
169    rect.x = -1;
170    rect.y = -1;
171    rect.width = 1;
172    rect.height = 1;
173    XShapeCombineRectangles(_ecore_x_disp, win, ShapeInput, 0, 0, &rect, 1,
174                            ShapeSet, Unsorted);
175 #endif /* ifdef ECORE_XCOMPOSITE */
176    return win;
177 } /* ecore_x_composite_render_window_enable */
178
179 EAPI void
180 ecore_x_composite_render_window_disable(Ecore_X_Window root)
181 {
182 #ifdef ECORE_XCOMPOSITE
183    LOGFN(__FILE__, __LINE__, __FUNCTION__);
184    XCompositeReleaseOverlayWindow(_ecore_x_disp, root);
185 #endif /* ifdef ECORE_XCOMPOSITE */
186 } /* ecore_x_composite_render_window_disable */
187