aboutsummaryrefslogtreecommitdiffstats
path: root/src/api/x11
diff options
context:
space:
mode:
authortomaka <pierre.krieger1708@gmail.com>2015-06-16 08:52:29 +0200
committertomaka <pierre.krieger1708@gmail.com>2015-06-16 08:52:29 +0200
commite48c853b9c7a617bf8ba5f31b5fb2088c90c0ee7 (patch)
treeb2c6f190b08b02b6c4abb6a7a94778c698030edd /src/api/x11
parent5e8271dad0a56697f0729c094dfe29cab302460b (diff)
parentda4bcad6e32dd2b1df696dd786d6af342f247d0d (diff)
downloadglutin-e48c853b9c7a617bf8ba5f31b5fb2088c90c0ee7.tar.gz
glutin-e48c853b9c7a617bf8ba5f31b5fb2088c90c0ee7.zip
Merge pull request #484 from pinumbernumber/master
Implement transparency for X11
Diffstat (limited to 'src/api/x11')
-rw-r--r--src/api/x11/window.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/api/x11/window.rs b/src/api/x11/window.rs
index 55ee007..ba0fe52 100644
--- a/src/api/x11/window.rs
+++ b/src/api/x11/window.rs
@@ -342,7 +342,23 @@ impl Window {
if fb.is_null() {
return Err(OsError(format!("glx::ChooseFBConfig failed")));
}
- let preferred_fb = *fb; // TODO: choose more wisely
+
+ let preferred_fb = if builder.transparent {
+ let mut best_fbi_for_transparent = 0isize;
+
+ for i in 0isize..num_fb as isize {
+ let vi = display.glx.as_ref().unwrap().GetVisualFromFBConfig(display.display as *mut _, *fb.offset(i));
+ if (*vi).depth == 32 {
+ best_fbi_for_transparent = i;
+ break;
+ }
+ }
+
+ *fb.offset(best_fbi_for_transparent)
+ } else {
+ *fb // TODO: choose more wisely
+ };
+
(display.xlib.XFree)(fb as *mut _);
preferred_fb
};
@@ -428,11 +444,19 @@ impl Window {
ffi::KeyReleaseMask | ffi::ButtonPressMask |
ffi::ButtonReleaseMask | ffi::KeymapStateMask;
swa.border_pixel = 0;
+ if builder.transparent {
+ swa.background_pixel = 0;
+ }
swa.override_redirect = 0;
swa
};
let mut window_attributes = ffi::CWBorderPixel | ffi::CWColormap | ffi::CWEventMask;
+
+ if builder.transparent {
+ window_attributes |= ffi::CWBackPixel;
+ }
+
if builder.monitor.is_some() {
window_attributes |= ffi::CWOverrideRedirect;
unsafe {