mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 16:52:59 +00:00
Fix behavior if bmi null in NtGdiCreateDIBSection. Start internal functions for regions, includes a wine port get_region_type.
svn path=/trunk/; revision=33629
This commit is contained in:
parent
1136b9642b
commit
f9814c9de4
3 changed files with 75 additions and 0 deletions
|
@ -38,6 +38,9 @@ INT STDCALL IntGdiGetRgnBox(HRGN, LPRECT);
|
||||||
BOOL FASTCALL IntGdiPaintRgn(PDC, HRGN );
|
BOOL FASTCALL IntGdiPaintRgn(PDC, HRGN );
|
||||||
HRGN FASTCALL GdiCreatePolyPolygonRgn(CONST PPOINT, CONST PINT, INT, INT );
|
HRGN FASTCALL GdiCreatePolyPolygonRgn(CONST PPOINT, CONST PINT, INT, INT );
|
||||||
|
|
||||||
|
INT FASTCALL IntGdiCombineRgn(PROSRGNDATA, PROSRGNDATA, PROSRGNDATA, INT);
|
||||||
|
INT FASTCALL REGION_Complexity(PROSRGNDATA);
|
||||||
|
|
||||||
#define UnsafeIntCreateRectRgnIndirect(prc) \
|
#define UnsafeIntCreateRectRgnIndirect(prc) \
|
||||||
NtGdiCreateRectRgn((prc)->left, (prc)->top, (prc)->right, (prc)->bottom)
|
NtGdiCreateRectRgn((prc)->left, (prc)->top, (prc)->right, (prc)->bottom)
|
||||||
|
|
||||||
|
|
|
@ -994,6 +994,8 @@ HBITMAP STDCALL NtGdiCreateDIBSection(HDC hDC,
|
||||||
DC *dc;
|
DC *dc;
|
||||||
BOOL bDesktopDC = FALSE;
|
BOOL bDesktopDC = FALSE;
|
||||||
|
|
||||||
|
if (!bmi) return hbitmap; // Make sure.
|
||||||
|
|
||||||
// If the reference hdc is null, take the desktop dc
|
// If the reference hdc is null, take the desktop dc
|
||||||
if (hDC == 0)
|
if (hDC == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -483,6 +483,20 @@ IntDumpRegion(HRGN hRgn)
|
||||||
}
|
}
|
||||||
#endif /* not NDEBUG */
|
#endif /* not NDEBUG */
|
||||||
|
|
||||||
|
|
||||||
|
INT
|
||||||
|
FASTCALL
|
||||||
|
REGION_Complexity( PROSRGNDATA obj )
|
||||||
|
{
|
||||||
|
switch(obj->rdh.nCount)
|
||||||
|
{
|
||||||
|
DPRINT("Region Complexity -> %d",obj->rdh.nCount);
|
||||||
|
case 0: return NULLREGION;
|
||||||
|
case 1: return SIMPLEREGION;
|
||||||
|
default: return COMPLEXREGION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
BOOL
|
BOOL
|
||||||
FASTCALL
|
FASTCALL
|
||||||
|
@ -2065,6 +2079,62 @@ REGION_Cleanup(PVOID ObjectBody)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT
|
||||||
|
FASTCALL
|
||||||
|
IntGdiCombineRgn(PROSRGNDATA destRgn,
|
||||||
|
PROSRGNDATA src1Rgn,
|
||||||
|
PROSRGNDATA src2Rgn,
|
||||||
|
INT CombineMode)
|
||||||
|
{
|
||||||
|
INT result = ERROR;
|
||||||
|
|
||||||
|
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 (src2Rgn == NULL)
|
||||||
|
{
|
||||||
|
DPRINT1("IntGdiCombineRgn requires hSrc2 != NULL for combine mode %d!\n", CombineMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINT("IntGdiCombineRgn: hDest unavailable\n");
|
||||||
|
result = ERROR;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// NtGdi Exported Functions
|
// NtGdi Exported Functions
|
||||||
INT
|
INT
|
||||||
STDCALL
|
STDCALL
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue