static void draw_glyph(unsigned char *colorbv, fz_pixmap *dst, fz_pixmap *msk, int xorig, int yorig, fz_bbox scissor) { unsigned char *dp, *mp; fz_bbox bbox; int x, y, w, h; bbox = fz_pixmap_bbox_no_ctx(msk); bbox.x0 += xorig; bbox.y0 += yorig; bbox.x1 += xorig; bbox.y1 += yorig; bbox = fz_intersect_bbox(bbox, scissor); /* scissor < dst */ x = bbox.x0; y = bbox.y0; w = bbox.x1 - bbox.x0; h = bbox.y1 - bbox.y0; mp = msk->samples + (unsigned int)((y - msk->y - yorig) * msk->w + (x - msk->x - xorig)); dp = dst->samples + (unsigned int)(((y - dst->y) * dst->w + (x - dst->x)) * dst->n); assert(msk->n == 1); while (h--) { if (dst->colorspace) fz_paint_span_with_color(dp, mp, dst->n, w, colorbv); else fz_paint_span(dp, mp, 1, w, 255); dp += dst->w * dst->n; mp += msk->w; } }
void fz_convert_rasterizer(fz_context *ctx, fz_rasterizer *r, int eofill, fz_pixmap *pix, unsigned char *colorbv, fz_overprint *eop) { fz_irect clip = fz_bound_rasterizer(ctx, r); clip = fz_intersect_irect(clip, fz_pixmap_bbox_no_ctx(pix)); clip = fz_intersect_irect(clip, fz_clip_rasterizer(ctx, r)); if (!fz_is_empty_irect(clip)) r->fns.convert(ctx, r, eofill, &clip, pix, colorbv, eop); }