sgl
diff src/wsys_w32.c @ 26:e4c79d2c7f78
finishing win32 module
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 27 Jun 2011 12:19:14 +0300 |
parents | 0eb6abc43ac6 |
children | 25de96fb1526 |
line diff
1.1 --- a/src/wsys_w32.c Mon Jun 27 12:05:51 2011 +0300 1.2 +++ b/src/wsys_w32.c Mon Jun 27 12:19:14 2011 +0300 1.3 @@ -34,6 +34,7 @@ 1.4 /* window management */ 1.5 static int set_active(int id); 1.6 static struct window *find_window(int id); 1.7 +static struct window *find_window_handle(HWND wh); 1.8 static int activate_window(struct window *win); 1.9 static int set_title(const char *str); 1.10 static void redisplay(void); 1.11 @@ -49,6 +50,7 @@ 1.12 1.13 static LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); 1.14 static int mouse_button(unsigned int msg); 1.15 +static void calc_win_size(int w, int h, int *width, int *height, int *posx, int *posy); 1.16 1.17 1.18 static struct wsys_module ws = { 1.19 @@ -258,7 +260,20 @@ 1.20 struct window *win = winlist; 1.21 1.22 while(win) { 1.23 - if(win->win == id) { 1.24 + if(win->id == id) { 1.25 + return win; 1.26 + } 1.27 + win = win->next; 1.28 + } 1.29 + return 0; 1.30 +} 1.31 + 1.32 +static struct window *find_window_handle(HWND wh) 1.33 +{ 1.34 + struct window *win = winlist; 1.35 + 1.36 + while(win) { 1.37 + if(win->win == wh) { 1.38 return win; 1.39 } 1.40 win = win->next; 1.41 @@ -423,6 +438,41 @@ 1.42 return -1; 1.43 } 1.44 1.45 +static void calc_win_size(int w, int h, int *width, int *height, int *posx, int *posy) 1.46 +{ 1.47 + RECT rect; 1.48 + DEVMODE dmode; 1.49 + unsigned int style = WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_POPUP | WS_SYSMENU | WS_VISIBLE; 1.50 + 1.51 + rect.left = rect.top = 0; 1.52 + rect.right = w; 1.53 + rect.bottom = h; 1.54 + 1.55 + AdjustWindowRect(&rect, style, 0); 1.56 + 1.57 + *width = rect.right - rect.left; 1.58 + *height = rect.bottom - rect.top; 1.59 + 1.60 + *posx = *posy = 0; 1.61 + 1.62 + memset(&dmode, 0, sizeof dmode); 1.63 + dmode.dmSize = sizeof dmode; 1.64 + 1.65 + if(EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &dmode)) { 1.66 + int x, y; 1.67 + 1.68 + x = (dmode.dmPelsWidth - *width) / 2; 1.69 + if(x > 0) { 1.70 + *posx = x; 1.71 + } 1.72 + 1.73 + y = (dmode.dmPelsHeight - *height) / 2; 1.74 + if(y > 0) { 1.75 + *posy = y; 1.76 + } 1.77 + } 1.78 +} 1.79 + 1.80 #else 1.81 int sgl_wsys_w32_silence_the_fucking_empty_file_warnings; 1.82 #endif