void Draw::DrawDataOp(int x, int y, int cx, int cy, const String& data, const char *id) { bool tonative = !IsNative(); if(tonative) { BeginNative(); Native(x, y); Native(cx, cy); } One<DataDrawer> dd = DataDrawer::Create(id); if(dd) { dd->Open(data, cx, cy); if((cx > 2048 || cy > 2048) && (GetInfo() & DATABANDS)) { int yy = 0; while(yy < cy) { int ccy = min(cy - yy, 32); ImageBuffer ib(cx, ccy); dd->Render(ib); DrawImageBandRLE(*this, x, y + yy, ib, 16); yy += ccy; } } else { ImageBuffer m(cx, cy); dd->Render(m); DrawImage(x, y, m); } } if(tonative) EndNative(); }
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); } }