- 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;