]> icculus.org git repositories - manmower/openbox.git/blob - openbox/composite.c
i forgot to add these
[manmower/openbox.git] / openbox / composite.c
1 #include "composite.h"
2 #include "openbox.h"
3 #include "extensions.h"
4
5 #ifndef USE_XCOMPOSITE
6 void composite_startup(gboolean reconfig) {}
7 void composite_shutdown(gboolean reconfig) {}
8 gboolean composite_window_has_alpha(Visual *vis) { return FALSE; }
9 XID composite_get_window_picture(Window win, Visual *vis) { return None; }
10 Pixmap composite_get_window_pixmap(Window win) { return None; }
11 #else
12
13 static Picture root_picture = None;
14
15 void composite_startup(gboolean reconfig)
16 {
17     if (reconfig) return;
18     if (!extensions_comp) return;
19
20     /* Redirect window contents to offscreen pixmaps */
21     XCompositeRedirectSubwindows(ob_display,
22                                  RootWindow(ob_display, ob_screen),
23                                  CompositeRedirectAutomatic);
24 }
25
26 void composite_shutdown(gboolean reconfig)
27 {
28     if (reconfig) return;
29     if (!extensions_comp) return;
30 }
31
32 void composite_setup_root_window()
33 {
34     if (root_picture)
35         XRenderFreePicture(ob_display, root_picture);
36
37     root_picture =
38         composite_get_window_picture(RootWindow(ob_display, ob_screen),
39                                      RrVisual(ob_rr_inst));
40 }
41
42 gboolean composite_window_has_alpha(Visual *vis)
43 {
44     XRenderPictFormat *format;
45
46     if (!extensions_comp) return FALSE;
47
48     format = XRenderFindVisualFormat(ob_display, vis);
49     return format->type == PictTypeDirect && format->direct.alphaMask;
50 }
51
52 XID composite_get_window_picture(Window win, Visual *vis)
53 {
54     XRenderPictureAttributes pa;
55     XRenderPictFormat *format;
56
57     if (!extensions_comp) return None;
58
59     format = XRenderFindVisualFormat(ob_display, vis);
60
61     pa.subwindow_mode = IncludeInferiors;
62     return XRenderCreatePicture(ob_display, win, format, CPSubwindowMode, &pa);
63 }
64
65 Pixmap composite_get_window_pixmap(Window win)
66 {
67     if (!extensions_comp) return None;
68
69     return XCompositeNameWindowPixmap(ob_display, win);
70 }
71
72 #endif