diff options
Diffstat (limited to 'source/svg')
-rw-r--r-- | source/svg/svg-doc.c | 2 | ||||
-rw-r--r-- | source/svg/svg-imp.h | 4 | ||||
-rw-r--r-- | source/svg/svg-parse.c | 20 | ||||
-rw-r--r-- | source/svg/svg-run.c | 19 |
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; |