diff --git a/graphics/x11drv/bitblt.c b/graphics/x11drv/bitblt.c
index dbf75c68c7c95bcfd1e9571db9abd9e1fea99c7d..82228d337eb181da22758b06767e9cd6aea43015 100644
--- a/graphics/x11drv/bitblt.c
+++ b/graphics/x11drv/bitblt.c
@@ -1140,8 +1140,10 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
 
     xDst      = dcDst->w.DCOrgX + XLPTODP( dcDst, xDst );
     yDst      = dcDst->w.DCOrgY + YLPTODP( dcDst, yDst );
-    widthDst  = widthDst * dcDst->vportExtX / dcDst->wndExtX;
-    heightDst = heightDst * dcDst->vportExtY / dcDst->wndExtY;
+
+    /* Here we have to round to integers, not truncate */
+    widthDst  = MulDiv(widthDst, dcDst->vportExtX, dcDst->wndExtX);
+    heightDst = MulDiv(heightDst, dcDst->vportExtY, dcDst->wndExtY);
 
     TRACE("    vportdst=%d,%d-%d,%d wnddst=%d,%d-%d,%d\n",
                     dcDst->vportOrgX, dcDst->vportOrgY,