mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:36:11 +00:00
Prevent a double lock on the surface by splitting FillSolid into a locking and
unlocked version, allowing surface.c to use the locking version. svn path=/trunk/; revision=40245
This commit is contained in:
parent
db8815a497
commit
2bb581031f
1 changed files with 14 additions and 5 deletions
|
@ -32,7 +32,7 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
BOOL APIENTRY FillSolid(SURFOBJ *pso, PRECTL pRect, ULONG iColor)
|
static BOOL APIENTRY FillSolidUnlocked(SURFOBJ *pso, PRECTL pRect, ULONG iColor)
|
||||||
{
|
{
|
||||||
LONG y;
|
LONG y;
|
||||||
ULONG LineWidth;
|
ULONG LineWidth;
|
||||||
|
@ -41,7 +41,6 @@ BOOL APIENTRY FillSolid(SURFOBJ *pso, PRECTL pRect, ULONG iColor)
|
||||||
ASSERT(pso);
|
ASSERT(pso);
|
||||||
ASSERT(pRect);
|
ASSERT(pRect);
|
||||||
psurf = CONTAINING_RECORD(pso, SURFACE, SurfObj);
|
psurf = CONTAINING_RECORD(pso, SURFACE, SurfObj);
|
||||||
SURFACE_LockBitmapBits(psurf);
|
|
||||||
MouseSafetyOnDrawStart(pso, pRect->left, pRect->top, pRect->right, pRect->bottom);
|
MouseSafetyOnDrawStart(pso, pRect->left, pRect->top, pRect->right, pRect->bottom);
|
||||||
LineWidth = pRect->right - pRect->left;
|
LineWidth = pRect->right - pRect->left;
|
||||||
DPRINT(" LineWidth: %d, top: %d, bottom: %d\n", LineWidth, pRect->top, pRect->bottom);
|
DPRINT(" LineWidth: %d, top: %d, bottom: %d\n", LineWidth, pRect->top, pRect->bottom);
|
||||||
|
@ -51,11 +50,21 @@ BOOL APIENTRY FillSolid(SURFOBJ *pso, PRECTL pRect, ULONG iColor)
|
||||||
pso, pRect->left, pRect->right, y, iColor);
|
pso, pRect->left, pRect->right, y, iColor);
|
||||||
}
|
}
|
||||||
MouseSafetyOnDrawEnd(pso);
|
MouseSafetyOnDrawEnd(pso);
|
||||||
SURFACE_UnlockBitmapBits(psurf);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL APIENTRY FillSolid(SURFOBJ *pso, PRECTL pRect, ULONG iColor)
|
||||||
|
{
|
||||||
|
SURFACE *psurf;
|
||||||
|
BOOL Result;
|
||||||
|
psurf = CONTAINING_RECORD(pso, SURFACE, SurfObj);
|
||||||
|
SURFACE_LockBitmapBits(psurf);
|
||||||
|
Result = FillSolidUnlocked(pso, pRect, iColor);
|
||||||
|
SURFACE_UnlockBitmapBits(psurf);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL APIENTRY
|
BOOL APIENTRY
|
||||||
EngPaintRgn(SURFOBJ *pso, CLIPOBJ *ClipRegion, ULONG iColor, MIX Mix,
|
EngPaintRgn(SURFOBJ *pso, CLIPOBJ *ClipRegion, ULONG iColor, MIX Mix,
|
||||||
BRUSHOBJ *BrushObj, POINTL *BrushPoint)
|
BRUSHOBJ *BrushObj, POINTL *BrushPoint)
|
||||||
|
@ -78,7 +87,7 @@ EngPaintRgn(SURFOBJ *pso, CLIPOBJ *ClipRegion, ULONG iColor, MIX Mix,
|
||||||
|
|
||||||
if (ClipRegion->iDComplexity == DC_RECT)
|
if (ClipRegion->iDComplexity == DC_RECT)
|
||||||
{
|
{
|
||||||
FillSolid(pso, &(ClipRegion->rclBounds), iColor);
|
FillSolidUnlocked(pso, &(ClipRegion->rclBounds), iColor);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* Enumerate all the rectangles and draw them */
|
/* Enumerate all the rectangles and draw them */
|
||||||
|
@ -87,7 +96,7 @@ EngPaintRgn(SURFOBJ *pso, CLIPOBJ *ClipRegion, ULONG iColor, MIX Mix,
|
||||||
do {
|
do {
|
||||||
EnumMore = CLIPOBJ_bEnum(ClipRegion, sizeof(RectEnum), (PVOID) &RectEnum);
|
EnumMore = CLIPOBJ_bEnum(ClipRegion, sizeof(RectEnum), (PVOID) &RectEnum);
|
||||||
for (i = 0; i < RectEnum.c; i++) {
|
for (i = 0; i < RectEnum.c; i++) {
|
||||||
FillSolid(pso, RectEnum.arcl + i, iColor);
|
FillSolidUnlocked(pso, RectEnum.arcl + i, iColor);
|
||||||
}
|
}
|
||||||
} while (EnumMore);
|
} while (EnumMore);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue