diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-06-20 03:02:28 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-06-20 03:02:28 +0000 |
| commit | 271761db53b38e9235ad492812552f625049dd90 (patch) | |
| tree | 11b348fef7a29b155207e4f6c20ee4ca3de25e80 | |
| parent | fa6f70ce3a1e5aff0cdafb4b641128f360278f2a (diff) | |
i forgot to add these
| -rw-r--r-- | openbox/composite.c | 72 | ||||
| -rw-r--r-- | openbox/composite.h | 14 |
2 files changed, 86 insertions, 0 deletions
diff --git a/openbox/composite.c b/openbox/composite.c new file mode 100644 index 00000000..1e2ce6a9 --- /dev/null +++ b/openbox/composite.c @@ -0,0 +1,72 @@ +#include "composite.h" +#include "openbox.h" +#include "extensions.h" + +#ifndef USE_XCOMPOSITE +void composite_startup(gboolean reconfig) {} +void composite_shutdown(gboolean reconfig) {} +gboolean composite_window_has_alpha(Visual *vis) { return FALSE; } +XID composite_get_window_picture(Window win, Visual *vis) { return None; } +Pixmap composite_get_window_pixmap(Window win) { return None; } +#else + +static Picture root_picture = None; + +void composite_startup(gboolean reconfig) +{ + if (reconfig) return; + if (!extensions_comp) return; + + /* Redirect window contents to offscreen pixmaps */ + XCompositeRedirectSubwindows(ob_display, + RootWindow(ob_display, ob_screen), + CompositeRedirectAutomatic); +} + +void composite_shutdown(gboolean reconfig) +{ + if (reconfig) return; + if (!extensions_comp) return; +} + +void composite_setup_root_window() +{ + if (root_picture) + XRenderFreePicture(ob_display, root_picture); + + root_picture = + composite_get_window_picture(RootWindow(ob_display, ob_screen), + RrVisual(ob_rr_inst)); +} + +gboolean composite_window_has_alpha(Visual *vis) +{ + XRenderPictFormat *format; + + if (!extensions_comp) return FALSE; + + format = XRenderFindVisualFormat(ob_display, vis); + return format->type == PictTypeDirect && format->direct.alphaMask; +} + +XID composite_get_window_picture(Window win, Visual *vis) +{ + XRenderPictureAttributes pa; + XRenderPictFormat *format; + + if (!extensions_comp) return None; + + format = XRenderFindVisualFormat(ob_display, vis); + + pa.subwindow_mode = IncludeInferiors; + return XRenderCreatePicture(ob_display, win, format, CPSubwindowMode, &pa); +} + +Pixmap composite_get_window_pixmap(Window win) +{ + if (!extensions_comp) return None; + + return XCompositeNameWindowPixmap(ob_display, win); +} + +#endif diff --git a/openbox/composite.h b/openbox/composite.h new file mode 100644 index 00000000..94232ffa --- /dev/null +++ b/openbox/composite.h @@ -0,0 +1,14 @@ +#ifndef __composite_h +#define __composite_h + +#include <glib.h> +#include <X11/Xlib.h> + +void composite_startup(gboolean reconfig); +void composite_shutdown(gboolean reconfig); + +gboolean composite_window_has_alpha(Visual *vis); +XID composite_get_window_picture(Window win, Visual *vis); +Pixmap composite_get_window_pixmap(Window win); + +#endif |
