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:
@@ -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
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user