@@ -36,7 +36,7 @@ void CHW::DestroyD3D()
3636 _RELEASE (pD3D);
3737}
3838
39- void CHW::CreateDevice (HWND m_hWnd , bool move_window)
39+ void CHW::CreateDevice (SDL_Window* m_sdlWnd , bool move_window)
4040{
4141 m_move_window = move_window;
4242 CreateD3D ();
@@ -136,7 +136,22 @@ void CHW::CreateDevice(HWND m_hWnd, bool move_window)
136136
137137 // Windoze
138138 P.SwapEffect = bWindowed ? D3DSWAPEFFECT_COPY : D3DSWAPEFFECT_DISCARD;
139- P.hDeviceWindow = m_hWnd;
139+
140+ SDL_SysWMinfo info;
141+ SDL_VERSION (&info.version );
142+ if (SDL_GetWindowWMInfo (m_sdlWnd, &info))
143+ {
144+ switch (info.subsystem )
145+ {
146+ case SDL_SYSWM_WINDOWS:
147+ P.hDeviceWindow = info.info .win .window ;
148+ break ;
149+ default : break ;
150+ }
151+ }
152+ else
153+ Log (" Couldn't get window information: %s" , SDL_GetError ());
154+
140155 P.Windowed = bWindowed;
141156
142157 // Depth/stencil
@@ -158,13 +173,13 @@ void CHW::CreateDevice(HWND m_hWnd, bool move_window)
158173
159174 // Create the device
160175 const auto GPU = selectGPU ();
161- auto result = HW.pD3D ->CreateDevice (DevAdapter, m_DriverType, m_hWnd ,
176+ auto result = HW.pD3D ->CreateDevice (DevAdapter, m_DriverType, P. hDeviceWindow ,
162177 GPU | D3DCREATE_MULTITHREADED, // . ? locks at present
163178 &P, &pDevice);
164179
165180 if (FAILED (result))
166181 {
167- result = HW.pD3D ->CreateDevice (DevAdapter, m_DriverType, m_hWnd ,
182+ result = HW.pD3D ->CreateDevice (DevAdapter, m_DriverType, P. hDeviceWindow ,
168183 GPU | D3DCREATE_MULTITHREADED, // . ? locks at present
169184 &P, &pDevice);
170185 }
@@ -199,7 +214,7 @@ void CHW::CreateDevice(HWND m_hWnd, bool move_window)
199214 Msg (" * Texture memory: %d M" , memory / (1024 * 1024 ));
200215 Msg (" * DDI-level: %2.1f" , float (D3DXGetDriverLevel (pDevice)) / 100 .f );
201216
202- updateWindowProps (m_hWnd );
217+ updateWindowProps (m_sdlWnd );
203218 fill_vid_mode_list (this );
204219}
205220
@@ -225,7 +240,7 @@ void CHW::DestroyDevice()
225240// ////////////////////////////////////////////////////////////////////
226241// Resetting device
227242// ////////////////////////////////////////////////////////////////////
228- void CHW::Reset (HWND hwnd )
243+ void CHW::Reset (SDL_Window* m_sdlWnd )
229244{
230245#ifdef DEBUG
231246 _RELEASE (dwDebugSB);
@@ -270,8 +285,8 @@ void CHW::Reset(HWND hwnd)
270285 R_CHK (pDevice->CreateStateBlock (D3DSBT_ALL, &dwDebugSB));
271286#endif
272287
273- updateWindowProps (hwnd );
274- ShowWindow (hwnd, SW_SHOWNORMAL );
288+ updateWindowProps (m_sdlWnd );
289+ SDL_ShowWindow (m_sdlWnd );
275290}
276291
277292D3DFORMAT CHW::selectDepthStencil (D3DFORMAT fTarget )
@@ -451,7 +466,7 @@ BOOL CHW::support(D3DFORMAT fmt, DWORD type, DWORD usage)
451466 return TRUE ;
452467}
453468
454- void CHW::updateWindowProps (HWND m_hWnd )
469+ void CHW::updateWindowProps (SDL_Window *m_sdlWnd )
455470{
456471 bool bWindowed = !psDeviceFlags.is (rsFullscreen);
457472
@@ -464,11 +479,8 @@ void CHW::updateWindowProps(HWND m_hWnd)
464479 {
465480 if (m_move_window)
466481 {
467- const bool drawBorders = strstr (Core.Params , " -draw_borders" );
468- dwWindowStyle = WS_VISIBLE;
469- if (drawBorders)
470- dwWindowStyle |= WS_BORDER | WS_DLGFRAME | WS_SYSMENU | WS_MINIMIZEBOX;
471- SetWindowLong (m_hWnd, GWL_STYLE, dwWindowStyle);
482+ if (NULL != strstr (Core.Params , " -draw_borders" ))
483+ SDL_SetWindowBordered (m_sdlWnd, SDL_TRUE);
472484 // When moving from fullscreen to windowed mode, it is important to
473485 // adjust the window size after recreating the device rather than
474486 // beforehand to ensure that you get the window size you want. For
@@ -478,47 +490,29 @@ void CHW::updateWindowProps(HWND m_hWnd)
478490 // changed to 1024x768, because windows cannot be larger than the
479491 // desktop.
480492
481- RECT m_rcWindowBounds;
482- float fYOffset = 0 .f ;
483493 bool centerScreen = false ;
484494 if (GEnv.isDedicatedServer || strstr (Core.Params , " -center_screen" ))
485495 centerScreen = true ;
486496
497+ SDL_SetWindowSize (m_sdlWnd, DevPP.BackBufferWidth , DevPP.BackBufferHeight );
498+
487499 if (centerScreen)
488500 {
489- RECT DesktopRect;
490-
491- GetClientRect (GetDesktopWindow (), &DesktopRect);
492-
493- SetRect (&m_rcWindowBounds,
494- (DesktopRect.right - DevPP.BackBufferWidth ) / 2 ,
495- (DesktopRect.bottom - DevPP.BackBufferHeight ) / 2 ,
496- (DesktopRect.right + DevPP.BackBufferWidth ) / 2 ,
497- (DesktopRect.bottom + DevPP.BackBufferHeight ) / 2 );
501+ SDL_SetWindowPosition (m_sdlWnd, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
498502 }
499503 else
500504 {
501- if (drawBorders)
502- fYOffset = GetSystemMetrics (SM_CYCAPTION); // size of the window title bar
503- SetRect (&m_rcWindowBounds, 0 , 0 , DevPP.BackBufferWidth , DevPP.BackBufferHeight );
504- };
505-
506- AdjustWindowRect (&m_rcWindowBounds, dwWindowStyle, FALSE );
507-
508- SetWindowPos (m_hWnd, HWND_NOTOPMOST,
509- m_rcWindowBounds.left , m_rcWindowBounds.top + fYOffset ,
510- m_rcWindowBounds.right - m_rcWindowBounds.left ,
511- m_rcWindowBounds.bottom - m_rcWindowBounds.top ,
512- SWP_HIDEWINDOW | SWP_NOCOPYBITS | SWP_DRAWFRAME);
505+ SDL_SetWindowPosition (m_sdlWnd, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED);
506+ }
513507 }
514508 }
515509 else
516510 {
517- SetWindowLong (m_hWnd, GWL_STYLE, dwWindowStyle = WS_POPUP | WS_VISIBLE );
511+ SDL_ShowWindow (m_sdlWnd );
518512 }
519513
520514 if (!GEnv.isDedicatedServer )
521- SetForegroundWindow (m_hWnd );
515+ SDL_SetWindowGrab (m_sdlWnd, SDL_TRUE );
522516}
523517
524518struct uniqueRenderingMode
0 commit comments