forked from bartvdbraak/blender
Apply multimonitor fix part of patch [#25612]
Submitted by Alexander Kuznetsov Fixes [#23630] Negative OS screen coords not stored/used Reported by Mort (mnme)
This commit is contained in:
parent
2f45cdb420
commit
75f155be33
@ -141,31 +141,45 @@ GHOST_WindowWin32::GHOST_WindowWin32(
|
|||||||
{
|
{
|
||||||
if (state != GHOST_kWindowStateFullScreen) {
|
if (state != GHOST_kWindowStateFullScreen) {
|
||||||
RECT rect;
|
RECT rect;
|
||||||
|
MONITORINFO monitor;
|
||||||
GHOST_TUns32 tw, th;
|
GHOST_TUns32 tw, th;
|
||||||
|
|
||||||
width += GetSystemMetrics(SM_CXSIZEFRAME)*2;
|
width += GetSystemMetrics(SM_CXSIZEFRAME)*2;
|
||||||
height += GetSystemMetrics(SM_CYSIZEFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);
|
height += GetSystemMetrics(SM_CYSIZEFRAME)*2 + GetSystemMetrics(SM_CYCAPTION);
|
||||||
|
|
||||||
|
rect.left = left;
|
||||||
|
rect.right = left + width;
|
||||||
|
rect.top = top;
|
||||||
|
rect.bottom = top + height;
|
||||||
|
|
||||||
|
monitor.cbSize=sizeof(monitor);
|
||||||
|
monitor.dwFlags=0;
|
||||||
|
|
||||||
// take taskbar into account
|
// take taskbar into account
|
||||||
SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
|
GetMonitorInfo(MonitorFromRect(&rect,MONITOR_DEFAULTTONEAREST),&monitor);
|
||||||
th = rect.bottom - rect.top;
|
|
||||||
tw = rect.right - rect.left;
|
th = monitor.rcWork.bottom - monitor.rcWork.top;
|
||||||
|
tw = monitor.rcWork.right - monitor.rcWork.left;
|
||||||
|
|
||||||
if(tw < width)
|
if(tw < width)
|
||||||
{
|
{
|
||||||
width = tw;
|
width = tw;
|
||||||
left = rect.left;
|
left = monitor.rcWork.left;
|
||||||
}
|
}
|
||||||
else if(left < rect.left)
|
else if(monitor.rcWork.right < left + (int)width)
|
||||||
left = rect.left;
|
left = monitor.rcWork.right - width;
|
||||||
|
else if(left < monitor.rcWork.left)
|
||||||
|
left = monitor.rcWork.left;
|
||||||
|
|
||||||
if(th < height)
|
if(th < height)
|
||||||
{
|
{
|
||||||
height = th;
|
height = th;
|
||||||
top = rect.top;
|
top = monitor.rcWork.top;
|
||||||
}
|
}
|
||||||
else if(top < rect.top)
|
else if(monitor.rcWork.bottom < top + (int)height)
|
||||||
top = rect.top;
|
top = monitor.rcWork.bottom - height;
|
||||||
|
else if(top < monitor.rcWork.top)
|
||||||
|
top = monitor.rcWork.top;
|
||||||
|
|
||||||
m_hWnd = ::CreateWindow(
|
m_hWnd = ::CreateWindow(
|
||||||
s_windowClassName, // pointer to registered class name
|
s_windowClassName, // pointer to registered class name
|
||||||
|
Loading…
Reference in New Issue
Block a user