#![cfg(feature="xlib")]
#![allow(non_upper_case_globals)]
extern crate x11;
extern crate vk_rs;
use vk_rs::*;
#[derive(Copy, Clone)]
pub struct Window {
pub display : u64,
pub window : u64,
pub surface : vk::SurfaceKHR,
pub size : vk::Extent2D,
}
impl Window {
pub unsafe fn new(width : u32, height : u32) -> Window {
use x11::*;
let display = xlib::XOpenDisplay(std::ptr::null());
let screen = xlib::XDefaultScreen(display);
let root = xlib::XRootWindow(display, screen);
let mut attributes: xlib::XSetWindowAttributes = std::mem::uninitialized();
attributes.background_pixel = xlib::XWhitePixel(display, screen);
let window = xlib::XCreateWindow(display, root,
0, 0, width, height,
0, 0,
xlib::InputOutput as _, std::ptr::null_mut(),
xlib::CWBackPixel, &mut attributes);
xlib::XSelectInput(display, window, xlib::ExposureMask | xlib::KeyPressMask);
xlib::XMapWindow(display, window);
let mut surface_info = vk::XlibSurfaceCreateInfoKHR::default();
surface_info.dpy = display as _;
surface_info.window = window;
let mut surface = 0;
vk::CreateXlibSurfaceKHR(&surface_info, &mut surface);
let mut supported = 0;
vk::GetPhysicalDeviceSurfaceSupportKHR(0, surface, &mut supported);
Window { display : display as _, window, surface, size : vk::Extent2D {width, height} }
}
pub unsafe fn poll(&self) -> bool {
use x11::*;
use x11::xlib::*;
if XPending(self.display as _) > 0 {
let mut event: x11::xlib::XEvent = std::mem::uninitialized();
XNextEvent(self.display as _, &mut event);
match event.get_type() {
KeyPress => {
println!("{}", event.key.keycode);
if event.key.keycode == 9 {
return false;
}
}
_ => ()
}
}
true
}
pub fn extent(&self) -> vk::Extent2D {
self.size
}
}