From e0996494d021b040db6351eb1a945bb3df3f3b73 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Thu, 9 Jun 2005 10:07:04 +0000 Subject: [PATCH] Moved monitor functions to dlls/user/misc.c and finally got rid of the windows/ directory. --- DEVELOPERS-HINTS | 9 -- configure | 5 -- configure.ac | 1 - dlls/user/Makefile.in | 2 - dlls/user/misc.c | 165 ++++++++++++++++++++++++++++++++++++ windows/multimon.c | 193 ------------------------------------------ 6 files changed, 165 insertions(+), 210 deletions(-) delete mode 100644 windows/multimon.c diff --git a/DEVELOPERS-HINTS b/DEVELOPERS-HINTS index 7a2e405d21d..f5291b880b7 100644 --- a/DEVELOPERS-HINTS +++ b/DEVELOPERS-HINTS @@ -242,15 +242,6 @@ Support programs, libraries, etc: tools/wrc/ - the resource compiler -Miscellaneous: --------------- - -Note: these directories will ultimately get moved into their -respective dlls. - - windows/ - USER window management - - IMPLEMENTING NEW API CALLS ========================== diff --git a/configure b/configure index b8084f593d6..d8fe7446d5a 100755 --- a/configure +++ b/configure @@ -20065,8 +20065,6 @@ esac ac_config_commands="$ac_config_commands programs/regedit/tests" - ac_config_commands="$ac_config_commands windows" - MAKE_RULES=Make.rules @@ -20882,7 +20880,6 @@ do "dlls/wineps/data" ) CONFIG_COMMANDS="$CONFIG_COMMANDS dlls/wineps/data" ;; "include/wine" ) CONFIG_COMMANDS="$CONFIG_COMMANDS include/wine" ;; "programs/regedit/tests" ) CONFIG_COMMANDS="$CONFIG_COMMANDS programs/regedit/tests" ;; - "windows" ) CONFIG_COMMANDS="$CONFIG_COMMANDS windows" ;; "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} @@ -21680,8 +21677,6 @@ echo "$as_me: creating dlls/wineps/data" >&6;} && mkdir "dlls/wineps/data") ;; echo "$as_me: creating include/wine" >&6;} && mkdir "include/wine") ;; programs/regedit/tests ) test -d "programs/regedit/tests" || ({ echo "$as_me:$LINENO: creating programs/regedit/tests" >&5 echo "$as_me: creating programs/regedit/tests" >&6;} && mkdir "programs/regedit/tests") ;; - windows ) test -d "windows" || ({ echo "$as_me:$LINENO: creating windows" >&5 -echo "$as_me: creating windows" >&6;} && mkdir "windows") ;; esac done _ACEOF diff --git a/configure.ac b/configure.ac index 2b51b0ae9c1..4771f79f97b 100644 --- a/configure.ac +++ b/configure.ac @@ -1515,7 +1515,6 @@ WINE_CONFIG_EXTRA_DIR(dlls/user/resources) WINE_CONFIG_EXTRA_DIR(dlls/wineps/data) WINE_CONFIG_EXTRA_DIR(include/wine) WINE_CONFIG_EXTRA_DIR(programs/regedit/tests) -WINE_CONFIG_EXTRA_DIR(windows) MAKE_RULES=Make.rules AC_SUBST_FILE(MAKE_RULES) diff --git a/dlls/user/Makefile.in b/dlls/user/Makefile.in index dcdf22a3d5c..85495a9aa1d 100644 --- a/dlls/user/Makefile.in +++ b/dlls/user/Makefile.in @@ -16,7 +16,6 @@ SPEC_SRCS16 = \ user.exe.spec C_SRCS = \ - $(TOPOBJDIR)/windows/multimon.c \ button.c \ caret.c \ class.c \ @@ -147,7 +146,6 @@ RC_SRCS16 = \ SUBDIRS = tests EXTRASUBDIRS = \ - $(TOPOBJDIR)/windows \ dde \ resources diff --git a/dlls/user/misc.c b/dlls/user/misc.c index bcad0dc8f11..a2a972ee91b 100644 --- a/dlls/user/misc.c +++ b/dlls/user/misc.c @@ -3,6 +3,7 @@ * * Copyright 1995 Thomas Sandford * Copyright 1997 Marcus Meissner + * Copyright 1998 Turchanov Sergey * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -28,6 +29,7 @@ #include "winuser.h" #include "winnls.h" +#include "wine/unicode.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(win); @@ -53,6 +55,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(win); #define USIG_PROCESS_RUNNING 0x0500 #define USIG_PROCESS_LOADED 0x0600 +#define xPRIMARY_MONITOR ((HMONITOR)0x12340042) /*********************************************************************** * SignalProc32 (USER.391) @@ -306,6 +309,168 @@ BOOL WINAPI EnumDisplayDevicesW( LPVOID unused, DWORD i, LPDISPLAY_DEVICEW lpDis return TRUE; } +/*********************************************************************** + * MonitorFromPoint (USER32.@) + */ +HMONITOR WINAPI MonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags) +{ + if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || + ((ptScreenCoords.x >= 0) && + (ptScreenCoords.x < GetSystemMetrics(SM_CXSCREEN)) && + (ptScreenCoords.y >= 0) && + (ptScreenCoords.y < GetSystemMetrics(SM_CYSCREEN)))) + { + return xPRIMARY_MONITOR; + } + return NULL; +} + +/*********************************************************************** + * MonitorFromRect (USER32.@) + */ +HMONITOR WINAPI MonitorFromRect(LPRECT lprcScreenCoords, DWORD dwFlags) +{ + if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || + ((lprcScreenCoords->right > 0) && + (lprcScreenCoords->bottom > 0) && + (lprcScreenCoords->left < GetSystemMetrics(SM_CXSCREEN)) && + (lprcScreenCoords->top < GetSystemMetrics(SM_CYSCREEN)))) + { + return xPRIMARY_MONITOR; + } + return NULL; +} + +/*********************************************************************** + * MonitorFromWindow (USER32.@) + */ +HMONITOR WINAPI MonitorFromWindow(HWND hWnd, DWORD dwFlags) +{ + WINDOWPLACEMENT wp; + + if (dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) + return xPRIMARY_MONITOR; + + if (IsIconic(hWnd) ? + GetWindowPlacement(hWnd, &wp) : + GetWindowRect(hWnd, &wp.rcNormalPosition)) { + + return MonitorFromRect(&wp.rcNormalPosition, dwFlags); + } + + return NULL; +} + +/*********************************************************************** + * GetMonitorInfoA (USER32.@) + */ +BOOL WINAPI GetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) +{ + RECT rcWork; + + if ((hMonitor == xPRIMARY_MONITOR) && + lpMonitorInfo && + (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && + SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0)) + { + SetRect( &lpMonitorInfo->rcMonitor, 0, 0, + GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN) ); + lpMonitorInfo->rcWork = rcWork; + lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; + + if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEXA)) + strcpy(((MONITORINFOEXA*)lpMonitorInfo)->szDevice, "DISPLAY"); + + return TRUE; + } + + return FALSE; +} + +/*********************************************************************** + * GetMonitorInfoW (USER32.@) + */ +BOOL WINAPI GetMonitorInfoW(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) +{ + static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0}; + RECT rcWork; + + if ((hMonitor == xPRIMARY_MONITOR) && + lpMonitorInfo && + (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && + SystemParametersInfoW(SPI_GETWORKAREA, 0, &rcWork, 0)) + { + SetRect( &lpMonitorInfo->rcMonitor, 0, 0, + GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN) ); + lpMonitorInfo->rcWork = rcWork; + lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; + + if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEXW)) + strcpyW(((MONITORINFOEXW*)lpMonitorInfo)->szDevice, displayW); + + return TRUE; + } + + return FALSE; +} + +/*********************************************************************** + * EnumDisplayMonitors (USER32.@) + */ +BOOL WINAPI EnumDisplayMonitors( + HDC hdcOptionalForPainting, + LPRECT lprcEnumMonitorsThatIntersect, + MONITORENUMPROC lpfnEnumProc, + LPARAM dwData) +{ + RECT rcLimit; + SetRect( &rcLimit, 0, 0, GetSystemMetrics(SM_CXSCREEN), + GetSystemMetrics(SM_CYSCREEN) ); + + if (!lpfnEnumProc) + return FALSE; + + if (hdcOptionalForPainting) + { + RECT rcClip; + POINT ptOrg; + + switch (GetClipBox(hdcOptionalForPainting, &rcClip)) + { + default: + if (!GetDCOrgEx(hdcOptionalForPainting, &ptOrg)) + return FALSE; + + OffsetRect(&rcLimit, -ptOrg.x, -ptOrg.y); + if (IntersectRect(&rcLimit, &rcLimit, &rcClip) && + (!lprcEnumMonitorsThatIntersect || + IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect))) { + + break; + } + /* fall through */ + case NULLREGION: + return TRUE; + case ERROR: + return FALSE; + } + } else { + if ( lprcEnumMonitorsThatIntersect && + !IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect)) { + + return TRUE; + } + } + + return lpfnEnumProc( + xPRIMARY_MONITOR, + hdcOptionalForPainting, + &rcLimit, + dwData); +} + /*********************************************************************** * RegisterSystemThread (USER32.@) */ diff --git a/windows/multimon.c b/windows/multimon.c deleted file mode 100644 index 56f0dd2d213..00000000000 --- a/windows/multimon.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Multimonitor APIs - * - * Copyright 1998 Turchanov Sergey - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "wine/unicode.h" - -/**********************************************************************/ - -#define xPRIMARY_MONITOR ((HMONITOR)0x12340042) - -/*********************************************************************** - * MonitorFromPoint (USER32.@) - */ -HMONITOR WINAPI MonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags) -{ - if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || - ((ptScreenCoords.x >= 0) && - (ptScreenCoords.x < GetSystemMetrics(SM_CXSCREEN)) && - (ptScreenCoords.y >= 0) && - (ptScreenCoords.y < GetSystemMetrics(SM_CYSCREEN)))) - { - return xPRIMARY_MONITOR; - } - return NULL; -} - -/*********************************************************************** - * MonitorFromRect (USER32.@) - */ -HMONITOR WINAPI MonitorFromRect(LPRECT lprcScreenCoords, DWORD dwFlags) -{ - if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) || - ((lprcScreenCoords->right > 0) && - (lprcScreenCoords->bottom > 0) && - (lprcScreenCoords->left < GetSystemMetrics(SM_CXSCREEN)) && - (lprcScreenCoords->top < GetSystemMetrics(SM_CYSCREEN)))) - { - return xPRIMARY_MONITOR; - } - return NULL; -} - -/*********************************************************************** - * MonitorFromWindow (USER32.@) - */ -HMONITOR WINAPI MonitorFromWindow(HWND hWnd, DWORD dwFlags) -{ - WINDOWPLACEMENT wp; - - if (dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) - return xPRIMARY_MONITOR; - - if (IsIconic(hWnd) ? - GetWindowPlacement(hWnd, &wp) : - GetWindowRect(hWnd, &wp.rcNormalPosition)) { - - return MonitorFromRect(&wp.rcNormalPosition, dwFlags); - } - - return NULL; -} - -/*********************************************************************** - * GetMonitorInfoA (USER32.@) - */ -BOOL WINAPI GetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) -{ - RECT rcWork; - - if ((hMonitor == xPRIMARY_MONITOR) && - lpMonitorInfo && - (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && - SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0)) - { - SetRect( &lpMonitorInfo->rcMonitor, 0, 0, - GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN) ); - lpMonitorInfo->rcWork = rcWork; - lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; - - if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEXA)) - strcpy(((MONITORINFOEXA*)lpMonitorInfo)->szDevice, "DISPLAY"); - - return TRUE; - } - - return FALSE; -} - -/*********************************************************************** - * GetMonitorInfoW (USER32.@) - */ -BOOL WINAPI GetMonitorInfoW(HMONITOR hMonitor, LPMONITORINFO lpMonitorInfo) -{ - static const WCHAR displayW[] = {'D','I','S','P','L','A','Y',0}; - RECT rcWork; - - if ((hMonitor == xPRIMARY_MONITOR) && - lpMonitorInfo && - (lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) && - SystemParametersInfoW(SPI_GETWORKAREA, 0, &rcWork, 0)) - { - SetRect( &lpMonitorInfo->rcMonitor, 0, 0, - GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN) ); - lpMonitorInfo->rcWork = rcWork; - lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY; - - if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEXW)) - strcpyW(((MONITORINFOEXW*)lpMonitorInfo)->szDevice, displayW); - - return TRUE; - } - - return FALSE; -} - -/*********************************************************************** - * EnumDisplayMonitors (USER32.@) - */ -BOOL WINAPI EnumDisplayMonitors( - HDC hdcOptionalForPainting, - LPRECT lprcEnumMonitorsThatIntersect, - MONITORENUMPROC lpfnEnumProc, - LPARAM dwData) -{ - RECT rcLimit; - SetRect( &rcLimit, 0, 0, GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN) ); - - if (!lpfnEnumProc) - return FALSE; - - if (hdcOptionalForPainting) - { - RECT rcClip; - POINT ptOrg; - - switch (GetClipBox(hdcOptionalForPainting, &rcClip)) - { - default: - if (!GetDCOrgEx(hdcOptionalForPainting, &ptOrg)) - return FALSE; - - OffsetRect(&rcLimit, -ptOrg.x, -ptOrg.y); - if (IntersectRect(&rcLimit, &rcLimit, &rcClip) && - (!lprcEnumMonitorsThatIntersect || - IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect))) { - - break; - } - /* fall through */ - case NULLREGION: - return TRUE; - case ERROR: - return FALSE; - } - } else { - if ( lprcEnumMonitorsThatIntersect && - !IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect)) { - - return TRUE; - } - } - - return lpfnEnumProc( - xPRIMARY_MONITOR, - hdcOptionalForPainting, - &rcLimit, - dwData); -}