Merge pull request #611 from vvuk/win32

fix up win32 support
This commit is contained in:
tomaka 2015-09-23 13:09:36 +02:00
commit 3820d307a3
4 changed files with 27 additions and 8 deletions

2
.gitignore vendored
View file

@ -1,2 +1,4 @@
Cargo.lock Cargo.lock
target/ target/
*~
#*#

View file

@ -56,7 +56,7 @@ core-graphics = "0"
winapi = "0.2" winapi = "0.2"
shell32-sys = "0.1" shell32-sys = "0.1"
gdi32-sys = "0.1" gdi32-sys = "0.1"
user32-sys = "~0.1.1" user32-sys = "~0.1.2"
kernel32-sys = "0.1" kernel32-sys = "0.1"
dwmapi-sys = "0.1" dwmapi-sys = "0.1"
@ -64,7 +64,7 @@ dwmapi-sys = "0.1"
winapi = "0.2" winapi = "0.2"
shell32-sys = "0.1" shell32-sys = "0.1"
gdi32-sys = "0.1" gdi32-sys = "0.1"
user32-sys = "~0.1.1" user32-sys = "~0.1.2"
kernel32-sys = "0.1" kernel32-sys = "0.1"
dwmapi-sys = "0.1" dwmapi-sys = "0.1"
@ -72,7 +72,7 @@ dwmapi-sys = "0.1"
winapi = "0.2" winapi = "0.2"
shell32-sys = "0.1" shell32-sys = "0.1"
gdi32-sys = "0.1" gdi32-sys = "0.1"
user32-sys = "~0.1.1" user32-sys = "~0.1.2"
kernel32-sys = "0.1" kernel32-sys = "0.1"
dwmapi-sys = "0.1" dwmapi-sys = "0.1"
@ -80,7 +80,7 @@ dwmapi-sys = "0.1"
winapi = "0.2" winapi = "0.2"
shell32-sys = "0.1" shell32-sys = "0.1"
gdi32-sys = "0.1" gdi32-sys = "0.1"
user32-sys = "~0.1.1" user32-sys = "~0.1.2"
kernel32-sys = "0.1" kernel32-sys = "0.1"
dwmapi-sys = "0.1" dwmapi-sys = "0.1"

View file

@ -281,6 +281,12 @@ pub unsafe extern "system" fn callback(window: winapi::HWND, msg: winapi::UINT,
0 0
}, },
x if x == *super::WAKEUP_MSG_ID => {
use events::Event::Awakened;
send_event(window, Awakened);
0
},
_ => { _ => {
user32::DefWindowProcW(window, msg, wparam, lparam) user32::DefWindowProcW(window, msg, wparam, lparam)
} }

View file

@ -38,6 +38,10 @@ mod event;
mod init; mod init;
mod monitor; mod monitor;
lazy_static! {
static ref WAKEUP_MSG_ID: u32 = unsafe { user32::RegisterWindowMessageA("Glutin::EventID".as_ptr() as *const i8) };
}
/// The Win32 implementation of the main `Window` object. /// The Win32 implementation of the main `Window` object.
pub struct Window { pub struct Window {
/// Main handle for the window. /// Main handle for the window.
@ -75,11 +79,15 @@ impl Drop for WindowWrapper {
} }
#[derive(Clone)] #[derive(Clone)]
pub struct WindowProxy; pub struct WindowProxy {
hwnd: winapi::HWND,
}
impl WindowProxy { impl WindowProxy {
pub fn wakeup_event_loop(&self) { pub fn wakeup_event_loop(&self) {
unimplemented!() unsafe {
user32::PostMessageA(self.hwnd, *WAKEUP_MSG_ID, 0, 0);
}
} }
} }
@ -189,7 +197,7 @@ impl Window {
} }
pub fn create_window_proxy(&self) -> WindowProxy { pub fn create_window_proxy(&self) -> WindowProxy {
WindowProxy WindowProxy { hwnd: self.window.0 }
} }
/// See the docs in the crate root file. /// See the docs in the crate root file.
@ -207,7 +215,10 @@ impl Window {
} }
pub fn platform_display(&self) -> *mut libc::c_void { pub fn platform_display(&self) -> *mut libc::c_void {
unimplemented!() // What should this return on win32?
// It could be GetDC(NULL), but that requires a ReleaseDC()
// to avoid leaking the DC.
ptr::null_mut()
} }
pub fn platform_window(&self) -> *mut libc::c_void { pub fn platform_window(&self) -> *mut libc::c_void {