summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-op-run.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2015-10-09 11:07:42 +0200
committerTor Andersson <tor.andersson@artifex.com>2015-12-11 13:02:33 +0100
commitfa0bffa57e7e2164f0201b0f2fdc984d475674ae (patch)
treead6a7d7bc8641e390552ba8c49fdba351de00f82 /source/pdf/pdf-op-run.c
parente3275837d5738c5092b2e452829919e31ad553e5 (diff)
downloadmupdf-fa0bffa57e7e2164f0201b0f2fdc984d475674ae.tar.xz
Keep spans of multiple fonts and sizes in one fz_text object.
Diffstat (limited to 'source/pdf/pdf-op-run.c')
-rw-r--r--source/pdf/pdf-op-run.c24
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;
}