summaryrefslogtreecommitdiff
path: root/xps/xps_path.c
diff options
context:
space:
mode:
Diffstat (limited to 'xps/xps_path.c')
-rw-r--r--xps/xps_path.c202
1 files changed, 101 insertions, 101 deletions
diff --git a/xps/xps_path.c b/xps/xps_path.c
index 33526262..ead2c7fa 100644
--- a/xps/xps_path.c
+++ b/xps/xps_path.c
@@ -41,7 +41,7 @@ fz_currentpoint(fz_path *path)
* without transforming the line width.
*/
static void
-xps_draw_arc_segment(fz_path *path, fz_matrix mtx, float th0, float th1, int iscw)
+xps_draw_arc_segment(fz_context *doc, fz_path *path, fz_matrix mtx, float th0, float th1, int iscw)
{
float t, d;
fz_point p;
@@ -56,18 +56,18 @@ xps_draw_arc_segment(fz_path *path, fz_matrix mtx, float th0, float th1, int isc
p.x = cosf(th0);
p.y = sinf(th0);
p = fz_transform_point(mtx, p);
- fz_lineto(path, p.x, p.y);
+ fz_lineto(doc, path, p.x, p.y);
for (t = th0; t < th1; t += d)
{
p.x = cosf(t);
p.y = sinf(t);
p = fz_transform_point(mtx, p);
- fz_lineto(path, p.x, p.y);
+ fz_lineto(doc, path, p.x, p.y);
}
p.x = cosf(th1);
p.y = sinf(th1);
p = fz_transform_point(mtx, p);
- fz_lineto(path, p.x, p.y);
+ fz_lineto(doc, path, p.x, p.y);
}
else
{
@@ -75,18 +75,18 @@ xps_draw_arc_segment(fz_path *path, fz_matrix mtx, float th0, float th1, int isc
p.x = cosf(th0);
p.y = sinf(th0);
p = fz_transform_point(mtx, p);
- fz_lineto(path, p.x, p.y);
+ fz_lineto(doc, path, p.x, p.y);
for (t = th0; t > th1; t -= d)
{
p.x = cosf(t);
p.y = sinf(t);
p = fz_transform_point(mtx, p);
- fz_lineto(path, p.x, p.y);
+ fz_lineto(doc, path, p.x, p.y);
}
p.x = cosf(th1);
p.y = sinf(th1);
p = fz_transform_point(mtx, p);
- fz_lineto(path, p.x, p.y);
+ fz_lineto(doc, path, p.x, p.y);
}
}
@@ -107,7 +107,7 @@ angle_between(const fz_point u, const fz_point v)
}
static void
-xps_draw_arc(fz_path *path,
+xps_draw_arc(fz_context *doc, fz_path *path,
float size_x, float size_y, float rotation_angle,
int is_large_arc, int is_clockwise,
float point_x, float point_y)
@@ -147,7 +147,7 @@ xps_draw_arc(fz_path *path,
ry = fabsf(ry);
if (rx < 0.001f || ry < 0.001f)
{
- fz_lineto(path, x2, y2);
+ fz_lineto(doc, path, x2, y2);
return;
}
@@ -207,9 +207,9 @@ xps_draw_arc(fz_path *path,
mtx = fz_concat(fz_translate(cx, cy), mtx);
mtx = fz_concat(fz_rotate(rotation_angle), mtx);
mtx = fz_concat(fz_scale(rx, ry), mtx);
- xps_draw_arc_segment(path, mtx, th1, th1 + dth, is_clockwise);
+ xps_draw_arc_segment(doc, path, mtx, th1, th1 + dth, is_clockwise);
- fz_lineto(path, point_x, point_y);
+ fz_lineto(doc, path, point_x, point_y);
}
/*
@@ -219,7 +219,7 @@ xps_draw_arc(fz_path *path,
*/
static fz_path *
-xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
+xps_parse_abbreviated_geometry(xps_document *doc, char *geom, int *fill_rule)
{
fz_path *path;
char **args;
@@ -232,9 +232,9 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
float smooth_x, smooth_y; /* saved cubic bezier control point for smooth curves */
int reset_smooth;
- path = fz_new_path();
+ path = fz_new_path(doc->ctx);
- args = fz_calloc(strlen(geom) + 1, sizeof(char*));
+ args = fz_malloc_array(doc->ctx, strlen(geom) + 1, sizeof(char*));
pargs = args;
while (*s)
@@ -291,44 +291,44 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
break;
case 'M':
- fz_moveto(path, fz_atof(args[i]), fz_atof(args[i+1]));
+ fz_moveto(doc->ctx, path, fz_atof(args[i]), fz_atof(args[i+1]));
i += 2;
break;
case 'm':
pt = fz_currentpoint(path);
- fz_moveto(path, pt.x + fz_atof(args[i]), pt.y + fz_atof(args[i+1]));
+ fz_moveto(doc->ctx, path, pt.x + fz_atof(args[i]), pt.y + fz_atof(args[i+1]));
i += 2;
break;
case 'L':
- fz_lineto(path, fz_atof(args[i]), fz_atof(args[i+1]));
+ fz_lineto(doc->ctx, path, fz_atof(args[i]), fz_atof(args[i+1]));
i += 2;
break;
case 'l':
pt = fz_currentpoint(path);
- fz_lineto(path, pt.x + fz_atof(args[i]), pt.y + fz_atof(args[i+1]));
+ fz_lineto(doc->ctx, path, pt.x + fz_atof(args[i]), pt.y + fz_atof(args[i+1]));
i += 2;
break;
case 'H':
pt = fz_currentpoint(path);
- fz_lineto(path, fz_atof(args[i]), pt.y);
+ fz_lineto(doc->ctx, path, fz_atof(args[i]), pt.y);
i += 1;
break;
case 'h':
pt = fz_currentpoint(path);
- fz_lineto(path, pt.x + fz_atof(args[i]), pt.y);
+ fz_lineto(doc->ctx, path, pt.x + fz_atof(args[i]), pt.y);
i += 1;
break;
case 'V':
pt = fz_currentpoint(path);
- fz_lineto(path, pt.x, fz_atof(args[i]));
+ fz_lineto(doc->ctx, path, pt.x, fz_atof(args[i]));
i += 1;
break;
case 'v':
pt = fz_currentpoint(path);
- fz_lineto(path, pt.x, pt.y + fz_atof(args[i]));
+ fz_lineto(doc->ctx, path, pt.x, pt.y + fz_atof(args[i]));
i += 1;
break;
@@ -339,7 +339,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
y2 = fz_atof(args[i+3]);
x3 = fz_atof(args[i+4]);
y3 = fz_atof(args[i+5]);
- fz_curveto(path, x1, y1, x2, y2, x3, y3);
+ fz_curveto(doc->ctx, path, x1, y1, x2, y2, x3, y3);
i += 6;
reset_smooth = 0;
smooth_x = x3 - x2;
@@ -354,7 +354,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
y2 = fz_atof(args[i+3]) + pt.y;
x3 = fz_atof(args[i+4]) + pt.x;
y3 = fz_atof(args[i+5]) + pt.y;
- fz_curveto(path, x1, y1, x2, y2, x3, y3);
+ fz_curveto(doc->ctx, path, x1, y1, x2, y2, x3, y3);
i += 6;
reset_smooth = 0;
smooth_x = x3 - x2;
@@ -367,7 +367,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
y1 = fz_atof(args[i+1]);
x2 = fz_atof(args[i+2]);
y2 = fz_atof(args[i+3]);
- fz_curveto(path, pt.x + smooth_x, pt.y + smooth_y, x1, y1, x2, y2);
+ fz_curveto(doc->ctx, path, pt.x + smooth_x, pt.y + smooth_y, x1, y1, x2, y2);
i += 4;
reset_smooth = 0;
smooth_x = x2 - x1;
@@ -380,7 +380,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
y1 = fz_atof(args[i+1]) + pt.y;
x2 = fz_atof(args[i+2]) + pt.x;
y2 = fz_atof(args[i+3]) + pt.y;
- fz_curveto(path, pt.x + smooth_x, pt.y + smooth_y, x1, y1, x2, y2);
+ fz_curveto(doc->ctx, path, pt.x + smooth_x, pt.y + smooth_y, x1, y1, x2, y2);
i += 4;
reset_smooth = 0;
smooth_x = x2 - x1;
@@ -393,7 +393,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
y1 = fz_atof(args[i+1]);
x2 = fz_atof(args[i+2]);
y2 = fz_atof(args[i+3]);
- fz_curveto(path,
+ fz_curveto(doc->ctx, path,
(pt.x + 2 * x1) / 3, (pt.y + 2 * y1) / 3,
(x2 + 2 * x1) / 3, (y2 + 2 * y1) / 3,
x2, y2);
@@ -405,7 +405,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
y1 = fz_atof(args[i+1]) + pt.y;
x2 = fz_atof(args[i+2]) + pt.x;
y2 = fz_atof(args[i+3]) + pt.y;
- fz_curveto(path,
+ fz_curveto(doc->ctx, path,
(pt.x + 2 * x1) / 3, (pt.y + 2 * y1) / 3,
(x2 + 2 * x1) / 3, (y2 + 2 * y1) / 3,
x2, y2);
@@ -413,7 +413,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
break;
case 'A':
- xps_draw_arc(path,
+ xps_draw_arc(doc->ctx, path,
fz_atof(args[i+0]), fz_atof(args[i+1]), fz_atof(args[i+2]),
atoi(args[i+3]), atoi(args[i+4]),
fz_atof(args[i+5]), fz_atof(args[i+6]));
@@ -421,7 +421,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
break;
case 'a':
pt = fz_currentpoint(path);
- xps_draw_arc(path,
+ xps_draw_arc(doc->ctx, path,
fz_atof(args[i+0]), fz_atof(args[i+1]), fz_atof(args[i+2]),
atoi(args[i+3]), atoi(args[i+4]),
fz_atof(args[i+5]) + pt.x, fz_atof(args[i+6]) + pt.y);
@@ -430,7 +430,7 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
case 'Z':
case 'z':
- fz_closepath(path);
+ fz_closepath(doc->ctx, path);
break;
default:
@@ -441,12 +441,12 @@ xps_parse_abbreviated_geometry(xps_context *ctx, char *geom, int *fill_rule)
old = cmd;
}
- fz_free(args);
+ fz_free(doc->ctx, args);
return path;
}
static void
-xps_parse_arc_segment(fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
+xps_parse_arc_segment(fz_context *doc, fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
{
/* ArcSegment pretty much follows the SVG algorithm for converting an
* arc in endpoint representation to an arc in centerpoint
@@ -468,7 +468,7 @@ xps_parse_arc_segment(fz_path *path, xml_element *root, int stroking, int *skipp
if (!point_att || !size_att || !rotation_angle_att || !is_large_arc_att || !sweep_direction_att)
{
- fz_warn("ArcSegment element is missing attributes");
+ fz_warn(doc, "ArcSegment element is missing attributes");
return;
}
@@ -486,15 +486,15 @@ xps_parse_arc_segment(fz_path *path, xml_element *root, int stroking, int *skipp
if (stroking && !is_stroked)
{
- fz_moveto(path, point_x, point_y);
+ fz_moveto(doc, path, point_x, point_y);
return;
}
- xps_draw_arc(path, size_x, size_y, rotation_angle, is_large_arc, is_clockwise, point_x, point_y);
+ xps_draw_arc(doc, path, size_x, size_y, rotation_angle, is_large_arc, is_clockwise, point_x, point_y);
}
static void
-xps_parse_poly_quadratic_bezier_segment(fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
+xps_parse_poly_quadratic_bezier_segment(fz_context *doc, fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
{
char *points_att = xml_att(root, "Points");
char *is_stroked_att = xml_att(root, "IsStroked");
@@ -506,7 +506,7 @@ xps_parse_poly_quadratic_bezier_segment(fz_path *path, xml_element *root, int st
if (!points_att)
{
- fz_warn("PolyQuadraticBezierSegment element has no points");
+ fz_warn(doc, "PolyQuadraticBezierSegment element has no points");
return;
}
@@ -528,12 +528,12 @@ xps_parse_poly_quadratic_bezier_segment(fz_path *path, xml_element *root, int st
{
if (stroking && !is_stroked)
{
- fz_moveto(path, x[1], y[1]);
+ fz_moveto(doc, path, x[1], y[1]);
}
else
{
pt = fz_currentpoint(path);
- fz_curveto(path,
+ fz_curveto(doc, path,
(pt.x + 2 * x[0]) / 3, (pt.y + 2 * y[0]) / 3,
(x[1] + 2 * x[0]) / 3, (y[1] + 2 * y[0]) / 3,
x[1], y[1]);
@@ -544,7 +544,7 @@ xps_parse_poly_quadratic_bezier_segment(fz_path *path, xml_element *root, int st
}
static void
-xps_parse_poly_bezier_segment(fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
+xps_parse_poly_bezier_segment(fz_context *doc, fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
{
char *points_att = xml_att(root, "Points");
char *is_stroked_att = xml_att(root, "IsStroked");
@@ -555,7 +555,7 @@ xps_parse_poly_bezier_segment(fz_path *path, xml_element *root, int stroking, in
if (!points_att)
{
- fz_warn("PolyBezierSegment element has no points");
+ fz_warn(doc, "PolyBezierSegment element has no points");
return;
}
@@ -576,16 +576,16 @@ xps_parse_poly_bezier_segment(fz_path *path, xml_element *root, int stroking, in
if (n == 3)
{
if (stroking && !is_stroked)
- fz_moveto(path, x[2], y[2]);
+ fz_moveto(doc, path, x[2], y[2]);
else
- fz_curveto(path, x[0], y[0], x[1], y[1], x[2], y[2]);
+ fz_curveto(doc, path, x[0], y[0], x[1], y[1], x[2], y[2]);
n = 0;
}
}
}
static void
-xps_parse_poly_line_segment(fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
+xps_parse_poly_line_segment(fz_context *doc, fz_path *path, xml_element *root, int stroking, int *skipped_stroke)
{
char *points_att = xml_att(root, "Points");
char *is_stroked_att = xml_att(root, "IsStroked");
@@ -595,7 +595,7 @@ xps_parse_poly_line_segment(fz_path *path, xml_element *root, int stroking, int
if (!points_att)
{
- fz_warn("PolyLineSegment element has no points");
+ fz_warn(doc, "PolyLineSegment element has no points");
return;
}
@@ -611,15 +611,15 @@ xps_parse_poly_line_segment(fz_path *path, xml_element *root, int stroking, int
while (*s == ' ') s++;
sscanf(s, "%g,%g", &x, &y);
if (stroking && !is_stroked)
- fz_moveto(path, x, y);
+ fz_moveto(doc, path, x, y);
else
- fz_lineto(path, x, y);
+ fz_lineto(doc, path, x, y);
while (*s != ' ' && *s != 0) s++;
}
}
static void
-xps_parse_path_figure(fz_path *path, xml_element *root, int stroking)
+xps_parse_path_figure(fz_context *doc, fz_path *path, xml_element *root, int stroking)
{
xml_element *node;
@@ -648,31 +648,31 @@ xps_parse_path_figure(fz_path *path, xml_element *root, int stroking)
if (!stroking && !is_filled) /* not filled, when filling */
return;
- fz_moveto(path, start_x, start_y);
+ fz_moveto(doc, path, start_x, start_y);
for (node = xml_down(root); node; node = xml_next(node))
{
if (!strcmp(xml_tag(node), "ArcSegment"))
- xps_parse_arc_segment(path, node, stroking, &skipped_stroke);
+ xps_parse_arc_segment(doc, path, node, stroking, &skipped_stroke);
if (!strcmp(xml_tag(node), "PolyBezierSegment"))
- xps_parse_poly_bezier_segment(path, node, stroking, &skipped_stroke);
+ xps_parse_poly_bezier_segment(doc, path, node, stroking, &skipped_stroke);
if (!strcmp(xml_tag(node), "PolyLineSegment"))
- xps_parse_poly_line_segment(path, node, stroking, &skipped_stroke);
+ xps_parse_poly_line_segment(doc, path, node, stroking, &skipped_stroke);
if (!strcmp(xml_tag(node), "PolyQuadraticBezierSegment"))
- xps_parse_poly_quadratic_bezier_segment(path, node, stroking, &skipped_stroke);
+ xps_parse_poly_quadratic_bezier_segment(doc, path, node, stroking, &skipped_stroke);
}
if (is_closed)
{
if (stroking && skipped_stroke)
- fz_lineto(path, start_x, start_y); /* we've skipped using fz_moveto... */
+ fz_lineto(doc, path, start_x, start_y); /* we've skipped using fz_moveto... */
else
- fz_closepath(path); /* no skipped segments, safe to closepath properly */
+ fz_closepath(doc, path); /* no skipped segments, safe to closepath properly */
}
}
fz_path *
-xps_parse_path_geometry(xps_context *ctx, xps_resource *dict, xml_element *root, int stroking, int *fill_rule)
+xps_parse_path_geometry(xps_document *doc, xps_resource *dict, xml_element *root, int stroking, int *fill_rule)
{
xml_element *node;
@@ -696,8 +696,8 @@ xps_parse_path_geometry(xps_context *ctx, xps_resource *dict, xml_element *root,
transform_tag = xml_down(node);
}
- xps_resolve_resource_reference(ctx, dict, &transform_att, &transform_tag, NULL);
- xps_resolve_resource_reference(ctx, dict, &figures_att, &figures_tag, NULL);
+ xps_resolve_resource_reference(doc, dict, &transform_att, &transform_tag, NULL);
+ xps_resolve_resource_reference(doc, dict, &figures_att, &figures_tag, NULL);
if (fill_rule_att)
{
@@ -709,22 +709,22 @@ xps_parse_path_geometry(xps_context *ctx, xps_resource *dict, xml_element *root,
transform = fz_identity;
if (transform_att)
- xps_parse_render_transform(ctx, transform_att, &transform);
+ xps_parse_render_transform(doc, transform_att, &transform);
if (transform_tag)
- xps_parse_matrix_transform(ctx, transform_tag, &transform);
+ xps_parse_matrix_transform(doc, transform_tag, &transform);
if (figures_att)
- path = xps_parse_abbreviated_geometry(ctx, figures_att, fill_rule);
+ path = xps_parse_abbreviated_geometry(doc, figures_att, fill_rule);
else
- path = fz_new_path();
+ path = fz_new_path(doc->ctx);
if (figures_tag)
- xps_parse_path_figure(path, figures_tag, stroking);
+ xps_parse_path_figure(doc->ctx, path, figures_tag, stroking);
for (node = xml_down(root); node; node = xml_next(node))
{
if (!strcmp(xml_tag(node), "PathFigure"))
- xps_parse_path_figure(path, node, stroking);
+ xps_parse_path_figure(doc->ctx, path, node, stroking);
}
if (transform_att || transform_tag)
@@ -747,19 +747,19 @@ xps_parse_line_cap(char *attr)
}
void
-xps_clip(xps_context *ctx, fz_matrix ctm, xps_resource *dict, char *clip_att, xml_element *clip_tag)
+xps_clip(xps_document *doc, fz_matrix ctm, xps_resource *dict, char *clip_att, xml_element *clip_tag)
{
fz_path *path;
int fill_rule = 0;
if (clip_att)
- path = xps_parse_abbreviated_geometry(ctx, clip_att, &fill_rule);
+ path = xps_parse_abbreviated_geometry(doc, clip_att, &fill_rule);
else if (clip_tag)
- path = xps_parse_path_geometry(ctx, dict, clip_tag, 0, &fill_rule);
+ path = xps_parse_path_geometry(doc, dict, clip_tag, 0, &fill_rule);
else
- path = fz_new_path();
- fz_clip_path(ctx->dev, path, NULL, fill_rule == 0, ctm);
- fz_free_path(path);
+ path = fz_new_path(doc->ctx);
+ fz_clip_path(doc->dev, path, NULL, fill_rule == 0, ctm);
+ fz_free_path(doc->ctx, path);
}
/*
@@ -768,7 +768,7 @@ xps_clip(xps_context *ctx, fz_matrix ctm, xps_resource *dict, char *clip_att, xm
*/
void
-xps_parse_path(xps_context *ctx, fz_matrix ctm, char *base_uri, xps_resource *dict, xml_element *root)
+xps_parse_path(xps_document *doc, fz_matrix ctm, char *base_uri, xps_resource *dict, xml_element *root)
{
xml_element *node;
@@ -852,12 +852,12 @@ xps_parse_path(xps_context *ctx, fz_matrix ctm, char *base_uri, xps_resource *di
stroke_uri = base_uri;
opacity_mask_uri = base_uri;
- xps_resolve_resource_reference(ctx, dict, &data_att, &data_tag, NULL);
- xps_resolve_resource_reference(ctx, dict, &clip_att, &clip_tag, NULL);
- xps_resolve_resource_reference(ctx, dict, &transform_att, &transform_tag, NULL);
- xps_resolve_resource_reference(ctx, dict, &fill_att, &fill_tag, &fill_uri);
- xps_resolve_resource_reference(ctx, dict, &stroke_att, &stroke_tag, &stroke_uri);
- xps_resolve_resource_reference(ctx, dict, &opacity_mask_att, &opacity_mask_tag, &opacity_mask_uri);
+ xps_resolve_resource_reference(doc, dict, &data_att, &data_tag, NULL);
+ xps_resolve_resource_reference(doc, dict, &clip_att, &clip_tag, NULL);
+ xps_resolve_resource_reference(doc, dict, &transform_att, &transform_tag, NULL);
+ xps_resolve_resource_reference(doc, dict, &fill_att, &fill_tag, &fill_uri);
+ xps_resolve_resource_reference(doc, dict, &stroke_att, &stroke_tag, &stroke_uri);
+ xps_resolve_resource_reference(doc, dict, &opacity_mask_att, &opacity_mask_tag, &opacity_mask_uri);
/*
* Act on the information we have gathered:
@@ -921,70 +921,70 @@ xps_parse_path(xps_context *ctx, fz_matrix ctm, char *base_uri, xps_resource *di
transform = fz_identity;
if (transform_att)
- xps_parse_render_transform(ctx, transform_att, &transform);
+ xps_parse_render_transform(doc, transform_att, &transform);
if (transform_tag)
- xps_parse_matrix_transform(ctx, transform_tag, &transform);
+ xps_parse_matrix_transform(doc, transform_tag, &transform);
ctm = fz_concat(transform, ctm);
if (clip_att || clip_tag)
- xps_clip(ctx, ctm, dict, clip_att, clip_tag);
+ xps_clip(doc, ctm, dict, clip_att, clip_tag);
fill_rule = 0;
if (data_att)
- path = xps_parse_abbreviated_geometry(ctx, data_att, &fill_rule);
+ path = xps_parse_abbreviated_geometry(doc, data_att, &fill_rule);
else if (data_tag)
- path = xps_parse_path_geometry(ctx, dict, data_tag, 0, &fill_rule);
+ path = xps_parse_path_geometry(doc, dict, data_tag, 0, &fill_rule);
if (stroke_att || stroke_tag)
area = fz_bound_path(path, &stroke, ctm);
else
area = fz_bound_path(path, NULL, ctm);
- xps_begin_opacity(ctx, ctm, area, opacity_mask_uri, dict, opacity_att, opacity_mask_tag);
+ xps_begin_opacity(doc, ctm, area, opacity_mask_uri, dict, opacity_att, opacity_mask_tag);
if (fill_att)
{
- xps_parse_color(ctx, base_uri, fill_att, &colorspace, samples);
+ xps_parse_color(doc, base_uri, fill_att, &colorspace, samples);
if (fill_opacity_att)
samples[0] = fz_atof(fill_opacity_att);
- xps_set_color(ctx, colorspace, samples);
+ xps_set_color(doc, colorspace, samples);
- fz_fill_path(ctx->dev, path, fill_rule == 0, ctm,
- ctx->colorspace, ctx->color, ctx->alpha);
+ fz_fill_path(doc->dev, path, fill_rule == 0, ctm,
+ doc->colorspace, doc->color, doc->alpha);
}
if (fill_tag)
{
area = fz_bound_path(path, NULL, ctm);
- fz_clip_path(ctx->dev, path, NULL, fill_rule == 0, ctm);
- xps_parse_brush(ctx, ctm, area, fill_uri, dict, fill_tag);
- fz_pop_clip(ctx->dev);
+ fz_clip_path(doc->dev, path, NULL, fill_rule == 0, ctm);
+ xps_parse_brush(doc, ctm, area, fill_uri, dict, fill_tag);
+ fz_pop_clip(doc->dev);
}
if (stroke_att)
{
- xps_parse_color(ctx, base_uri, stroke_att, &colorspace, samples);
+ xps_parse_color(doc, base_uri, stroke_att, &colorspace, samples);
if (stroke_opacity_att)
samples[0] = fz_atof(stroke_opacity_att);
- xps_set_color(ctx, colorspace, samples);
+ xps_set_color(doc, colorspace, samples);
- fz_stroke_path(ctx->dev, path, &stroke, ctm,
- ctx->colorspace, ctx->color, ctx->alpha);
+ fz_stroke_path(doc->dev, path, &stroke, ctm,
+ doc->colorspace, doc->color, doc->alpha);
}
if (stroke_tag)
{
- fz_clip_stroke_path(ctx->dev, path, NULL, &stroke, ctm);
- xps_parse_brush(ctx, ctm, area, stroke_uri, dict, stroke_tag);
- fz_pop_clip(ctx->dev);
+ fz_clip_stroke_path(doc->dev, path, NULL, &stroke, ctm);
+ xps_parse_brush(doc, ctm, area, stroke_uri, dict, stroke_tag);
+ fz_pop_clip(doc->dev);
}
- xps_end_opacity(ctx, opacity_mask_uri, dict, opacity_att, opacity_mask_tag);
+ xps_end_opacity(doc, opacity_mask_uri, dict, opacity_att, opacity_mask_tag);
- fz_free_path(path);
+ fz_free_path(doc->ctx, path);
path = NULL;
if (clip_att || clip_tag)
- fz_pop_clip(ctx->dev);
+ fz_pop_clip(doc->dev);
}