From 1221835ea58b7aee789d39b3afd7a826bc149100 Mon Sep 17 00:00:00 2001 From: Gregor Schneider Date: Sat, 1 Aug 2009 17:58:28 +0000 Subject: [PATCH] FloodFill: - Remove unneeded casts when setting the initial flood start, add debug print for flood region location (silenced) - Improve memory guards, free memory on error svn path=/trunk/; revision=42324 --- .../subsystems/win32/win32k/dib/floodfill.c | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/reactos/subsystems/win32/win32k/dib/floodfill.c b/reactos/subsystems/win32/win32k/dib/floodfill.c index 7a325ae3685..dab94814d6d 100644 --- a/reactos/subsystems/win32/win32k/dib/floodfill.c +++ b/reactos/subsystems/win32/win32k/dib/floodfill.c @@ -43,7 +43,8 @@ static __inline BOOL initFlood(FLOODINFO *info, RECTL *DstRect) { return FALSE; } - info->floodStart = (FLOODITEM*)((PBYTE)info->floodData + (width * height * sizeof(FLOODITEM))); + info->floodStart = info->floodData + (width * height); + DPRINT("Allocated flood stack from %p to %p\n", info->floodData, info->floodStart); return TRUE; } static __inline VOID finalizeFlood(FLOODINFO *info) @@ -118,15 +119,16 @@ BOOLEAN DIB_XXBPP_FloodFillSolid(SURFOBJ *DstSurf, removeItemFlood(&flood); DibFunctionsForBitmapFormat[DstSurf->iBitmapFormat].DIB_PutPixel(DstSurf, x, y, BrushColor); + if (flood.floodStart - 4 < flood.floodData) + { + DPRINT1("Can't finish flooding!\n"); + finalizeFlood(&flood); + return FALSE; + } addItemFlood(&flood, x, y + 1, DstSurf, DstRect, ConvColor, FALSE); addItemFlood(&flood, x, y - 1, DstSurf, DstRect, ConvColor, FALSE); addItemFlood(&flood, x + 1, y, DstSurf, DstRect, ConvColor, FALSE); addItemFlood(&flood, x - 1, y, DstSurf, DstRect, ConvColor, FALSE); - if (flood.floodStart <= flood.floodData) - { - DPRINT1("Couldn't finish flooding!\n"); - return FALSE; - } } finalizeFlood(&flood); } @@ -150,15 +152,16 @@ BOOLEAN DIB_XXBPP_FloodFillSolid(SURFOBJ *DstSurf, removeItemFlood(&flood); DibFunctionsForBitmapFormat[DstSurf->iBitmapFormat].DIB_PutPixel(DstSurf, x, y, BrushColor); + if (flood.floodStart - 4 < flood.floodData) + { + DPRINT1("Can't finish flooding!\n"); + finalizeFlood(&flood); + return FALSE; + } addItemFlood(&flood, x, y + 1, DstSurf, DstRect, ConvColor, TRUE); addItemFlood(&flood, x, y - 1, DstSurf, DstRect, ConvColor, TRUE); addItemFlood(&flood, x + 1, y, DstSurf, DstRect, ConvColor, TRUE); addItemFlood(&flood, x - 1, y, DstSurf, DstRect, ConvColor, TRUE); - if (flood.floodStart <= flood.floodData) - { - DPRINT1("Couldn't finish flooding!\n"); - return FALSE; - } } finalizeFlood(&flood); }