Fixed: #983 Create setWindowSize private method in OpenGL driver

This commit is contained in:
kervala 2010-06-13 21:00:19 +02:00
parent a63d1e249b
commit 5e298e8844

View file

@ -1074,53 +1074,13 @@ bool CDriverGL::setMode(const GfxMode& mode)
} }
} }
// Resize the window
RECT rc;
SetRect (&rc, 0, 0, _WindowWidth, _WindowHeight);
AdjustWindowRectEx (&rc, GetWindowStyle (_win), GetMenu (_win) != NULL, GetWindowExStyle (_win));
UINT flags = SWP_NOZORDER | SWP_NOACTIVATE;
if (mode.Windowed)
flags |= SWP_NOMOVE;
SetWindowPos (_win, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, flags);
// showWindow(true);
// Init Window Width and Height
RECT clientRect;
GetClientRect (_win, &clientRect);
_WindowWidth = clientRect.right-clientRect.left;
_WindowHeight = clientRect.bottom-clientRect.top;
GetWindowRect (_win, &clientRect);
_WindowX = clientRect.left;
_WindowY = clientRect.top;
#elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE)
NL3D::MAC::setMode(mode); NL3D::MAC::setMode(mode);
#elif defined(NL_OS_UNIX) #elif defined(NL_OS_UNIX)
// Update WM hints (update size and disallow resizing)
XSizeHints size_hints;
size_hints.x = 0;
size_hints.y = 0;
size_hints.width = mode.Width;
size_hints.height = mode.Height;
size_hints.flags = PSize;
// x11 fullscreen is not working on mac os x
#if !defined(NL_OS_MAC)
if (!mode.Windowed)
{
size_hints.flags = PSize | PMinSize | PMaxSize;
size_hints.min_width = mode.Width;
size_hints.min_height = mode.Height;
size_hints.max_width = mode.Width;
size_hints.max_height = mode.Height;
}
#endif
XSetWMNormalHints(_dpy, _win, &size_hints);
// x11 fullscreen is not working on mac os x // x11 fullscreen is not working on mac os x
#if !defined(NL_OS_MAC) #if !defined(NL_OS_MAC)
@ -1140,9 +1100,6 @@ bool CDriverGL::setMode(const GfxMode& mode)
} }
#endif #endif
// Resize and update the window
XResizeWindow(_dpy, _win, mode.Width, mode.Height);
// XMapWindow(_dpy, _win);
#endif // NL_OS_UNIX #endif // NL_OS_UNIX
@ -1152,6 +1109,8 @@ bool CDriverGL::setMode(const GfxMode& mode)
_FullScreen = false; _FullScreen = false;
#endif #endif
setWindowSize(mode.Width, mode.Height);
return true; return true;
} }
@ -1558,6 +1517,64 @@ void CDriverGL::getWindowSize(uint32 &width, uint32 &height)
#endif // NL_OS_UNIX #endif // NL_OS_UNIX
} }
void CDriverGL::setWindowSize(uint32 width, uint32 height)
{
H_AUTO_OGL(CDriverGL_setWindowSize)
#if defined(NL_OS_WINDOWS)
// resize the window
RECT rc;
SetRect (&rc, 0, 0, width, height);
AdjustWindowRectEx(&rc, GetWindowStyle(_win), GetMenu(_win) != NULL, GetWindowExStyle(_win));
UINT flags = SWP_NOZORDER | SWP_NOACTIVATE;
if (!_FullScreen)
flags |= SWP_NOMOVE;
SetWindowPos(_win, NULL, 0, 0, rc.right - rc.left, rc.bottom - rc.top, flags);
// init window width and height
RECT clientRect;
GetClientRect(_win, &clientRect);
_WindowWidth = clientRect.right-clientRect.left;
_WindowHeight = clientRect.bottom-clientRect.top;
GetWindowRect(_win, &clientRect);
_WindowX = clientRect.left;
_WindowY = clientRect.top;
#elif defined(NL_OS_UNIX)
// Resize and update the window
XResizeWindow(_dpy, _win, width, height);
// XMapWindow(_dpy, _win);
// Update WM hints (update size and allow resizing)
XSizeHints size_hints;
size_hints.x = 0;
size_hints.y = 0;
size_hints.width = width;
size_hints.height = height;
size_hints.flags = PSize;
// x11 fullscreen is not working on mac os x
#if !defined(NL_OS_MAC)
if (!_FullScreen)
{
size_hints.flags = PSize | PMinSize | PMaxSize;
size_hints.min_width = mode.Width;
size_hints.min_height = mode.Height;
size_hints.max_width = mode.Width;
size_hints.max_height = mode.Height;
}
#endif
XSetWMNormalHints(_dpy, _win, &size_hints);
_WindowWidth = width;
_WindowHeight = height;
#endif // NL_OS_WINDOWS
}
void CDriverGL::getWindowPos(uint32 &x, uint32 &y) void CDriverGL::getWindowPos(uint32 &x, uint32 &y)
{ {
H_AUTO_OGL(CDriverGL_getWindowPos) H_AUTO_OGL(CDriverGL_getWindowPos)