Mercurial > sdl-ios-xcode
comparison src/video/win32/SDL_win32window.c @ 1956:ba0d62354872
Simplified driver window creation code.
Implemented several Cocoa window functions
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 29 Jul 2006 21:51:00 +0000 |
parents | 420716272158 |
children | 64fa227c01ce 44e49d3fa6cf abc8acb8e3d7 |
comparison
equal
deleted
inserted
replaced
1955:8c6106e45fc1 | 1956:ba0d62354872 |
---|---|
131 | 131 |
132 int | 132 int |
133 WIN_CreateWindow(_THIS, SDL_Window * window) | 133 WIN_CreateWindow(_THIS, SDL_Window * window) |
134 { | 134 { |
135 HWND hwnd; | 135 HWND hwnd; |
136 LPTSTR title = NULL; | |
137 HWND top; | 136 HWND top; |
138 RECT rect; | 137 RECT rect; |
139 DWORD style = (WS_CLIPSIBLINGS | WS_CLIPCHILDREN); | 138 DWORD style = (WS_CLIPSIBLINGS | WS_CLIPCHILDREN); |
140 int x, y; | 139 int x, y; |
141 int w, h; | 140 int w, h; |
142 | 141 |
143 if (window->title) { | 142 if (window->flags & SDL_WINDOW_BORDERLESS) { |
144 title = WIN_UTF8ToString(window->title); | |
145 } else { | |
146 title = NULL; | |
147 } | |
148 | |
149 if (window->flags & SDL_WINDOW_SHOWN) { | |
150 style |= WS_VISIBLE; | |
151 } | |
152 if ((window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS))) { | |
153 style |= WS_POPUP; | 143 style |= WS_POPUP; |
154 } else { | 144 } else { |
155 style |= (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX); | 145 style |= (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX); |
156 } | 146 } |
157 if (window->flags & SDL_WINDOW_RESIZABLE) { | 147 if (window->flags & SDL_WINDOW_RESIZABLE) { |
158 style |= (WS_THICKFRAME | WS_MAXIMIZEBOX); | 148 style |= (WS_THICKFRAME | WS_MAXIMIZEBOX); |
159 } | |
160 if (window->flags & SDL_WINDOW_MAXIMIZED) { | |
161 style |= WS_MAXIMIZE; | |
162 } | |
163 if (window->flags & SDL_WINDOW_MINIMIZED) { | |
164 style |= WS_MINIMIZE; | |
165 } | 149 } |
166 | 150 |
167 /* Figure out what the window area will be */ | 151 /* Figure out what the window area will be */ |
168 if (window->flags & SDL_WINDOW_FULLSCREEN) { | 152 if (window->flags & SDL_WINDOW_FULLSCREEN) { |
169 top = HWND_TOPMOST; | 153 top = HWND_TOPMOST; |
176 rect.bottom = window->h; | 160 rect.bottom = window->h; |
177 AdjustWindowRectEx(&rect, style, FALSE, 0); | 161 AdjustWindowRectEx(&rect, style, FALSE, 0); |
178 w = (rect.right - rect.left); | 162 w = (rect.right - rect.left); |
179 h = (rect.bottom - rect.top); | 163 h = (rect.bottom - rect.top); |
180 | 164 |
181 if ((window->flags & SDL_WINDOW_FULLSCREEN) || | 165 if (window->x == SDL_WINDOWPOS_CENTERED) { |
182 window->x == SDL_WINDOWPOS_CENTERED) { | |
183 x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2; | 166 x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2; |
184 } else if (window->x == SDL_WINDOWPOS_UNDEFINED) { | 167 } else if (window->x == SDL_WINDOWPOS_UNDEFINED) { |
185 x = CW_USEDEFAULT; | 168 x = CW_USEDEFAULT; |
186 } else { | 169 } else { |
187 x = window->x + rect.left; | 170 x = window->x + rect.left; |
188 } | 171 } |
189 if ((window->flags & SDL_WINDOW_FULLSCREEN) || | 172 if (window->y == SDL_WINDOWPOS_CENTERED) { |
190 window->y == SDL_WINDOWPOS_CENTERED) { | |
191 y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2; | 173 y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2; |
192 } else if (window->y == SDL_WINDOWPOS_UNDEFINED) { | 174 } else if (window->y == SDL_WINDOWPOS_UNDEFINED) { |
193 y = CW_USEDEFAULT; | 175 y = CW_USEDEFAULT; |
194 } else { | 176 } else { |
195 y = window->y + rect.top; | 177 y = window->y + rect.top; |
196 } | 178 } |
197 | 179 |
198 hwnd = CreateWindow(SDL_Appname, | 180 hwnd = |
199 title ? title : TEXT(""), | 181 CreateWindow(SDL_Appname, TEXT(""), style, x, y, w, h, NULL, NULL, |
200 style, x, y, w, h, NULL, NULL, SDL_Instance, NULL); | 182 SDL_Instance, NULL); |
201 WIN_PumpEvents(_this); | 183 WIN_PumpEvents(_this); |
202 | |
203 if (title) { | |
204 SDL_free(title); | |
205 } | |
206 | 184 |
207 if (!hwnd) { | 185 if (!hwnd) { |
208 WIN_SetError("Couldn't create window"); | 186 WIN_SetError("Couldn't create window"); |
209 return -1; | 187 return -1; |
210 } | 188 } |
275 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; | 253 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; |
276 RECT rect; | 254 RECT rect; |
277 DWORD style; | 255 DWORD style; |
278 HWND top; | 256 HWND top; |
279 int x, y; | 257 int x, y; |
258 | |
259 /* Figure out what the window area will be */ | |
260 if (window->flags & SDL_WINDOW_FULLSCREEN) { | |
261 top = HWND_TOPMOST; | |
262 } else { | |
263 top = HWND_NOTOPMOST; | |
264 } | |
265 style = GetWindowLong(hwnd, GWL_STYLE); | |
266 rect.left = 0; | |
267 rect.top = 0; | |
268 rect.right = window->w; | |
269 rect.bottom = window->h; | |
270 AdjustWindowRectEx(&rect, style, | |
271 (style & WS_CHILDWINDOW) ? FALSE : (GetMenu(hwnd) != | |
272 NULL), 0); | |
273 x = window->x + rect.left; | |
274 y = window->y + rect.top; | |
275 | |
276 SetWindowPos(hwnd, top, x, y, 0, 0, (SWP_NOCOPYBITS | SWP_NOSIZE)); | |
277 } | |
278 | |
279 void | |
280 WIN_SetWindowSize(_THIS, SDL_Window * window) | |
281 { | |
282 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; | |
283 RECT rect; | |
284 DWORD style; | |
285 HWND top; | |
280 int w, h; | 286 int w, h; |
281 | 287 |
282 /* Figure out what the window area will be */ | 288 /* Figure out what the window area will be */ |
283 if (window->flags & SDL_WINDOW_FULLSCREEN) { | 289 if (window->flags & SDL_WINDOW_FULLSCREEN) { |
284 top = HWND_TOPMOST; | 290 top = HWND_TOPMOST; |
294 (style & WS_CHILDWINDOW) ? FALSE : (GetMenu(hwnd) != | 300 (style & WS_CHILDWINDOW) ? FALSE : (GetMenu(hwnd) != |
295 NULL), 0); | 301 NULL), 0); |
296 w = (rect.right - rect.left); | 302 w = (rect.right - rect.left); |
297 h = (rect.bottom - rect.top); | 303 h = (rect.bottom - rect.top); |
298 | 304 |
299 if ((window->flags & SDL_WINDOW_FULLSCREEN) || | |
300 window->x == SDL_WINDOWPOS_CENTERED) { | |
301 x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2; | |
302 window->x = x - rect.left; | |
303 } else { | |
304 x = window->x + rect.left; | |
305 } | |
306 if ((window->flags & SDL_WINDOW_FULLSCREEN) || | |
307 window->y == SDL_WINDOWPOS_CENTERED) { | |
308 y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2; | |
309 window->y = y - rect.top; | |
310 } else { | |
311 y = window->y + rect.top; | |
312 } | |
313 SetWindowPos(hwnd, top, x, y, h, w, (SWP_NOCOPYBITS | SWP_NOSIZE)); | |
314 } | |
315 | |
316 void | |
317 WIN_SetWindowSize(_THIS, SDL_Window * window) | |
318 { | |
319 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; | |
320 RECT rect; | |
321 DWORD style; | |
322 HWND top; | |
323 int w, h; | |
324 | |
325 /* Figure out what the window area will be */ | |
326 if (window->flags & SDL_WINDOW_FULLSCREEN) { | |
327 top = HWND_TOPMOST; | |
328 } else { | |
329 top = HWND_NOTOPMOST; | |
330 } | |
331 style = GetWindowLong(hwnd, GWL_STYLE); | |
332 rect.left = 0; | |
333 rect.top = 0; | |
334 rect.right = window->w; | |
335 rect.bottom = window->h; | |
336 AdjustWindowRectEx(&rect, style, | |
337 (style & WS_CHILDWINDOW) ? FALSE : (GetMenu(hwnd) != | |
338 NULL), 0); | |
339 w = (rect.right - rect.left); | |
340 h = (rect.bottom - rect.top); | |
341 | |
342 SetWindowPos(hwnd, top, 0, 0, h, w, (SWP_NOCOPYBITS | SWP_NOMOVE)); | 305 SetWindowPos(hwnd, top, 0, 0, h, w, (SWP_NOCOPYBITS | SWP_NOMOVE)); |
343 } | 306 } |
344 | 307 |
345 void | 308 void |
346 WIN_ShowWindow(_THIS, SDL_Window * window) | 309 WIN_ShowWindow(_THIS, SDL_Window * window) |
436 WIN_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) | 399 WIN_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) |
437 { | 400 { |
438 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; | 401 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; |
439 if (info->version.major <= SDL_MAJOR_VERSION) { | 402 if (info->version.major <= SDL_MAJOR_VERSION) { |
440 info->window = hwnd; | 403 info->window = hwnd; |
441 /* FIXME! */ | |
442 info->hglrc = NULL; | |
443 return SDL_TRUE; | 404 return SDL_TRUE; |
444 } else { | 405 } else { |
445 SDL_SetError("Application not compiled with SDL %d.%d\n", | 406 SDL_SetError("Application not compiled with SDL %d.%d\n", |
446 SDL_MAJOR_VERSION, SDL_MINOR_VERSION); | 407 SDL_MAJOR_VERSION, SDL_MINOR_VERSION); |
447 return SDL_FALSE; | 408 return SDL_FALSE; |