summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2004-11-17 15:55:50 +0100
committerTor Andersson <tor@ghostscript.com>2004-11-17 15:55:50 +0100
commitf258f464a3b707b7d66880bec9cdd8f7b026e1f8 (patch)
tree51020e0390092ef044ede01b77478dfe08ae053d
parent4f4c61a4e89bc89e15a096e8c07fc35d2f9eb32c (diff)
downloadmupdf-f258f464a3b707b7d66880bec9cdd8f7b026e1f8.tar.xz
force use of builtin fonts if names match. speed up clearing of white background.
-rw-r--r--TODO1
-rw-r--r--include/fitz/render.h2
-rw-r--r--mupdf/font.c11
-rw-r--r--mupdf/page.c10
-rw-r--r--mupdf/type3.c2
-rw-r--r--render/render.c25
-rw-r--r--test/pdfrip.c2
-rw-r--r--test/x11pdf.c2
8 files changed, 33 insertions, 22 deletions
diff --git a/TODO b/TODO
index bfeaee87..cd252006 100644
--- a/TODO
+++ b/TODO
@@ -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);