summaryrefslogtreecommitdiff
path: root/source/fitz/trace-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/fitz/trace-device.c')
-rw-r--r--source/fitz/trace-device.c98
1 files changed, 59 insertions, 39 deletions
diff --git a/source/fitz/trace-device.c b/source/fitz/trace-device.c
index 97dd4f79..105f7e6b 100644
--- a/source/fitz/trace-device.c
+++ b/source/fitz/trace-device.c
@@ -27,42 +27,62 @@ fz_trace_color(fz_colorspace *colorspace, float *color, float alpha)
}
static void
-fz_trace_path(fz_path *path, int indent)
+trace_moveto(fz_context *ctx, void *arg, float x, float y)
{
- float x, y;
- int i = 0, k = 0, n;
- while (i < path->cmd_len)
- {
- for (n = 0; n < indent; n++)
- putchar(' ');
- switch (path->cmds[i++])
- {
- case FZ_MOVETO:
- x = path->coords[k++];
- y = path->coords[k++];
- printf("<moveto x=\"%g\" y=\"%g\"/>\n", x, y);
- break;
- case FZ_LINETO:
- x = path->coords[k++];
- y = path->coords[k++];
- printf("<lineto x=\"%g\" y=\"%g\"/>\n", x, y);
- break;
- case FZ_CURVETO:
- x = path->coords[k++];
- y = path->coords[k++];
- printf("<curveto x1=\"%g\" y1=\"%g\"", x, y);
- x = path->coords[k++];
- y = path->coords[k++];
- printf(" x2=\"%g\" y2=\"%g\"", x, y);
- x = path->coords[k++];
- y = path->coords[k++];
- printf(" x3=\"%g\" y3=\"%g\"/>\n", x, y);
- break;
- case FZ_CLOSE_PATH:
- printf("<closepath/>\n");
- break;
- }
- }
+ int indent = (int)(intptr_t)arg;
+ int n;
+
+ for (n = 0; n < indent; n++)
+ putchar(' ');
+ printf("<moveto x=\"%g\" y=\"%g\"/>\n", x, y);
+}
+
+static void
+trace_lineto(fz_context *ctx, void *arg, float x, float y)
+{
+ int indent = (int)(intptr_t)arg;
+ int n;
+
+ for (n = 0; n < indent; n++)
+ putchar(' ');
+ printf("<lineto x=\"%g\" y=\"%g\"/>\n", x, y);
+}
+
+static void
+trace_curveto(fz_context *ctx, void *arg, float x1, float y1, float x2, float y2, float x3, float y3)
+{
+ int indent = (int)(intptr_t)arg;
+ int n;
+
+ for (n = 0; n < indent; n++)
+ putchar(' ');
+ printf("<curveto x1=\"%g\" y1=\"%g\" x2=\"%g\" y2=\"%g\" x3=\"%g\" y3=\"%g\"/>\n", x1, y1, x2, y2, x3, y3);
+}
+
+static void
+trace_close(fz_context *ctx, void *arg)
+{
+ int indent = (int)(intptr_t)arg;
+ int n;
+
+ for (n = 0; n < indent; n++)
+ putchar(' ');
+ printf("<closepath/>\n");
+}
+
+
+static const fz_path_processor trace_path_proc =
+{
+ trace_moveto,
+ trace_lineto,
+ trace_curveto,
+ trace_close
+};
+
+static void
+fz_trace_path(fz_context *ctx, fz_path *path, int indent)
+{
+ fz_process_path(ctx, &trace_path_proc, (void *)(intptr_t)indent, path);
}
static void
@@ -91,7 +111,7 @@ fz_trace_fill_path(fz_context *ctx, fz_device *dev, fz_path *path, int even_odd,
fz_trace_color(colorspace, color, alpha);
fz_trace_matrix(ctm);
printf(">\n");
- fz_trace_path(path, 0);
+ fz_trace_path(ctx, path, 0);
printf("</fill_path>\n");
}
@@ -119,7 +139,7 @@ fz_trace_stroke_path(fz_context *ctx, fz_device *dev, fz_path *path, fz_stroke_s
fz_trace_matrix(ctm);
printf(">\n");
- fz_trace_path(path, 0);
+ fz_trace_path(ctx, path, 0);
printf("</stroke_path>\n");
}
@@ -137,7 +157,7 @@ fz_trace_clip_path(fz_context *ctx, fz_device *dev, fz_path *path, const fz_rect
printf(" contentbbox=\"%g %g %g %g\">\n", rect->x0, rect->y0, rect->x1, rect->y1);
else
printf(">\n");
- fz_trace_path(path, 0);
+ fz_trace_path(ctx, path, 0);
printf("</clip_path>\n");
}
@@ -147,7 +167,7 @@ fz_trace_clip_stroke_path(fz_context *ctx, fz_device *dev, fz_path *path, const
printf("<clip_stroke_path");
fz_trace_matrix(ctm);
printf(">\n");
- fz_trace_path(path, 0);
+ fz_trace_path(ctx, path, 0);
printf("</clip_stroke_path>\n");
}