public override void PrintPreviewControlPaint (PaintEventArgs pe, PrintPreviewControl preview, Size page_size)
{
int padding = 8;
PreviewPageInfo[] pis = preview.page_infos;
if (pis == null)
return;
int page_x, page_y;
int width = page_size.Width * preview.Columns + padding * (preview.Columns - 1) + 2 * padding;
int height = page_size.Height * (preview.Rows + 1) + padding * preview.Rows + 2 * padding;
Rectangle viewport = preview.ViewPort;
pe.Graphics.Clip = new Region (viewport);
/* center things if we can */
int off_x = viewport.Width / 2 - width / 2;
if (off_x < 0) off_x = 0;
int off_y = viewport.Height / 2 - height / 2;
if (off_y < 0) off_y = 0;
page_y = off_y + padding - preview.vbar_value;
if (preview.StartPage > 0) {
int p = preview.StartPage - 1;
for (int py = 0; py < preview.Rows + 1; py ++) {
page_x = off_x + padding - preview.hbar_value;
for (int px = 0; px < preview.Columns; px ++) {
if (p >= pis.Length)
continue;
Image image = preview.image_cache[p];
if (image == null)
image = pis[p].Image;
Rectangle dest = new Rectangle (new Point (page_x, page_y), page_size);
pe.Graphics.DrawImage (image, dest, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
page_x += padding + page_size.Width;
p++;
}
page_y += padding + page_size.Height;
}
}
}
#endregion // PrintPreviewControl