summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-06-20 03:02:28 +0000
committerDana Jansens <danakj@orodu.net>2007-06-20 03:02:28 +0000
commit271761db53b38e9235ad492812552f625049dd90 (patch)
tree11b348fef7a29b155207e4f6c20ee4ca3de25e80
parentfa6f70ce3a1e5aff0cdafb4b641128f360278f2a (diff)
i forgot to add these
-rw-r--r--openbox/composite.c72
-rw-r--r--openbox/composite.h14
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