diff options
author | Tor Andersson <tor@ghostscript.com> | 2009-12-07 17:12:25 +0100 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2009-12-07 17:12:25 +0100 |
commit | d11dfefb1fcd1f557eae0f02dac142ffa3c3676c (patch) | |
tree | d3dd32d32dc644b8dc9d155645b612f0ad5e0f25 /fitz/dev_trace.c | |
parent | ef4e06b7e423ada49a2e749d55687da756925cc8 (diff) | |
download | mupdf-d11dfefb1fcd1f557eae0f02dac142ffa3c3676c.tar.xz |
Implement a device interface and a tracing device for fitz.
Diffstat (limited to 'fitz/dev_trace.c')
-rw-r--r-- | fitz/dev_trace.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/fitz/dev_trace.c b/fitz/dev_trace.c new file mode 100644 index 00000000..85118e1b --- /dev/null +++ b/fitz/dev_trace.c @@ -0,0 +1,132 @@ +#include "fitz.h" + +static void fz_tracematrix(fz_matrix *ctm) +{ + printf("%g %g %g %g %g %g setmatrix\n", + ctm->a, ctm->b, ctm->c, ctm->d, ctm->e, ctm->f); +} + +static void fz_tracecolor(fz_colorspace *colorspace, float *color, float alpha) +{ + printf("... setcolor\n"); + printf("%g setalpha\n", alpha); +} + +void fz_tracefillpath(void *user, fz_path *path, fz_colorspace *colorspace, float *color, float alpha) +{ + fz_tracematrix(&path->ctm); + fz_printpath(path, 0); + if (path->winding == FZ_EVENODD) + printf("eofill\n"); + else + printf("fill\n"); +} + +void fz_tracestrokepath(void *user, fz_path *path, fz_colorspace *colorspace, float *color, float alpha) +{ + int i; + + fz_tracecolor(colorspace, color, alpha); + fz_tracematrix(&path->ctm); + + printf("%g setlinewidth\n", path->linewidth); + printf("%g setmiterlimit\n", path->miterlimit); + printf("%d setlinecap\n", path->linecap); + printf("%d setlinejoin\n", path->linejoin); + + if (path->dashlen) + { + printf("%g [ ", path->dashphase); + for (i = 0; i < path->dashlen; i++) + printf("%g ", path->dashlist[i]); + printf("] setdash\n"); + } + + fz_printpath(path, 0); + + printf("stroke\n"); +} + +void fz_traceclippath(void *user, fz_path *path) +{ + printf("gsave\n"); + fz_tracematrix(&path->ctm); + fz_printpath(path, 0); + if (path->winding == FZ_EVENODD) + printf("eoclip\n"); + else + printf("clip\n"); +} + +void fz_tracefilltext(void *user, fz_text *text, fz_colorspace *colorspace, float *color, float alpha) +{ + printf("/%s setfont\n", text->font->name); + fz_tracematrix(&text->trm); + fz_debugtext(text, 0); + printf("show\n"); +} + +void fz_tracestroketext(void *user, fz_text *text, fz_colorspace *colorspace, float *color, float alpha) +{ + printf("/%s setfont\n", text->font->name); + fz_tracematrix(&text->trm); + fz_debugtext(text, 0); + printf("charpath stroke\n"); +} + +void fz_tracecliptext(void *user, fz_text *text) +{ + printf("gsave\n"); + printf("/%s setfont\n", text->font->name); + fz_tracematrix(&text->trm); + fz_debugtext(text, 0); + printf("charpath clip\n"); +} + +void fz_traceignoretext(void *user, fz_text *text) +{ + printf("/%s setfont\n", text->font->name); + fz_tracematrix(&text->trm); + fz_debugtext(text, 0); + printf("invisibletext\n"); +} + +void fz_tracedrawimage(void *user, fz_image *image, fz_matrix *ctm) +{ + fz_tracematrix(ctm); + printf("drawimage\n"); +} + +void fz_tracedrawshade(void *user, fz_shade *shade, fz_matrix *ctm) +{ + fz_tracematrix(ctm); + printf("drawshade\n"); +} + +void fz_tracepopclip(void *user) +{ + printf("grestore\n"); +} + +fz_device *fz_newtracedevice(void) +{ + fz_device *dev = fz_malloc(sizeof(fz_device)); + dev->user = nil; + + dev->fillpath = fz_tracefillpath; + dev->strokepath = fz_tracestrokepath; + dev->clippath = fz_traceclippath; + + dev->filltext = fz_tracefilltext; + dev->stroketext = fz_tracestroketext; + dev->cliptext = fz_tracecliptext; + dev->ignoretext = fz_traceignoretext; + + dev->drawimage = fz_tracedrawimage; + dev->drawshade = fz_tracedrawshade; + + dev->popclip = fz_tracepopclip; + + return dev; +} + |