Mercurial > mm7
comparison OSWindow.cpp @ 2061:b2a434d65344
GAME_SETTINGS_* defines introduced
DEBUG_SETTINGS_* defines introduced
author | Nomad |
---|---|
date | Mon, 02 Dec 2013 15:13:49 +0200 |
parents | 71a814f4482a |
children | 259df09dfb50 |
comparison
equal
deleted
inserted
replaced
2060:72177f3603da | 2061:b2a434d65344 |
---|---|
267 return *result = 0, true; | 267 return *result = 0, true; |
268 | 268 |
269 case WM_ACTIVATEAPP: | 269 case WM_ACTIVATEAPP: |
270 if ( wparam && (GetForegroundWindow() == api_handle || GetForegroundWindow() == hInsertCDWindow) ) | 270 if ( wparam && (GetForegroundWindow() == api_handle || GetForegroundWindow() == hInsertCDWindow) ) |
271 { | 271 { |
272 if ( BYTE1(dword_6BE364_game_settings_1) & 1 ) | 272 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE) |
273 { | 273 { |
274 dword_4E98BC_bApplicationActive = 1; | 274 dword_4E98BC_bApplicationActive = 1; |
275 if ( pRenderer->bWindowMode ) | 275 if ( pRenderer->bWindowMode ) |
276 { | 276 { |
277 HDC hDC = GetDC(api_handle); | 277 HDC hDC = GetDC(api_handle); |
279 int planes = GetDeviceCaps(hDC, PLANES); | 279 int planes = GetDeviceCaps(hDC, PLANES); |
280 ReleaseDC(api_handle, hDC); | 280 ReleaseDC(api_handle, hDC); |
281 if (bitsPerPixel != 16 || planes != 1) | 281 if (bitsPerPixel != 16 || planes != 1) |
282 Error(pGlobalTXT_LocalizationStrings[62]); | 282 Error(pGlobalTXT_LocalizationStrings[62]); |
283 } | 283 } |
284 BYTE1(dword_6BE364_game_settings_1) &= 0xFEu; | 284 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_APP_INACTIVE; |
285 | 285 |
286 if ( pArcomageGame->bGameInProgress ) | 286 if ( pArcomageGame->bGameInProgress ) |
287 { | 287 { |
288 pArcomageGame->field_F9 = 1; | 288 pArcomageGame->field_F9 = 1; |
289 } | 289 } |
290 else | 290 else |
291 { | 291 { |
292 if ( BYTE1(dword_6BE364_game_settings_1) & 2 ) | 292 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0200_EVENT_TIMER) |
293 BYTE1(dword_6BE364_game_settings_1) &= 0xFDu; | 293 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0200_EVENT_TIMER; |
294 else | 294 else |
295 pEventTimer->Resume(); | 295 pEventTimer->Resume(); |
296 if ( BYTE1(dword_6BE364_game_settings_1) & 4 ) | 296 if (dword_6BE364_game_settings_1 & GAME_SETTINGS_0400_MISC_TIMER) |
297 BYTE1(dword_6BE364_game_settings_1) &= 0xFBu; | 297 dword_6BE364_game_settings_1 &= ~GAME_SETTINGS_0400_MISC_TIMER; |
298 else | 298 else |
299 pMiscTimer->Resume(); | 299 pMiscTimer->Resume(); |
300 | 300 |
301 viewparams->bRedrawGameUI = true; | 301 viewparams->bRedrawGameUI = true; |
302 if ( pVideoPlayer->pSmackerMovie ) | 302 if ( pVideoPlayer->pSmackerMovie ) |
310 AIL_redbook_resume(pAudioPlayer->hAILRedbook); | 310 AIL_redbook_resume(pAudioPlayer->hAILRedbook); |
311 } | 311 } |
312 } | 312 } |
313 else | 313 else |
314 { | 314 { |
315 if (!(dword_6BE364_game_settings_1 & 0x100)) | 315 if (!(dword_6BE364_game_settings_1 & GAME_SETTINGS_APP_INACTIVE)) |
316 { | 316 { |
317 dword_4E98BC_bApplicationActive = 0; | 317 dword_4E98BC_bApplicationActive = 0; |
318 if ( (pVideoPlayer->pSmackerMovie || pVideoPlayer->pBinkMovie) && pVideoPlayer->bPlayingMovie ) | 318 if ( (pVideoPlayer->pSmackerMovie || pVideoPlayer->pBinkMovie) && pVideoPlayer->bPlayingMovie ) |
319 pVideoPlayer->bStopBeforeSchedule = 1; | 319 pVideoPlayer->bStopBeforeSchedule = 1; |
320 | 320 |
321 if (/*pRenderer->bUserDirect3D && */pRenderer->uAcquiredDirect3DDevice == 1) | 321 if (/*pRenderer->bUserDirect3D && */pRenderer->uAcquiredDirect3DDevice == 1) |
322 SetWindowPos(api_handle, (HWND)0xFFFFFFFE, 0, 0, 0, 0, 0x18u); | 322 SetWindowPos(api_handle, (HWND)0xFFFFFFFE, 0, 0, 0, 0, 0x18u); |
323 ClipCursor(0); | 323 ClipCursor(0); |
324 dword_6BE364_game_settings_1 |= 0x100u; | 324 dword_6BE364_game_settings_1 |= GAME_SETTINGS_APP_INACTIVE; |
325 if ( pEventTimer->bPaused ) | 325 if ( pEventTimer->bPaused ) |
326 BYTE1(dword_6BE364_game_settings_1) |= 2u; | 326 dword_6BE364_game_settings_1 |= GAME_SETTINGS_0200_EVENT_TIMER; |
327 else | 327 else |
328 pEventTimer->Pause(); | 328 pEventTimer->Pause(); |
329 if ( pMiscTimer->bPaused ) | 329 if ( pMiscTimer->bPaused ) |
330 BYTE1(dword_6BE364_game_settings_1) |= 4u; | 330 dword_6BE364_game_settings_1 |= GAME_SETTINGS_0400_MISC_TIMER; |
331 else | 331 else |
332 pMiscTimer->Pause(); | 332 pMiscTimer->Pause(); |
333 | 333 |
334 pAudioPlayer->StopChannels(-1, -1); | 334 pAudioPlayer->StopChannels(-1, -1); |
335 if ( pAudioPlayer->hAILRedbook ) | 335 if ( pAudioPlayer->hAILRedbook ) |
399 wcxw.lpszMenuName = nullptr; | 399 wcxw.lpszMenuName = nullptr; |
400 wcxw.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; | 400 wcxw.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; |
401 if (!RegisterClassExW(&wcxw)) | 401 if (!RegisterClassExW(&wcxw)) |
402 return false; | 402 return false; |
403 | 403 |
404 api_handle = CreateWindowExW(0, wcxw.lpszClassName, title, | 404 api_handle = CreateWindowExW(0, wcxw.lpszClassName, title, 0, |
405 0, | |
406 0, 0, window_width, window_height, nullptr, | 405 0, 0, window_width, window_height, nullptr, |
407 nullptr, wcxw.hInstance, this); | 406 nullptr, wcxw.hInstance, this); |
408 if (!api_handle) | 407 if (!api_handle) |
409 { | 408 { |
410 UnregisterClassW(wcxw.lpszClassName, wcxw.hInstance); | 409 UnregisterClassW(wcxw.lpszClassName, wcxw.hInstance); |
411 return false; | 410 return false; |
412 } | |
413 | |
414 HDC hDC = GetDC(NULL); | |
415 int bitsPerPixel = GetDeviceCaps(hDC, BITSPIXEL); | |
416 int planes = GetDeviceCaps(hDC, PLANES); | |
417 ReleaseDC(NULL, hDC); | |
418 if (bitsPerPixel != 16 || planes != 1) | |
419 { | |
420 SetColorDepth(16); | |
421 } | 411 } |
422 | 412 |
423 SetWindowedMode(window_width, window_height); | 413 SetWindowedMode(window_width, window_height); |
424 Show(); | 414 Show(); |
425 | 415 |
438 | 428 |
439 | 429 |
440 | 430 |
441 OSWindow *OSWindow::Create(const wchar_t *title, int window_width, int window_height) | 431 OSWindow *OSWindow::Create(const wchar_t *title, int window_width, int window_height) |
442 { | 432 { |
443 OSWindow* window = new OSWindow; | 433 auto window = new OSWindow; |
444 if (window) | 434 if (window) |
445 if (!window->Initialize(title, window_width, window_height)) | 435 if (!window->Initialize(title, window_width, window_height)) |
446 { | 436 { |
447 delete window; | 437 delete window; |
448 window = nullptr; | 438 window = nullptr; |
798 break; | 788 break; |
799 } | 789 } |
800 | 790 |
801 return true; | 791 return true; |
802 } | 792 } |
803 | |
804 bool OSWindow::SetColorDepth(int bit) | |
805 { | |
806 DEVMODE dm; | |
807 if (!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm)) | |
808 { | |
809 Log::Warning(L"EnumDisplaySettings failed: %d\n", GetLastError()); | |
810 return false; | |
811 } | |
812 | |
813 dm.dmSize = sizeof(DEVMODE); | |
814 dm.dmBitsPerPel = bit; | |
815 dm.dmFields = DM_BITSPERPEL; | |
816 if (ChangeDisplaySettings(&dm, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) | |
817 { | |
818 Log::Warning(L"Illegal graphics mode: %d\n", GetLastError()); | |
819 return false; | |
820 } | |
821 if (ChangeDisplaySettings(&dm, 0) == DISP_CHANGE_SUCCESSFUL) | |
822 { | |
823 ChangedColorDepth = true; | |
824 } | |
825 } | |
826 | |
827 void OSWindow::Delete() | |
828 { | |
829 Deinitialize(); | |
830 } | |
831 | |
832 void OSWindow::Deinitialize() | |
833 { | |
834 if( ChangedColorDepth ) | |
835 { | |
836 SetColorDepth(32); | |
837 } | |
838 } |