summaryrefslogtreecommitdiff
path: root/source/svg
diff options
context:
space:
mode:
Diffstat (limited to 'source/svg')
-rw-r--r--source/svg/svg-doc.c2
-rw-r--r--source/svg/svg-imp.h4
-rw-r--r--source/svg/svg-parse.c20
-rw-r--r--source/svg/svg-run.c19
4 files changed, 23 insertions, 22 deletions
diff --git a/source/svg/svg-doc.c b/source/svg/svg-doc.c
index 89ff148c..112368cb 100644
--- a/source/svg/svg-doc.c
+++ b/source/svg/svg-doc.c
@@ -35,7 +35,7 @@ svg_bound_page(fz_context *ctx, fz_page *page_)
}
static void
-svg_run_page(fz_context *ctx, fz_page *page_, fz_device *dev, const fz_matrix *ctm, fz_cookie *cookie)
+svg_run_page(fz_context *ctx, fz_page *page_, fz_device *dev, fz_matrix ctm, fz_cookie *cookie)
{
svg_page *page = (svg_page*)page_;
svg_document *doc = page->doc;
diff --git a/source/svg/svg-imp.h b/source/svg/svg-imp.h
index ad86b536..614304b8 100644
--- a/source/svg/svg-imp.h
+++ b/source/svg/svg-imp.h
@@ -20,7 +20,7 @@ float svg_parse_length(const char *str, float percent, float font_size);
float svg_parse_angle(const char *str);
void svg_parse_color(fz_context *ctx, svg_document *doc, char *str, float *rgb);
-void svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *ctm);
+fz_matrix svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix transform);
int svg_is_whitespace_or_comma(int c);
int svg_is_whitespace(int c);
@@ -30,6 +30,6 @@ int svg_is_digit(int c);
/* Graphics content parsing. */
void svg_parse_document_bounds(fz_context *ctx, svg_document *doc, fz_xml *root);
-void svg_run_document(fz_context *ctx, svg_document *doc, fz_xml *root, fz_device *dev, const fz_matrix *ctm);
+void svg_run_document(fz_context *ctx, svg_document *doc, fz_xml *root, fz_device *dev, fz_matrix ctm);
#endif
diff --git a/source/svg/svg-parse.c b/source/svg/svg-parse.c
index 5c7fc33a..c5b0a7db 100644
--- a/source/svg/svg-parse.c
+++ b/source/svg/svg-parse.c
@@ -117,8 +117,8 @@ svg_parse_angle(const char *str)
}
/* Coordinate transformations */
-void
-svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *transform)
+fz_matrix
+svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix transform)
{
char keyword[20];
int keywordlen;
@@ -214,7 +214,7 @@ svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *tr
m.e = args[4];
m.f = args[5];
- *transform = fz_concat(*transform, m);
+ transform = fz_concat(transform, m);
}
else if (!strcmp(keyword, "translate"))
@@ -222,15 +222,15 @@ svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *tr
if (nargs != 2)
fz_throw(ctx, FZ_ERROR_SYNTAX, "wrong number of arguments to translate(): %d", nargs);
- *transform = fz_pre_translate(*transform, args[0], args[1]);
+ transform = fz_pre_translate(transform, args[0], args[1]);
}
else if (!strcmp(keyword, "scale"))
{
if (nargs == 1)
- *transform = fz_pre_scale(*transform, args[0], args[0]);
+ transform = fz_pre_scale(transform, args[0], args[0]);
else if (nargs == 2)
- *transform = fz_pre_scale(*transform, args[0], args[1]);
+ transform = fz_pre_scale(transform, args[0], args[1]);
else
fz_throw(ctx, FZ_ERROR_SYNTAX, "wrong number of arguments to scale(): %d", nargs);
}
@@ -239,7 +239,7 @@ svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *tr
{
if (nargs != 1)
fz_throw(ctx, FZ_ERROR_SYNTAX, "wrong number of arguments to rotate(): %d", nargs);
- *transform = fz_pre_rotate(*transform, args[0]);
+ transform = fz_pre_rotate(transform, args[0]);
}
else if (!strcmp(keyword, "skewX"))
@@ -256,7 +256,7 @@ svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *tr
m.e = 0;
m.f = 0;
- *transform = fz_concat(*transform, m);
+ transform = fz_concat(transform, m);
}
else if (!strcmp(keyword, "skewY"))
@@ -273,7 +273,7 @@ svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *tr
m.e = 0;
m.f = 0;
- *transform = fz_concat(*transform, m);
+ transform = fz_concat(transform, m);
}
else
@@ -281,4 +281,6 @@ svg_parse_transform(fz_context *ctx, svg_document *doc, char *str, fz_matrix *tr
fz_throw(ctx, FZ_ERROR_SYNTAX, "unknown transform function: %s", keyword);
}
}
+
+ return transform;
}
diff --git a/source/svg/svg-run.c b/source/svg/svg-run.c
index a3e6193f..94297866 100644
--- a/source/svg/svg-run.c
+++ b/source/svg/svg-run.c
@@ -39,13 +39,13 @@ static void svg_run_element(fz_context *ctx, fz_device *dev, svg_document *doc,
static void svg_fill(fz_context *ctx, fz_device *dev, svg_document *doc, fz_path *path, svg_state *state)
{
float opacity = state->opacity * state->fill_opacity;
- fz_fill_path(ctx, dev, path, state->fill_rule, &state->transform, fz_device_rgb(ctx), state->fill_color, opacity, NULL);
+ fz_fill_path(ctx, dev, path, state->fill_rule, state->transform, fz_device_rgb(ctx), state->fill_color, opacity, NULL);
}
static void svg_stroke(fz_context *ctx, fz_device *dev, svg_document *doc, fz_path *path, svg_state *state)
{
float opacity = state->opacity * state->stroke_opacity;
- fz_stroke_path(ctx, dev, path, &state->stroke, &state->transform, fz_device_rgb(ctx), state->stroke_color, opacity, NULL);
+ fz_stroke_path(ctx, dev, path, &state->stroke, state->transform, fz_device_rgb(ctx), state->stroke_color, opacity, NULL);
}
static void svg_draw_path(fz_context *ctx, fz_device *dev, svg_document *doc, fz_path *path, svg_state *state)
@@ -316,7 +316,7 @@ svg_run_polygon(fz_context *ctx, fz_device *dev, svg_document *doc, fz_xml *node
}
static void
-svg_add_arc_segment(fz_context *ctx, fz_path *path, const fz_matrix *mtx, float th0, float th1, int iscw)
+svg_add_arc_segment(fz_context *ctx, fz_path *path, fz_matrix mtx, float th0, float th1, int iscw)
{
float t, d;
fz_point p;
@@ -330,7 +330,7 @@ svg_add_arc_segment(fz_context *ctx, fz_path *path, const fz_matrix *mtx, float
{
for (t = th0 + d; t < th1 - d/2; t += d)
{
- p = fz_transform_point_xy(cosf(t), sinf(t), *mtx);
+ p = fz_transform_point_xy(cosf(t), sinf(t), mtx);
fz_lineto(ctx, path, p.x, p.y);
}
}
@@ -339,7 +339,7 @@ svg_add_arc_segment(fz_context *ctx, fz_path *path, const fz_matrix *mtx, float
th0 += FZ_PI * 2;
for (t = th0 - d; t > th1 + d/2; t -= d)
{
- p = fz_transform_point_xy(cosf(t), sinf(t), *mtx);
+ p = fz_transform_point_xy(cosf(t), sinf(t), mtx);
fz_lineto(ctx, path, p.x, p.y);
}
}
@@ -458,7 +458,7 @@ svg_add_arc(fz_context *ctx, fz_path *path,
}
mtx = fz_pre_scale(fz_pre_rotate(fz_translate(cx, cy), rotation_angle), rx, ry);
- svg_add_arc_segment(ctx, path, &mtx, th1, th1 + dth, is_clockwise);
+ svg_add_arc_segment(ctx, path, mtx, th1, th1 + dth, is_clockwise);
fz_lineto(ctx, path, point_x, point_y);
}
@@ -842,7 +842,6 @@ void
svg_parse_common(fz_context *ctx, svg_document *doc, fz_xml *node, svg_state *state)
{
fz_stroke_state *stroke = &state->stroke;
- fz_matrix *transform = &state->transform;
char *transform_att = fz_xml_att(node, "transform");
@@ -872,7 +871,7 @@ svg_parse_common(fz_context *ctx, svg_document *doc, fz_xml *node, svg_state *st
if (transform_att)
{
- svg_parse_transform(ctx, doc, transform_att, transform);
+ state->transform = svg_parse_transform(ctx, doc, transform_att, state->transform);
}
if (font_size_att)
@@ -1156,14 +1155,14 @@ svg_parse_document_bounds(fz_context *ctx, svg_document *doc, fz_xml *root)
}
void
-svg_run_document(fz_context *ctx, svg_document *doc, fz_xml *root, fz_device *dev, const fz_matrix *ctm)
+svg_run_document(fz_context *ctx, svg_document *doc, fz_xml *root, fz_device *dev, fz_matrix ctm)
{
svg_state state;
svg_parse_document_bounds(ctx, doc, root);
/* Initial graphics state */
- state.transform = *ctm;
+ state.transform = ctm;
state.stroke = fz_default_stroke_state;
state.viewport_w = DEF_WIDTH;