tdf#39593 vcl: reduce copy-paste in ImplCalcOutSideRgn
Change-Id: I13e13e5e17815bbffef6132ed28fadd3fb12f99b
Reviewed-on: https://gerrit.libreoffice.org/64750
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/vcl/win/gdi/gdiimpl.cxx b/vcl/win/gdi/gdiimpl.cxx
index fbb36b1..b287968 100644
--- a/vcl/win/gdi/gdiimpl.cxx
+++ b/vcl/win/gdi/gdiimpl.cxx
@@ -344,47 +344,48 @@
}
}
static void ImplCalcOutSideRgn( const RECT& rSrcRect,
namespace
{
void MakeInvisibleArea(const RECT& rSrcRect,
int nLeft, int nTop, int nRight, int nBottom,
HRGN& rhInvalidateRgn)
{
if (!rhInvalidateRgn)
{
rhInvalidateRgn = CreateRectRgnIndirect(&rSrcRect);
}
HRGN hTempRgn = CreateRectRgn(nLeft, nTop, nRight, nBottom);
CombineRgn(rhInvalidateRgn, rhInvalidateRgn, hTempRgn, RGN_DIFF);
DeleteRegion(hTempRgn);
}
void ImplCalcOutSideRgn( const RECT& rSrcRect,
int nLeft, int nTop, int nRight, int nBottom,
HRGN& rhInvalidateRgn )
{
HRGN hTempRgn;
// calculate area outside the visible region
if ( rSrcRect.left < nLeft )
if (rSrcRect.left < nLeft)
{
if ( !rhInvalidateRgn )
rhInvalidateRgn = CreateRectRgnIndirect( &rSrcRect );
hTempRgn = CreateRectRgn( -31999, 0, nLeft, 31999 );
CombineRgn( rhInvalidateRgn, rhInvalidateRgn, hTempRgn, RGN_DIFF );
DeleteRegion( hTempRgn );
MakeInvisibleArea(rSrcRect, -31999, 0, nLeft, 31999, rhInvalidateRgn);
}
if ( rSrcRect.top < nTop )
if (rSrcRect.top < nTop)
{
if ( !rhInvalidateRgn )
rhInvalidateRgn = CreateRectRgnIndirect( &rSrcRect );
hTempRgn = CreateRectRgn( 0, -31999, 31999, nTop );
CombineRgn( rhInvalidateRgn, rhInvalidateRgn, hTempRgn, RGN_DIFF );
DeleteRegion( hTempRgn );
MakeInvisibleArea(rSrcRect, 0, -31999, 31999, nTop, rhInvalidateRgn);
}
if ( rSrcRect.right > nRight )
if (rSrcRect.right > nRight)
{
if ( !rhInvalidateRgn )
rhInvalidateRgn = CreateRectRgnIndirect( &rSrcRect );
hTempRgn = CreateRectRgn( nRight, 0, 31999, 31999 );
CombineRgn( rhInvalidateRgn, rhInvalidateRgn, hTempRgn, RGN_DIFF );
DeleteRegion( hTempRgn );
MakeInvisibleArea(rSrcRect, nRight, 0, 31999, 31999, rhInvalidateRgn);
}
if ( rSrcRect.bottom > nBottom )
if (rSrcRect.bottom > nBottom)
{
if ( !rhInvalidateRgn )
rhInvalidateRgn = CreateRectRgnIndirect( &rSrcRect );
hTempRgn = CreateRectRgn( 0, nBottom, 31999, 31999 );
CombineRgn( rhInvalidateRgn, rhInvalidateRgn, hTempRgn, RGN_DIFF );
DeleteRegion( hTempRgn );
MakeInvisibleArea(rSrcRect, 0, nBottom, 31999, 31999, rhInvalidateRgn);
}
}
} // namespace
void WinSalGraphicsImpl::copyArea( long nDestX, long nDestY,
long nSrcX, long nSrcY,
long nSrcWidth, long nSrcHeight,