mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-31 04:13:37 +00:00
reformatting, check return value of GDIOBJ_LockMultipleObj(), allow compile to calc size of Lock for calls to GDIOBJ_LockMultipleObj()
svn path=/trunk/; revision=5412
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: region.c,v 1.29 2003/07/17 07:49:15 gvg Exp $ */
|
||||
/* $Id: region.c,v 1.30 2003/08/04 19:07:50 royce Exp $ */
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <ddk/ntddk.h>
|
||||
@@ -340,14 +340,20 @@ HRGN STDCALL REGION_CropRgn(HRGN hDst, HRGN hSrc, const PRECT lpRect, PPOINT lpP
|
||||
HRGN hNewDst, hRet = NULL;
|
||||
GDIMULTILOCK Lock[2] = {{hDst, 0, GO_REGION_MAGIC}, {hSrc, 0, GO_REGION_MAGIC}};
|
||||
|
||||
if( !hDst ){
|
||||
if( !( hNewDst = RGNDATA_AllocRgn(1) ) ){
|
||||
return 0;
|
||||
}
|
||||
Lock[0].hObj = hNewDst;
|
||||
}
|
||||
if( !hDst )
|
||||
{
|
||||
if( !( hNewDst = RGNDATA_AllocRgn(1) ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Lock[0].hObj = hNewDst;
|
||||
}
|
||||
|
||||
GDIOBJ_LockMultipleObj(Lock, 2);
|
||||
if ( !GDIOBJ_LockMultipleObj(Lock, sizeof(Lock)/sizeof(Lock[0])) )
|
||||
{
|
||||
DPRINT1("GDIOBJ_LockMultipleObj() failed\n" );
|
||||
return 0;
|
||||
}
|
||||
rgnDst = Lock[0].pObj;
|
||||
objSrc = Lock[1].pObj;
|
||||
|
||||
@@ -369,7 +375,7 @@ HRGN STDCALL REGION_CropRgn(HRGN hDst, HRGN hSrc, const PRECT lpRect, PPOINT lpP
|
||||
}
|
||||
}
|
||||
}
|
||||
GDIOBJ_UnlockMultipleObj(Lock, 2);
|
||||
GDIOBJ_UnlockMultipleObj(Lock, sizeof(Lock)/sizeof(Lock[0]));
|
||||
return hRet;
|
||||
}
|
||||
|
||||
@@ -1349,7 +1355,7 @@ BOOL STDCALL REGION_LPTODP(HDC hdc, HRGN hDest, HRGN hSrc)
|
||||
if(dc->w.MapMode == MM_TEXT) // Requires only a translation
|
||||
{
|
||||
if(W32kCombineRgn(hDest, hSrc, 0, RGN_COPY) == ERROR)
|
||||
goto done;
|
||||
goto done;
|
||||
|
||||
W32kOffsetRgn(hDest, dc->vportOrgX - dc->wndOrgX, dc->vportOrgY - dc->wndOrgY);
|
||||
ret = TRUE;
|
||||
@@ -1439,48 +1445,56 @@ W32kCombineRgn(HRGN hDest,
|
||||
GDIMULTILOCK Lock[3] = {{hDest, 0, GO_REGION_MAGIC}, {hSrc1, 0, GO_REGION_MAGIC}, {hSrc2, 0, GO_REGION_MAGIC}};
|
||||
PROSRGNDATA destRgn, src1Rgn, src2Rgn;
|
||||
|
||||
GDIOBJ_LockMultipleObj(Lock, 3);
|
||||
if ( !GDIOBJ_LockMultipleObj(Lock, sizeof(Lock)/sizeof(Lock[0])) )
|
||||
{
|
||||
DPRINT1("GDIOBJ_LockMultipleObj() failed\n" );
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
destRgn = (PROSRGNDATA) Lock[0].pObj;
|
||||
src1Rgn = (PROSRGNDATA) Lock[1].pObj;
|
||||
src2Rgn = (PROSRGNDATA) Lock[2].pObj;
|
||||
|
||||
if( destRgn ){
|
||||
if( src1Rgn ){
|
||||
if (CombineMode == RGN_COPY)
|
||||
{
|
||||
if( !REGION_CopyRegion(destRgn, src1Rgn) )
|
||||
return ERROR;
|
||||
result = destRgn->rdh.iType;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( src2Rgn ){
|
||||
switch (CombineMode)
|
||||
{
|
||||
case RGN_AND:
|
||||
REGION_IntersectRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
case RGN_OR:
|
||||
REGION_UnionRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
case RGN_XOR:
|
||||
REGION_XorRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
case RGN_DIFF:
|
||||
REGION_SubtractRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
}
|
||||
result = destRgn->rdh.iType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
if( destRgn )
|
||||
{
|
||||
if( src1Rgn )
|
||||
{
|
||||
if (CombineMode == RGN_COPY)
|
||||
{
|
||||
if( !REGION_CopyRegion(destRgn, src1Rgn) )
|
||||
return ERROR;
|
||||
result = destRgn->rdh.iType;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( src2Rgn )
|
||||
{
|
||||
switch (CombineMode)
|
||||
{
|
||||
case RGN_AND:
|
||||
REGION_IntersectRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
case RGN_OR:
|
||||
REGION_UnionRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
case RGN_XOR:
|
||||
REGION_XorRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
case RGN_DIFF:
|
||||
REGION_SubtractRegion(destRgn, src1Rgn, src2Rgn);
|
||||
break;
|
||||
}
|
||||
result = destRgn->rdh.iType;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT("W32kCombineRgn: hDest unavailable\n");
|
||||
result = ERROR;
|
||||
}
|
||||
GDIOBJ_UnlockMultipleObj(Lock, 3);
|
||||
result = ERROR;
|
||||
}
|
||||
GDIOBJ_UnlockMultipleObj(Lock, sizeof(Lock)/sizeof(Lock[0]));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user