aboutsummaryrefslogtreecommitdiffstats
path: root/src/api/win32
diff options
context:
space:
mode:
authortomaka <pierre.krieger1708@gmail.com>2015-09-24 08:29:12 +0200
committertomaka <pierre.krieger1708@gmail.com>2015-09-24 08:29:12 +0200
commit28029c8038cfb5582b56d95431e40b2c0a6289da (patch)
treeaf5061e80b8819046d48de7012cfe8864b6065db /src/api/win32
parenta448043b16127be97be6c492be5831a5965d1145 (diff)
parent4046a892ee5d8e7ac3b3a4e42d8692e878dceb7f (diff)
downloadglutin-28029c8038cfb5582b56d95431e40b2c0a6289da.tar.gz
glutin-28029c8038cfb5582b56d95431e40b2c0a6289da.zip
Merge pull request #613 from mvdnes/windows_set_size
Fix Window.set_inner_size() on win32
Diffstat (limited to 'src/api/win32')
-rw-r--r--src/api/win32/mod.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/api/win32/mod.rs b/src/api/win32/mod.rs
index 0bc36a7..81e1c16 100644
--- a/src/api/win32/mod.rs
+++ b/src/api/win32/mod.rs
@@ -196,8 +196,17 @@ impl Window {
use libc;
unsafe {
- user32::SetWindowPos(self.window.0, ptr::null_mut(), 0, 0, x as libc::c_int,
- y as libc::c_int, winapi::SWP_NOZORDER | winapi::SWP_NOREPOSITION | winapi::SWP_NOMOVE);
+ // Calculate the outer size based upon the specified inner size
+ let mut rect = winapi::RECT { top: 0, left: 0, bottom: y as winapi::LONG, right: x as winapi::LONG };
+ let dw_style = user32::GetWindowLongA(self.window.0, winapi::GWL_STYLE) as winapi::DWORD;
+ let b_menu = !user32::GetMenu(self.window.0).is_null() as winapi::BOOL;
+ let dw_style_ex = user32::GetWindowLongA(self.window.0, winapi::GWL_EXSTYLE) as winapi::DWORD;
+ user32::AdjustWindowRectEx(&mut rect, dw_style, b_menu, dw_style_ex);
+ let outer_x = (rect.right - rect.left).abs() as libc::c_int;
+ let outer_y = (rect.top - rect.bottom).abs() as libc::c_int;
+
+ user32::SetWindowPos(self.window.0, ptr::null_mut(), 0, 0, outer_x, outer_y,
+ winapi::SWP_NOZORDER | winapi::SWP_NOREPOSITION | winapi::SWP_NOMOVE);
user32::UpdateWindow(self.window.0);
}
}