gonna call it a night
This commit is contained in:
parent
a143b79c97
commit
45827f5124
3 changed files with 10 additions and 12 deletions
|
@ -1,2 +0,0 @@
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@ pub fn capture(opt: &Options) -> Result<Image, ScreenshotError> {
|
||||||
Region::Fullscreen | Region::Selection => gui.get_root_window(),
|
Region::Fullscreen | Region::Selection => gui.get_root_window(),
|
||||||
Region::ActiveWindow => gui.get_active_window(),
|
Region::ActiveWindow => gui.get_active_window(),
|
||||||
};
|
};
|
||||||
println!("capturing window: {}", window_to_capture);
|
|
||||||
|
|
||||||
let mut capture = gui.window_capture(window_to_capture)?;
|
let mut capture = gui.window_capture(window_to_capture)?;
|
||||||
println!("captured the window");
|
println!("captured the window");
|
||||||
|
|
19
src/gui.rs
19
src/gui.rs
|
@ -1,7 +1,7 @@
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
|
|
||||||
use libc;
|
use libc;
|
||||||
use x11::xlib::{self, *};
|
use x11::xlib::*;
|
||||||
|
|
||||||
use errors::ScreenshotError;
|
use errors::ScreenshotError;
|
||||||
use image::Image;
|
use image::Image;
|
||||||
|
@ -14,13 +14,13 @@ pub struct GUI {
|
||||||
impl GUI {
|
impl GUI {
|
||||||
pub fn new() -> Result<Self, ScreenshotError> {
|
pub fn new() -> Result<Self, ScreenshotError> {
|
||||||
let display_str = CString::new(":0").unwrap();
|
let display_str = CString::new(":0").unwrap();
|
||||||
let display = unsafe { xlib::XOpenDisplay(display_str.as_ptr()) };
|
let display = unsafe { XOpenDisplay(display_str.as_ptr()) };
|
||||||
if display.is_null() {
|
if display.is_null() {
|
||||||
return Err(ScreenshotError::XError {
|
return Err(ScreenshotError::XError {
|
||||||
message: format!("failed to open display"),
|
message: format!("failed to open display"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
unsafe { XGrabServer(display) };
|
// unsafe { XGrabServer(display) };
|
||||||
Ok(GUI { display })
|
Ok(GUI { display })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ impl GUI {
|
||||||
let attr = self.get_window_attributes(window)?;
|
let attr = self.get_window_attributes(window)?;
|
||||||
println!("got window attributes");
|
println!("got window attributes");
|
||||||
let image = unsafe {
|
let image = unsafe {
|
||||||
xlib::XGetImage(
|
XGetImage(
|
||||||
self.display,
|
self.display,
|
||||||
window,
|
window,
|
||||||
(*attr).x,
|
(*attr).x,
|
||||||
|
@ -60,14 +60,15 @@ impl GUI {
|
||||||
|
|
||||||
/// Get the full screen.
|
/// Get the full screen.
|
||||||
pub fn get_root_window(&self) -> Window {
|
pub fn get_root_window(&self) -> Window {
|
||||||
unsafe { xlib::XRootWindow(self.display, 0) as Window }
|
unsafe { XRootWindow(self.display, 0) as Window }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the active window.
|
/// Get the active window.
|
||||||
pub fn get_active_window(&self) -> Window {
|
pub fn get_active_window(&self) -> Window {
|
||||||
let mut window: Window = unsafe { ::std::mem::uninitialized() };
|
let mut window: Window = self.get_root_window();
|
||||||
let mut revert_to_return: i32 = unsafe { ::std::mem::uninitialized() };
|
let mut revert_to_return: i32 = RevertToParent;
|
||||||
unsafe { xlib::XGetInputFocus(self.display, &mut window, &mut revert_to_return) };
|
unsafe { XGetInputFocus(self.display, &mut window, &mut revert_to_return) };
|
||||||
|
unsafe { XMapRaised(self.display, window) };
|
||||||
window
|
window
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,6 +80,6 @@ impl GUI {
|
||||||
|
|
||||||
impl Drop for GUI {
|
impl Drop for GUI {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
unsafe { XUngrabServer(self.display) };
|
// unsafe { XUngrabServer(self.display) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue