Fixed x86 (32-bit) build

Closes #7
This commit is contained in:
Daniel Collin 2016-01-05 21:22:20 +01:00
parent 8068262c99
commit 57b734457e
2 changed files with 23 additions and 4 deletions

View file

@ -47,7 +47,7 @@ fn main() {
Status
------
Currently Mac, Linux and Windows (64-bit, 32-bit will be fixed soon) are the current supported platforms. X11 (Linux/FreeBSD/etc) support has been tested on Ubuntu (x64). Bug report(s) for other OSes/CPUs are welcome!
Currently Mac, Linux and Windows (64-bit and 32-bit) are the current supported platforms. X11 (Linux/FreeBSD/etc) support has been tested on Ubuntu (x64). Bug report(s) for other OSes/CPUs are welcome!
Build instructions

View file

@ -17,7 +17,6 @@ use std::mem;
use self::winapi::windef::HWND;
use self::winapi::windef::HDC;
use self::winapi::winuser::WS_OVERLAPPEDWINDOW;
use self::winapi::winuser::WNDCLASSW;
use self::winapi::wingdi::BITMAPINFOHEADER;
use self::winapi::wingdi::RGBQUAD;
@ -135,6 +134,26 @@ fn update_key_state(window: &mut Window, wparam: u32, state: bool) {
}
#[cfg(target_arch = "x86_64")]
unsafe fn set_window_long(window: winapi::HWND, data: winapi::LONG_PTR) -> winapi::LONG_PTR {
user32::SetWindowLongPtrW(window, winapi::winuser::GWLP_USERDATA, data)
}
#[cfg(target_arch = "x86_64")]
unsafe fn get_window_long(window: winapi::HWND) -> winapi::LONG_PTR {
user32::GetWindowLongPtrW(window, winapi::winuser::GWLP_USERDATA)
}
#[cfg(target_arch = "x86")]
unsafe fn set_window_long(window: winapi::HWND, data: winapi::LONG) -> winapi::LONG {
user32::SetWindowLongW(window, winapi::winuser::GWLP_USERDATA, data)
}
#[cfg(target_arch = "x86")]
unsafe fn get_window_long(window: winapi::HWND) -> winapi::LONG {
user32::GetWindowLongW(window, winapi::winuser::GWLP_USERDATA)
}
unsafe extern "system" fn wnd_proc(window: winapi::HWND,
msg: winapi::UINT,
wparam: winapi::WPARAM,
@ -143,7 +162,7 @@ unsafe extern "system" fn wnd_proc(window: winapi::HWND,
// This make sure we actually don't do anything before the user data has been setup for the
// window
let user_data = user32::GetWindowLongPtrW(window, winapi::winuser::GWLP_USERDATA);
let user_data = get_window_long(window);
if user_data == 0 {
return user32::DefWindowProcW(window, msg, wparam, lparam);
@ -370,7 +389,7 @@ impl Window {
self.buffer = buffer.iter().cloned().collect();
user32::SetWindowLongPtrW(window, winapi::winuser::GWLP_USERDATA, mem::transmute(self));
set_window_long(window, mem::transmute(self));
user32::InvalidateRect(window, ptr::null_mut(), winapi::TRUE);
while user32::PeekMessageW(&mut msg, window, 0, 0, winapi::winuser::PM_REMOVE) != 0 {