summaryrefslogtreecommitdiff
path: root/fitz/dev_trace.c
diff options
context:
space:
mode:
authorTor Andersson <tor@ghostscript.com>2009-12-07 17:12:25 +0100
committerTor Andersson <tor@ghostscript.com>2009-12-07 17:12:25 +0100
commitd11dfefb1fcd1f557eae0f02dac142ffa3c3676c (patch)
treed3dd32d32dc644b8dc9d155645b612f0ad5e0f25 /fitz/dev_trace.c
parentef4e06b7e423ada49a2e749d55687da756925cc8 (diff)
downloadmupdf-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.c132
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;
+}
+