void Draw::DrawPaintingOp(const Rect& target, const Painting& pw) { if(!HasPainter()) return; Size sz = target.GetSize(); if((sz.cx > 2000 || sz.cy > 1500) && IsPrinter()) { int yy = 0; while(yy < sz.cy) { int ccy = min(sz.cy - yy, 100); ImageBuffer ib(sz.cx, ccy); Fill(~ib, White(), ib.GetLength()); PaintImageBuffer(ib, pw, sz, Point(0, yy), true); DrawImageBandRLE(*this, target.left, target.top + yy, ib, 16); yy += ccy; } } else { ImageBuffer ib(sz); Fill(~ib, IsPrinter() ? White() : SColorPaper(), ib.GetLength()); PaintImageBuffer(ib, pw, sz, Point(0, 0), IsPrinter()); DrawImage(target.left, target.top, ib); } }
Image ReportView::GetPage(int i) { ASSERT(report); int ii = i & pm; if(pagei[ii] != i) { pagei[ii] = i; Size sz = Size(max(pagesize.cx - 2, 1), max(pagesize.cy - 2, 1)); if(HasPainter()) { ImageBuffer ib(sz); Fill(~ib, White(), ib.GetLength()); PaintImageBuffer(ib, report->GetPage(i)); page[ii] = ib; } else { ImageDraw iw(sz); iw.DrawRect(sz, White); iw.DrawDrawing(0, 0, sz.cx, sz.cy, report->GetPage(i)); page[ii] = iw; } } return page[ii]; }
void PaintImageBuffer(ImageBuffer& ib, const Painting& p, int mode) { PaintImageBuffer(ib, p, ib.GetSize(), Point(0, 0), mode); }