Author: cwittich
Date: Sat Oct 17 23:04:04 2009
New Revision: 43545
URL:
http://svn.reactos.org/svn/reactos?rev=43545&view=rev
Log:
fix all gdi32 gdiobj winetests
Modified:
trunk/reactos/subsystems/win32/win32k/objects/region.c
Modified: trunk/reactos/subsystems/win32/win32k/objects/region.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/region.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/region.c [iso-8859-1] Sat Oct 17
23:04:04 2009
@@ -2988,20 +2988,47 @@
FASTCALL
REGION_RectInRegion(
PROSRGNDATA Rgn,
- const RECTL *rc
+ const RECTL *rect
)
{
PRECTL pCurRect, pRectEnd;
-
- // this is (just) a useful optimization
- if ((Rgn->rdh.nCount > 0) && EXTENTCHECK(&Rgn->rdh.rcBound,
rc))
- {
- for (pCurRect = Rgn->Buffer, pRectEnd = pCurRect + Rgn->rdh.nCount;
pCurRect < pRectEnd; pCurRect++)
- {
- if (pCurRect->bottom <= rc->top) continue; // not far enough down
yet
- if (pCurRect->top >= rc->bottom) break; // too far down
- if (pCurRect->right <= rc->left) continue; // not far enough over
yet
- if (pCurRect->left >= rc->right) continue;
+ RECT rc;
+
+ /* swap the coordinates to make right >= left and bottom >= top */
+ /* (region building rectangles are normalized the same way) */
+ if( rect->top > rect->bottom) {
+ rc.top = rect->bottom;
+ rc.bottom = rect->top;
+ } else {
+ rc.top = rect->top;
+ rc.bottom = rect->bottom;
+ }
+ if( rect->right < rect->left) {
+ rc.right = rect->left;
+ rc.left = rect->right;
+ } else {
+ rc.right = rect->right;
+ rc.left = rect->left;
+ }
+
+ /* this is (just) a useful optimization */
+ if ((Rgn->rdh.nCount > 0) && EXTENTCHECK(&Rgn->rdh.rcBound,
&rc))
+ {
+ for (pCurRect = Rgn->Buffer, pRectEnd = pCurRect +
+ Rgn->rdh.nCount; pCurRect < pRectEnd; pCurRect++)
+ {
+ if (pCurRect->bottom <= rc.top)
+ continue; /* not far enough down yet */
+
+ if (pCurRect->top >= rc.bottom)
+ break; /* too far down */
+
+ if (pCurRect->right <= rc.left)
+ continue; /* not far enough over yet */
+
+ if (pCurRect->left >= rc.right) {
+ continue;
+ }
return TRUE;
}