[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34500] trunk/blender/intern/ghost/intern/ GHOST_WindowWin32.cpp: Apply multimonitor fix part of patch [#25612]

Nathan Letwory nathan at letworyinteractive.com
Wed Jan 26 13:19:20 CET 2011


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




More information about the Bf-blender-cvs mailing list