]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dcgraph.cpp
sockets work with wxDFB now
[wxWidgets.git] / src / common / dcgraph.cpp
index a7d8e0781eb709eb5510fe2d1939d12b5c3f9818..613c6a1bcf458d8f166d3535476bbd494787963f 100644 (file)
@@ -732,14 +732,28 @@ bool wxGCDC::DoBlit(
         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
     {