diff options
Diffstat (limited to 'source/pdf/pdf-op-run.c')
-rw-r--r-- | source/pdf/pdf-op-run.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c index dbd9386d..ea2384be 100644 --- a/source/pdf/pdf-op-run.c +++ b/source/pdf/pdf-op-run.c @@ -754,7 +754,7 @@ pdf_flush_text(fz_context *ctx, pdf_run_processor *pr) fz_adjust_rect_for_stroke(ctx, &tb, gstate->stroke_state, &gstate->ctm); /* Don't bother sending a text group with nothing in it */ - if (text->len == 0) + if (!text->head) break; if (dofill || dostroke) @@ -921,22 +921,12 @@ pdf_show_char(fz_context *ctx, pdf_run_processor *pr, int cid) * uncachable, then render direct. */ render_direct = (!fontdesc->font->ft_face && pr->nested_depth > 0) || !fz_glyph_cacheable(ctx, fontdesc->font, gid); - /* flush buffered text if face or matrix or rendermode has changed */ - if (!pr->text || - fontdesc->font != pr->text->font || - fontdesc->wmode != pr->text->wmode || - fabsf(trm.a - pr->text->trm.a) > FLT_EPSILON || - fabsf(trm.b - pr->text->trm.b) > FLT_EPSILON || - fabsf(trm.c - pr->text->trm.c) > FLT_EPSILON || - fabsf(trm.d - pr->text->trm.d) > FLT_EPSILON || - gstate->render != pr->text_mode || - render_direct) + /* flush buffered text if rendermode has changed */ + if (!pr->text || gstate->render != pr->text_mode || render_direct) { gstate = pdf_flush_text(ctx, pr); - pr->text = fz_new_text(ctx, fontdesc->font, &trm, fontdesc->wmode); - pr->text->trm.e = 0; - pr->text->trm.f = 0; + pr->text = fz_new_text(ctx); pr->text_mode = gstate->render; pr->text_bbox = fz_empty_rect; } @@ -956,11 +946,11 @@ pdf_show_char(fz_context *ctx, pdf_run_processor *pr, int cid) fz_union_rect(&pr->text_bbox, &bbox); /* add glyph to textobject */ - fz_add_text(ctx, pr->text, gid, ucsbuf[0], trm.e, trm.f); + fz_add_text(ctx, pr->text, fontdesc->font, fontdesc->wmode, &trm, gid, ucsbuf[0]); /* add filler glyphs for one-to-many unicode mapping */ for (i = 1; i < ucslen; i++) - fz_add_text(ctx, pr->text, -1, ucsbuf[i], trm.e, trm.f); + fz_add_text(ctx, pr->text, fontdesc->font, fontdesc->wmode, &trm, -1, ucsbuf[i]); if (fontdesc->wmode == 0) { @@ -1658,7 +1648,7 @@ static void pdf_run_Tw(fz_context *ctx, pdf_processor *proc, float wordspace) static void pdf_run_Tz(fz_context *ctx, pdf_processor *proc, float scale) { pdf_run_processor *pr = (pdf_run_processor *)proc; - pdf_gstate *gstate = pdf_flush_text(ctx, pr); + pdf_gstate *gstate = pr->gstate + pr->gtop; gstate->scale = scale / 100; } |