summaryrefslogtreecommitdiff
path: root/source/fitz/trace-device.c
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2013-06-19 15:29:44 +0200
committerTor Andersson <tor.andersson@artifex.com>2013-06-20 16:45:35 +0200
commit0a927854a10e1e6b9770a81e2e1d9f3093631757 (patch)
tree3d65d820d9fdba2d0d394d99c36290c851b78ca0 /source/fitz/trace-device.c
parent1ae8f19179c5f0f8c6352b3c7855465325d5449a (diff)
downloadmupdf-0a927854a10e1e6b9770a81e2e1d9f3093631757.tar.xz
Rearrange source files.
Diffstat (limited to 'source/fitz/trace-device.c')
-rw-r--r--source/fitz/trace-device.c339
1 files changed, 339 insertions, 0 deletions
diff --git a/source/fitz/trace-device.c b/source/fitz/trace-device.c
new file mode 100644
index 00000000..b3cade91
--- /dev/null
+++ b/source/fitz/trace-device.c
@@ -0,0 +1,339 @@
+#include "mupdf/fitz.h"
+
+static void
+fz_trace_matrix(const fz_matrix *ctm)
+{
+ printf(" matrix=\"%g %g %g %g %g %g\"",
+ ctm->a, ctm->b, ctm->c, ctm->d, ctm->e, ctm->f);
+}
+
+static void
+fz_trace_trm(const fz_matrix *trm)
+{
+ printf(" trm=\"%g %g %g %g\"",
+ trm->a, trm->b, trm->c, trm->d);
+}
+
+static void
+fz_trace_color(fz_colorspace *colorspace, float *color, float alpha)
+{
+ int i;
+ printf(" colorspace=\"%s\" color=\"", colorspace->name);
+ for (i = 0; i < colorspace->n; i++)
+ printf("%s%g", i == 0 ? "" : " ", color[i]);
+ printf("\"");
+ if (alpha < 1)
+ printf(" alpha=\"%g\"", alpha);
+}
+
+static void
+fz_trace_path(fz_path *path, int indent)
+{
+ float x, y;
+ int i = 0;
+ int n;
+ while (i < path->len)
+ {
+ for (n = 0; n < indent; n++)
+ putchar(' ');
+ switch (path->items[i++].k)
+ {
+ case FZ_MOVETO:
+ x = path->items[i++].v;
+ y = path->items[i++].v;
+ printf("<moveto x=\"%g\" y=\"%g\"/>\n", x, y);
+ break;
+ case FZ_LINETO:
+ x = path->items[i++].v;
+ y = path->items[i++].v;
+ printf("<lineto x=\"%g\" y=\"%g\"/>\n", x, y);
+ break;
+ case FZ_CURVETO:
+ x = path->items[i++].v;
+ y = path->items[i++].v;
+ printf("<curveto x1=\"%g\" y1=\"%g\"", x, y);
+ x = path->items[i++].v;
+ y = path->items[i++].v;
+ printf(" x2=\"%g\" y2=\"%g\"", x, y);
+ x = path->items[i++].v;
+ y = path->items[i++].v;
+ printf(" x3=\"%g\" y3=\"%g\"/>\n", x, y);
+ break;
+ case FZ_CLOSE_PATH:
+ printf("<closepath/>\n");
+ break;
+ }
+ }
+}
+
+static void
+fz_trace_begin_page(fz_device *dev, const fz_rect *rect, const fz_matrix *ctm)
+{
+ printf("<page mediabox=\"%g %g %g %g\"", rect->x0, rect->y0, rect->x1, rect->y1);
+ fz_trace_matrix(ctm);
+ printf(">\n");
+}
+
+static void
+fz_trace_end_page(fz_device *dev)
+{
+ printf("</page>\n");
+}
+
+static void
+fz_trace_fill_path(fz_device *dev, fz_path *path, int even_odd, const fz_matrix *ctm,
+ fz_colorspace *colorspace, float *color, float alpha)
+{
+ printf("<fill_path");
+ if (even_odd)
+ printf(" winding=\"eofill\"");
+ else
+ printf(" winding=\"nonzero\"");
+ fz_trace_color(colorspace, color, alpha);
+ fz_trace_matrix(ctm);
+ printf(">\n");
+ fz_trace_path(path, 0);
+ printf("</fill_path>\n");
+}
+
+static void
+fz_trace_stroke_path(fz_device *dev, fz_path *path, fz_stroke_state *stroke, const fz_matrix *ctm,
+ fz_colorspace *colorspace, float *color, float alpha)
+{
+ int i;
+
+ printf("<stroke_path");
+ printf(" linewidth=\"%g\"", stroke->linewidth);
+ printf(" miterlimit=\"%g\"", stroke->miterlimit);
+ printf(" linecap=\"%d,%d,%d\"", stroke->start_cap, stroke->dash_cap, stroke->end_cap);
+ printf(" linejoin=\"%d\"", stroke->linejoin);
+
+ if (stroke->dash_len)
+ {
+ printf(" dash_phase=\"%g\" dash=\"", stroke->dash_phase);
+ for (i = 0; i < stroke->dash_len; i++)
+ printf("%s%g", i > 0 ? " " : "", stroke->dash_list[i]);
+ printf("\"");
+ }
+
+ fz_trace_color(colorspace, color, alpha);
+ fz_trace_matrix(ctm);
+ printf(">\n");
+
+ fz_trace_path(path, 0);
+
+ printf("</stroke_path>\n");
+}
+
+static void
+fz_trace_clip_path(fz_device *dev, fz_path *path, const fz_rect *rect, int even_odd, const fz_matrix *ctm)
+{
+ printf("<clip_path");
+ if (even_odd)
+ printf(" winding=\"eofill\"");
+ else
+ printf(" winding=\"nonzero\"");
+ fz_trace_matrix(ctm);
+ if (rect)
+ printf(" contentbbox=\"%g %g %g %g\">\n", rect->x0, rect->y0, rect->x1, rect->y1);
+ else
+ printf(">\n");
+ fz_trace_path(path, 0);
+ printf("</clip_path>\n");
+}
+
+static void
+fz_trace_clip_stroke_path(fz_device *dev, fz_path *path, const fz_rect *rect, fz_stroke_state *stroke, const fz_matrix *ctm)
+{
+ printf("<clip_stroke_path");
+ fz_trace_matrix(ctm);
+ printf(">\n");
+ fz_trace_path(path, 0);
+ printf("</clip_stroke_path>\n");
+}
+
+static void
+fz_trace_fill_text(fz_device *dev, fz_text *text, const fz_matrix *ctm,
+ fz_colorspace *colorspace, float *color, float alpha)
+{
+ printf("<fill_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_trace_color(colorspace, color, alpha);
+ fz_trace_matrix(ctm);
+ fz_trace_trm(&text->trm);
+ printf(">\n");
+ fz_print_text(dev->ctx, stdout, text);
+ printf("</fill_text>\n");
+}
+
+static void
+fz_trace_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm,
+ fz_colorspace *colorspace, float *color, float alpha)
+{
+ printf("<stroke_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_trace_color(colorspace, color, alpha);
+ fz_trace_matrix(ctm);
+ fz_trace_trm(&text->trm);
+ printf(">\n");
+ fz_print_text(dev->ctx, stdout, text);
+ printf("</stroke_text>\n");
+}
+
+static void
+fz_trace_clip_text(fz_device *dev, fz_text *text, const fz_matrix *ctm, int accumulate)
+{
+ printf("<clip_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ printf(" accumulate=\"%d\"", accumulate);
+ fz_trace_matrix(ctm);
+ fz_trace_trm(&text->trm);
+ printf(">\n");
+ fz_print_text(dev->ctx, stdout, text);
+ printf("</clip_text>\n");
+}
+
+static void
+fz_trace_clip_stroke_text(fz_device *dev, fz_text *text, fz_stroke_state *stroke, const fz_matrix *ctm)
+{
+ printf("<clip_stroke_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_trace_matrix(ctm);
+ fz_trace_trm(&text->trm);
+ printf(">\n");
+ fz_print_text(dev->ctx, stdout, text);
+ printf("</clip_stroke_text>\n");
+}
+
+static void
+fz_trace_ignore_text(fz_device *dev, fz_text *text, const fz_matrix *ctm)
+{
+ printf("<ignore_text font=\"%s\" wmode=\"%d\"", text->font->name, text->wmode);
+ fz_trace_matrix(ctm);
+ fz_trace_trm(&text->trm);
+ printf(">\n");
+ fz_print_text(dev->ctx, stdout, text);
+ printf("</ignore_text>\n");
+}
+
+static void
+fz_trace_fill_image(fz_device *dev, fz_image *image, const fz_matrix *ctm, float alpha)
+{
+ printf("<fill_image alpha=\"%g\"", alpha);
+ fz_trace_matrix(ctm);
+ printf(" width=\"%d\" height=\"%d\"", image->w, image->h);
+ printf("/>\n");
+}
+
+static void
+fz_trace_fill_shade(fz_device *dev, fz_shade *shade, const fz_matrix *ctm, float alpha)
+{
+ printf("<fill_shade alpha=\"%g\"", alpha);
+ fz_trace_matrix(ctm);
+ printf("/>\n");
+}
+
+static void
+fz_trace_fill_image_mask(fz_device *dev, fz_image *image, const fz_matrix *ctm,
+fz_colorspace *colorspace, float *color, float alpha)
+{
+ printf("<fill_image_mask");
+ fz_trace_matrix(ctm);
+ fz_trace_color(colorspace, color, alpha);
+ printf(" width=\"%d\" height=\"%d\"", image->w, image->h);
+ printf("/>\n");
+}
+
+static void
+fz_trace_clip_image_mask(fz_device *dev, fz_image *image, const fz_rect *rect, const fz_matrix *ctm)
+{
+ printf("<clip_image_mask");
+ fz_trace_matrix(ctm);
+ printf(" width=\"%d\" height=\"%d\"", image->w, image->h);
+ printf("/>\n");
+}
+
+static void
+fz_trace_pop_clip(fz_device *dev)
+{
+ printf("<pop_clip/>\n");
+}
+
+static void
+fz_trace_begin_mask(fz_device *dev, const fz_rect *bbox, int luminosity, fz_colorspace *colorspace, float *color)
+{
+ printf("<mask bbox=\"%g %g %g %g\" s=\"%s\"",
+ bbox->x0, bbox->y0, bbox->x1, bbox->y1,
+ luminosity ? "luminosity" : "alpha");
+ printf(">\n");
+}
+
+static void
+fz_trace_end_mask(fz_device *dev)
+{
+ printf("</mask>\n");
+}
+
+static void
+fz_trace_begin_group(fz_device *dev, const fz_rect *bbox, int isolated, int knockout, int blendmode, float alpha)
+{
+ printf("<group bbox=\"%g %g %g %g\" isolated=\"%d\" knockout=\"%d\" blendmode=\"%s\" alpha=\"%g\">\n",
+ bbox->x0, bbox->y0, bbox->x1, bbox->y1,
+ isolated, knockout, fz_blendmode_name(blendmode), alpha);
+}
+
+static void
+fz_trace_end_group(fz_device *dev)
+{
+ printf("</group>\n");
+}
+
+static int
+fz_trace_begin_tile(fz_device *dev, const fz_rect *area, const fz_rect *view, float xstep, float ystep, const fz_matrix *ctm, int id)
+{
+ printf("<tile");
+ printf(" area=\"%g %g %g %g\"", area->x0, area->y0, area->x1, area->y1);
+ printf(" view=\"%g %g %g %g\"", view->x0, view->y0, view->x1, view->y1);
+ printf(" xstep=\"%g\" ystep=\"%g\"", xstep, ystep);
+ fz_trace_matrix(ctm);
+ printf(">\n");
+ return 0;
+}
+
+static void
+fz_trace_end_tile(fz_device *dev)
+{
+ printf("</tile>\n");
+}
+
+fz_device *fz_new_trace_device(fz_context *ctx)
+{
+ fz_device *dev = fz_new_device(ctx, NULL);
+
+ dev->begin_page = fz_trace_begin_page;
+ dev->end_page = fz_trace_end_page;
+
+ dev->fill_path = fz_trace_fill_path;
+ dev->stroke_path = fz_trace_stroke_path;
+ dev->clip_path = fz_trace_clip_path;
+ dev->clip_stroke_path = fz_trace_clip_stroke_path;
+
+ dev->fill_text = fz_trace_fill_text;
+ dev->stroke_text = fz_trace_stroke_text;
+ dev->clip_text = fz_trace_clip_text;
+ dev->clip_stroke_text = fz_trace_clip_stroke_text;
+ dev->ignore_text = fz_trace_ignore_text;
+
+ dev->fill_shade = fz_trace_fill_shade;
+ dev->fill_image = fz_trace_fill_image;
+ dev->fill_image_mask = fz_trace_fill_image_mask;
+ dev->clip_image_mask = fz_trace_clip_image_mask;
+
+ dev->pop_clip = fz_trace_pop_clip;
+
+ dev->begin_mask = fz_trace_begin_mask;
+ dev->end_mask = fz_trace_end_mask;
+ dev->begin_group = fz_trace_begin_group;
+ dev->end_group = fz_trace_end_group;
+
+ dev->begin_tile = fz_trace_begin_tile;
+ dev->end_tile = fz_trace_end_tile;
+
+ return dev;
+}