clip the bitmap to the size of the source DC in DoBlit if neccessary

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43841 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2006-12-07 03:07:30 +00:00
parent 16d17da6ca
commit cce4a2cec8

View File

@@ -732,14 +732,28 @@ bool wxGCDC::DoBlit(
ysrcMask = ysrc; ysrcMask = ysrc;
} }
wxRect subrect(source-> LogicalToDeviceX(xsrc),source-> LogicalToDeviceY(ysrc), wxRect subrect(source->LogicalToDeviceX(xsrc),
source-> LogicalToDeviceXRel(width),source-> LogicalToDeviceYRel(height)); source->LogicalToDeviceY(ysrc),
source->LogicalToDeviceXRel(width),
source->LogicalToDeviceYRel(height));
// if needed clip the subrect down to the size of the source DC
wxCoord sw, sh;
source->GetSize(&sw, &sh);
sw = source->LogicalToDeviceXRel(sw);
sh = source->LogicalToDeviceYRel(sh);
if (subrect.x + subrect.width > sw)
subrect.width = sw - subrect.x;
if (subrect.y + subrect.height > sh)
subrect.height = sh - subrect.y;
wxBitmap blit = source->GetAsBitmap( &subrect ); wxBitmap blit = source->GetAsBitmap( &subrect );
if ( blit.Ok() ) if ( blit.Ok() )
{ {
m_graphicContext->DrawBitmap( blit, xdest , ydest , width , height ); m_graphicContext->DrawBitmap( blit, xdest, ydest,
wxMin(width, blit.GetWidth()),
wxMin(height, blit.GetHeight()));
} }
else else
{ {