diff options
author | tomaka <pierre.krieger1708@gmail.com> | 2015-06-16 08:52:29 +0200 |
---|---|---|
committer | tomaka <pierre.krieger1708@gmail.com> | 2015-06-16 08:52:29 +0200 |
commit | e48c853b9c7a617bf8ba5f31b5fb2088c90c0ee7 (patch) | |
tree | b2c6f190b08b02b6c4abb6a7a94778c698030edd /src | |
parent | 5e8271dad0a56697f0729c094dfe29cab302460b (diff) | |
parent | da4bcad6e32dd2b1df696dd786d6af342f247d0d (diff) | |
download | glutin-e48c853b9c7a617bf8ba5f31b5fb2088c90c0ee7.tar.gz glutin-e48c853b9c7a617bf8ba5f31b5fb2088c90c0ee7.zip |
Merge pull request #484 from pinumbernumber/master
Implement transparency for X11
Diffstat (limited to 'src')
-rw-r--r-- | src/api/x11/window.rs | 26 |
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 { |