hacksaw/src/main.rs

67 lines
1.9 KiB
Rust

extern crate xcb;
fn main() {
let (conn, screen_num) = xcb::Connection::connect(None).unwrap();
let setup = conn.get_setup();
let screen = setup.roots().nth(screen_num as usize).unwrap();
let window = conn.generate_id();
let values = [
(xcb::CW_BACK_PIXEL, screen.white_pixel()),
(
xcb::CW_EVENT_MASK,
xcb::EVENT_MASK_EXPOSURE
| xcb::EVENT_MASK_KEY_PRESS // we'll need this later
| xcb::EVENT_MASK_BUTTON_PRESS
| xcb::EVENT_MASK_BUTTON_RELEASE,
),
];
xcb::create_window(
&conn,
xcb::COPY_FROM_PARENT as u8,
window,
screen.root(),
0,
0,
150,
150,
10,
xcb::WINDOW_CLASS_INPUT_OUTPUT as u16,
screen.root_visual(),
&values,
);
xcb::map_window(&conn, window);
conn.flush();
loop {
let ev = conn.wait_for_event();
match ev {
None => {
break;
}
Some(ev) => {
let r = ev.response_type();
if r == xcb::BUTTON_PRESS as u8 {
let button_press: &xcb::ButtonPressEvent = unsafe { xcb::cast_event(&ev) };
println!(
"Mouse press: x={}, y={}",
button_press.event_x(),
button_press.event_y()
);
} else if r == xcb::BUTTON_RELEASE as u8 {
let button_release: &xcb::ButtonReleaseEvent = unsafe { xcb::cast_event(&ev) };
println!(
"Mouse release: x={}, y={}",
button_release.event_x(),
button_release.event_y()
);
break; // Move on after mouse released
}
}
};
}
}