diff options
author | Tor Andersson <tor@ghostscript.com> | 2004-11-17 15:55:50 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2004-11-17 15:55:50 +0100 |
commit | f258f464a3b707b7d66880bec9cdd8f7b026e1f8 (patch) | |
tree | 51020e0390092ef044ede01b77478dfe08ae053d | |
parent | 4f4c61a4e89bc89e15a096e8c07fc35d2f9eb32c (diff) | |
download | mupdf-f258f464a3b707b7d66880bec9cdd8f7b026e1f8.tar.xz |
force use of builtin fonts if names match. speed up clearing of white background.
-rw-r--r-- | TODO | 1 | ||||
-rw-r--r-- | include/fitz/render.h | 2 | ||||
-rw-r--r-- | mupdf/font.c | 11 | ||||
-rw-r--r-- | mupdf/page.c | 10 | ||||
-rw-r--r-- | mupdf/type3.c | 2 | ||||
-rw-r--r-- | render/render.c | 25 | ||||
-rw-r--r-- | test/pdfrip.c | 2 | ||||
-rw-r--r-- | test/x11pdf.c | 2 |
8 files changed, 33 insertions, 22 deletions
@@ -26,6 +26,7 @@ rendering parser - resource dict generate fake ids - try to clean up colorspace/material handling in interpreter + - annotations and destinations (for links and outline) clean up - make source ansi c89 / pedantic diff --git a/include/fitz/render.h b/include/fitz/render.h index a1a01653..6e171a06 100644 --- a/include/fitz/render.h +++ b/include/fitz/render.h @@ -21,5 +21,5 @@ fz_error *fz_rendermask(fz_renderer *gc, fz_masknode *mask, fz_matrix ctm); fz_error *fz_rendertransform(fz_renderer *gc, fz_transformnode *xform, fz_matrix ctm); fz_error *fz_rendertext(fz_renderer *gc, fz_textnode *text, fz_matrix ctm); fz_error *fz_rendernode(fz_renderer *gc, fz_node *node, fz_matrix ctm); -fz_error *fz_rendertree(fz_pixmap **out, fz_renderer *gc, fz_tree *tree, fz_matrix ctm, fz_irect bbox); +fz_error *fz_rendertree(fz_pixmap **out, fz_renderer *gc, fz_tree *tree, fz_matrix ctm, fz_irect bbox, int white); diff --git a/mupdf/font.c b/mupdf/font.c index b9930f22..7c2346e3 100644 --- a/mupdf/font.c +++ b/mupdf/font.c @@ -244,27 +244,28 @@ loadsimplefont(pdf_font **fontp, pdf_xref *xref, fz_obj *dict) int symbolic; char *basefont; + char *fontname; char *estrings[256]; int i, k, n, e; basefont = fz_toname(fz_dictgets(dict, "BaseFont")); - basefont = cleanfontname(basefont); + fontname = cleanfontname(basefont); /* * Load font file */ -printf("loading simple font %s\n", basefont); +printf("loading simple font %s -> %s\n", basefont, fontname); - font = *fontp = pdf_newfont(basefont); + font = *fontp = pdf_newfont(fontname); if (!font) return fz_outofmem; descriptor = fz_dictgets(dict, "FontDescriptor"); - if (descriptor) + if (descriptor && basefont == fontname) error = pdf_loadfontdescriptor(font, xref, descriptor, nil); else - error = pdf_loadbuiltinfont(font, basefont); + error = pdf_loadbuiltinfont(font, fontname); if (error) goto cleanup; diff --git a/mupdf/page.c b/mupdf/page.c index f6c180f3..11ab6727 100644 --- a/mupdf/page.c +++ b/mupdf/page.c @@ -23,22 +23,12 @@ loadpagecontents(fz_tree **treep, pdf_xref *xref, fz_obj *rdb, fz_obj *ref) fz_error *error; fz_obj *obj; pdf_csi *csi; - fz_node *node; - float white = 1.0; int i; error = pdf_newcsi(&csi, 0); if (error) return error; - error = fz_newcolornode(&node, pdf_devicegray, 1, &white); - if (error) - { - pdf_dropcsi(csi); - return error; - } - fz_insertnode(csi->tree->root, node); - if (fz_isindirect(ref)) { error = pdf_loadindirect(&obj, xref, ref); diff --git a/mupdf/type3.c b/mupdf/type3.c index 946f8145..a2612b82 100644 --- a/mupdf/type3.c +++ b/mupdf/type3.c @@ -46,7 +46,7 @@ t3render(fz_glyph *glyph, fz_font *fzfont, int cid, fz_matrix trm) error = fz_newrenderer(&gc, nil, GCMEM); if (error) return error; - error = fz_rendertree(&pixmap, gc, tree, ctm, bbox); + error = fz_rendertree(&pixmap, gc, tree, ctm, bbox, 0); fz_droprenderer(gc); if (error) return error; diff --git a/render/render.c b/render/render.c index 7418d89c..62bce18d 100644 --- a/render/render.c +++ b/render/render.c @@ -261,18 +261,37 @@ fz_rendernode(fz_renderer *gc, fz_node *node, fz_matrix ctm) } fz_error * -fz_rendertree(fz_pixmap **outp, fz_renderer *gc, fz_tree *tree, fz_matrix ctm, fz_irect bbox) +fz_rendertree(fz_pixmap **outp, fz_renderer *gc, fz_tree *tree, fz_matrix ctm, fz_irect bbox, int white) { fz_error *error; gc->clip = bbox; + if (white) + { + error = fz_newpixmap(&gc->acc, + bbox.min.x, bbox.min.y, + bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y, 4); + if (error) + return error; + memset(gc->acc->samples, 0xff, gc->acc->w * gc->acc->h * gc->acc->n); + } + error = fz_rendernode(gc, tree->root, ctm); if (error) return error; - *outp = gc->tmp; - gc->tmp = nil; + if (white) + { + *outp = gc->acc; + gc->acc = nil; + } + else + { + *outp = gc->tmp; + gc->tmp = nil; + } + return nil; } diff --git a/test/pdfrip.c b/test/pdfrip.c index 5d4aba39..877be289 100644 --- a/test/pdfrip.c +++ b/test/pdfrip.c @@ -65,7 +65,7 @@ printf("rendering!\n"); bbox.min.y = bbox.min.y * zoom; bbox.max.x = bbox.max.x * zoom; bbox.max.y = bbox.max.y * zoom; - error = fz_rendertree(&pix, gc, page->tree, ctm, fz_roundrect(bbox)); + error = fz_rendertree(&pix, gc, page->tree, ctm, fz_roundrect(bbox), 1); if (error) fz_abort(error); printf("done!\n"); diff --git a/test/x11pdf.c b/test/x11pdf.c index 07e1150c..e0724076 100644 --- a/test/x11pdf.c +++ b/test/x11pdf.c @@ -174,7 +174,7 @@ Lskipload: bbox = fz_transformaabb(ctm, page->mediabox); - error = fz_rendertree(&image, rast, page->tree, ctm, fz_roundrect(bbox)); + error = fz_rendertree(&image, rast, page->tree, ctm, fz_roundrect(bbox), 1); if (error) fz_abort(error); |