Implement CursorPositionChanged event for X11

This commit is contained in:
Pierre Krieger 2014-07-28 13:25:28 +02:00
parent 5764b9c243
commit 433c5b956e
2 changed files with 28 additions and 2 deletions

View file

@ -18,6 +18,7 @@ pub type GLXPixmap = XID;
pub type GLXWindow = XID;
pub type Pixmap = XID;
pub type Status = libc::c_int; // TODO: not sure
pub type Time = libc::c_ulong;
pub type Visual = (); // TODO: not sure
pub type VisualID = libc::c_ulong; // TODO: not sure
pub type Window = XID;
@ -241,7 +242,7 @@ pub struct XClientMessageEvent {
pub l: [libc::c_long, ..5],
}
#[reprc(C)]
#[repr(C)]
pub struct XResizeRequestEvent {
pub type_: libc::c_int,
pub serial: libc::c_ulong,
@ -252,6 +253,25 @@ pub struct XResizeRequestEvent {
pub height: libc::c_int,
}
#[repr(C)]
pub struct XMotionEvent {
pub type_: libc::c_int,
pub serial: libc::c_ulong,
pub send_event: Bool,
pub display: *mut Display,
pub window: Window,
pub root: Window,
pub subwindow: Window,
pub time: Time,
pub x: libc::c_int,
pub y: libc::c_int,
pub x_root: libc::c_int,
pub y_root: libc::c_int,
pub state: libc::c_uint,
pub is_hint: libc::c_char,
pub same_screen: Bool,
}
#[link(name = "GL")]
#[link(name = "X11")]
extern "C" {

View file

@ -61,7 +61,7 @@ impl Window {
let mut swa: ffi::XSetWindowAttributes = unsafe { mem::zeroed() };
swa.colormap = cmap;
swa.event_mask = ffi::ExposureMask | ffi::ResizeRedirectMask |
ffi::VisibilityChangeMask | ffi::KeyPressMask;
ffi::VisibilityChangeMask | ffi::KeyPressMask | ffi::PointerMotionMask;
swa
};
@ -168,6 +168,12 @@ impl Window {
events.push(SizeChanged(rs_event.width as uint, rs_event.height as uint));
},
ffi::MotionNotify => {
use CursorPositionChanged;
let event: &ffi::XMotionEvent = unsafe { mem::transmute(&xev) };
events.push(CursorPositionChanged(event.x as uint, event.y as uint));
},
_ => ()
}