ysrcMask = ysrc;
}
- wxRect subrect(source-> LogicalToDeviceX(xsrc),source-> LogicalToDeviceY(ysrc),
- source-> LogicalToDeviceXRel(width),source-> LogicalToDeviceYRel(height));
+ wxRect subrect(source->LogicalToDeviceX(xsrc),
+ 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 );
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
{