Revision: 34500
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34500
Author:   jesterking
Date:     2011-01-26 12:19:19 +0000 (Wed, 26 Jan 2011)
Log Message:
-----------
Apply multimonitor fix part of patch [#25612]
Submitted by Alexander Kuznetsov
Fixes [#23630] Negative OS screen coords not stored/used
Reported by Mort (mnme)

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp

Modified: trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp     2011-01-26 
10:46:43 UTC (rev 34499)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp     2011-01-26 
12:19:19 UTC (rev 34500)
@@ -141,31 +141,45 @@
 {
        if (state != GHOST_kWindowStateFullScreen) {
                RECT rect;
+               MONITORINFO monitor;
                GHOST_TUns32 tw, th; 
 
                width += GetSystemMetrics(SM_CXSIZEFRAME)*2;
                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
-               SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
-               th = rect.bottom - rect.top;
-               tw = rect.right - rect.left;
+               
GetMonitorInfo(MonitorFromRect(&rect,MONITOR_DEFAULTTONEAREST),&monitor);
 
+               th = monitor.rcWork.bottom - monitor.rcWork.top;
+               tw = monitor.rcWork.right - monitor.rcWork.left;
+
                if(tw < width)
                {
                        width = tw;
-                       left = rect.left;
+                       left = monitor.rcWork.left;
                }
-               else if(left < rect.left)
-                       left = rect.left;
+               else if(monitor.rcWork.right < left + (int)width)
+                       left = monitor.rcWork.right - width;
+               else if(left < monitor.rcWork.left)
+                       left = monitor.rcWork.left;
 
                if(th < height)
                {
                        height = th;
-                       top = rect.top;
+                       top = monitor.rcWork.top;
                }
-               else if(top < rect.top)
-                       top = rect.top;
+               else if(monitor.rcWork.bottom < top + (int)height)
+                       top = monitor.rcWork.bottom - height;
+               else if(top < monitor.rcWork.top)
+                       top = monitor.rcWork.top;
 
                m_hWnd = ::CreateWindow(
                        s_windowClassName,                      // pointer to 
registered class name

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to