leanshot_xlib/drawable.rs
1use x11::xlib as x;
2
3use {GetDisplay, Image, Rectangle, X11Error};
4
5/// Anything that's drawable
6pub trait Drawable: GetDisplay {
7 /// Get drawable handle
8 fn as_drawable(&self) -> x::Drawable;
9
10 /// Capture a snapshot of this drawable, clipped by rect.
11 fn get_image(&self, rect: Rectangle) -> Result<Image, X11Error> {
12 let image = unsafe {
13 x::XGetImage(
14 self.get_display(),
15 self.as_drawable(),
16 rect.x as i32,
17 rect.y as i32,
18 rect.width,
19 rect.height,
20 0xffffffff,
21 x::ZPixmap,
22 )
23 };
24 Ok(Image { inner: image })
25 }
26}