Author: tkreuzer Date: Fri Oct 30 16:22:57 2009 New Revision: 43849
URL: http://svn.reactos.org/svn/reactos?rev=43849&view=rev Log: [WIN32K] EngCopyBits: Use goto cleanup / break instead of code duplication, fix leaking a bits lock, if the rect function fails, remove abundant MouseSafetyOnDrawEnd
Modified: trunk/reactos/subsystems/win32/win32k/eng/copybits.c
Modified: trunk/reactos/subsystems/win32/win32k/eng/copybits.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/eng/copybits.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/eng/copybits.c [iso-8859-1] Fri Oct 30 16:22:57 2009 @@ -42,7 +42,7 @@ RECTL *DestRect, POINTL *SourcePoint) { - BOOLEAN ret; + BOOL ret; BYTE clippingType; RECT_ENUM RectEnum; BOOL EnumMore; @@ -78,13 +78,7 @@ ret = GDIDEVFUNCS(psoDest).CopyBits( psoDest, psoSource, Clip, ColorTranslation, DestRect, SourcePoint);
- if (psoDest != psoSource) - { - SURFACE_UnlockBitmapBits(psurfDest); - } - SURFACE_UnlockBitmapBits(psurfSource); - - return ret; + goto cleanup; } }
@@ -97,13 +91,7 @@ ret = GDIDEVFUNCS(psoSource).CopyBits( psoDest, psoSource, Clip, ColorTranslation, DestRect, SourcePoint);
- if (psoDest != psoSource) - { - SURFACE_UnlockBitmapBits(psurfDest); - } - SURFACE_UnlockBitmapBits(psurfSource); - - return ret; + goto cleanup; } }
@@ -112,17 +100,11 @@ NULL, Clip, ColorTranslation, DestRect, SourcePoint, NULL, NULL, NULL, ROP3_TO_ROP4(SRCCOPY));
- if (psoDest != psoSource) - { - SURFACE_UnlockBitmapBits(psurfDest); - } - SURFACE_UnlockBitmapBits(psurfSource); - - return ret; + goto cleanup; }
// Determine clipping type - if (Clip == (CLIPOBJ *) NULL) + if (!Clip) { clippingType = DC_TRIVIAL; } @@ -143,16 +125,8 @@ BltInfo.DestRect = *DestRect; BltInfo.SourcePoint = *SourcePoint;
- DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_BitBltSrcCopy(&BltInfo); - - MouseSafetyOnDrawEnd(psoDest); - if (psoDest != psoSource) - { - SURFACE_UnlockBitmapBits(psurfDest); - } - SURFACE_UnlockBitmapBits(psurfSource); - - return TRUE; + ret = DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_BitBltSrcCopy(&BltInfo); + break;
case DC_RECT: // Clip the blt to the clip rectangle @@ -161,15 +135,8 @@ BltInfo.SourcePoint.x = SourcePoint->x + BltInfo.DestRect.left - DestRect->left; BltInfo.SourcePoint.y = SourcePoint->y + BltInfo.DestRect.top - DestRect->top;
- DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_BitBltSrcCopy(&BltInfo); - - if (psoDest != psoSource) - { - SURFACE_UnlockBitmapBits(psurfDest); - } - SURFACE_UnlockBitmapBits(psurfSource); - - return TRUE; + ret = DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_BitBltSrcCopy(&BltInfo); + break;
case DC_COMPLEX:
@@ -192,7 +159,10 @@ BltInfo.SourcePoint.y = SourcePoint->y + prcl->top - DestRect->top;
if (!DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_BitBltSrcCopy(&BltInfo)) - return FALSE; + { + ret = FALSE; + goto cleanup; + }
prcl++;
@@ -200,23 +170,23 @@ }
} while (EnumMore); - - if (psoDest != psoSource) - { - SURFACE_UnlockBitmapBits(psurfDest); - } - SURFACE_UnlockBitmapBits(psurfSource); - - return TRUE; - } - + ret = TRUE; + break; + + default: + ASSERT(FALSE); + ret = FALSE; + break; + } + +cleanup: if (psoDest != psoSource) { SURFACE_UnlockBitmapBits(psurfDest); } SURFACE_UnlockBitmapBits(psurfSource);
- return FALSE; + return ret; }
BOOL APIENTRY