fz_device * fz_new_text_device(fz_context *ctx, fz_text_sheet *sheet, fz_text_page *page) { fz_device *dev; fz_text_device *tdev = fz_malloc_struct(ctx, fz_text_device); tdev->sheet = sheet; tdev->page = page; tdev->point.x = -1; tdev->point.y = -1; tdev->lastchar = ' '; init_line(ctx, &tdev->cur_line); init_span(ctx, &tdev->cur_span, NULL); dev = fz_new_device(ctx, tdev); dev->hints = FZ_IGNORE_IMAGE | FZ_IGNORE_SHADE; dev->free_user = fz_text_free_user; dev->fill_text = fz_text_fill_text; dev->stroke_text = fz_text_stroke_text; dev->clip_text = fz_text_clip_text; dev->clip_stroke_text = fz_text_clip_stroke_text; dev->ignore_text = fz_text_ignore_text; return dev; }
static void fz_flush_text_line(fz_context *ctx, fz_text_device *dev, fz_text_style *style) { append_span(ctx, &dev->cur_line, &dev->cur_span); insert_line(ctx, dev->page, &dev->cur_line); init_span(ctx, &dev->cur_span, style); init_line(ctx, &dev->cur_line); }
//-------------------------------------------------------------------- void blend_solid_vspan(int x, int y, unsigned len, const color_type& c, const cover_type* covers) { init_span(len, covers); m_mask->combine_vspan(x, y, &m_span[0], len); m_pixf->blend_solid_vspan(x, y, len, c, &m_span[0]); }
static void fz_add_text_char_imp(fz_context *ctx, fz_text_device *dev, fz_text_style *style, int c, fz_rect bbox) { if (!dev->cur_span.style) dev->cur_span.style = style; if (style != dev->cur_span.style) { append_span(ctx, &dev->cur_line, &dev->cur_span); init_span(ctx, &dev->cur_span, style); } append_char(ctx, &dev->cur_span, c, bbox); }
//-------------------------------------------------------------------- void blend_color_vspan(int x, int y, unsigned len, const color_type* colors, const cover_type* covers, cover_type cover = cover_full) { if(covers) { init_span(len, covers); m_mask->combine_vspan(x, y, &m_span[0], len); } else { realloc_span(len); m_mask->fill_vspan(x, y, &m_span[0], len); } m_pixf->blend_color_vspan(x, y, len, colors, &m_span[0], cover); }