void SDraw::DrawTextOp(int x, int y, int angle, const wchar *text, Font font, Color ink, int n, const int *dx) { sMakeTextGlyph g; g.font = font; g.color = White(); g.angle = angle; g.draw = this; for(int i = 0; i < n; i++) { g.chr = text[i]; LTIMING("Paint glyph"); if(font.GetHeight() > 200) { int bn = font[g.chr] + font.GetLineHeight(); for(g.yy = 0; g.yy < bn; g.yy += 32) { Image m; if(paintonly) m = MakeImagePaintOnly(g); else m = MakeImage(g); Point h = m.GetHotSpot(); SysDrawImageOp(x - h.x, y + g.yy - h.y, m, m.GetSize(), ink); } } else { g.yy = Null; Image m; if(paintonly) m = MakeImagePaintOnly(g); else m = MakeImage(g); Point h = m.GetHotSpot(); SysDrawImageOp(x - h.x, y - h.y, m, m.GetSize(), ink); } x += dx ? *dx++ : font[g.chr]; } }
Image CachedRescalePaintOnly(const Image& m, Size sz, const Rect& src, int filter) { if(m.GetSize() == sz) return m; sCachedRescale cr; cr.sz = sz; cr.src = src; cr.img = m; cr.filter = filter; return MakeImagePaintOnly(cr); }