summaryrefslogtreecommitdiff
path: root/source/pdf
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-06-25 13:15:50 +0200
committerTor Andersson <tor.andersson@artifex.com>2018-07-05 15:32:34 +0200
commit4a99615a609eec2b84bb2341d74fac46a5998137 (patch)
tree486eacff07448e4c655df1fa1bcb20df709dd8df /source/pdf
parent2aa62902447760764e7a763dea322145d9c4808c (diff)
downloadmupdf-4a99615a609eec2b84bb2341d74fac46a5998137.tar.xz
Pass rect and matrix by value in geometry functions.
Several things irk me about passing values as const pointers: * They can be NULL, which is not a valid value. * They require explicit temporary variables for storage. * They don't compose easily in a legible manner, requiring weird pointer passing semantics where the variable being assigned is hidden as an argument in the innermost function call. * We can't change the value through the pointer, requiring yet more local variables to hold copies of the input value. In the device interface where we pass a matrix to a function, we often find ourselves making a local copy of the matrix so we can concatenate other transforms to it. This copying is a lot of unnecessary busywork that I hope to eventually avoid by laying the groundwork with this commit. This is a rather large API change, so I apologize for the inconvenience, but I hope the end result and gain in legibility will be worth the pain.
Diffstat (limited to 'source/pdf')
-rw-r--r--source/pdf/pdf-annot.c103
-rw-r--r--source/pdf/pdf-appearance.c51
-rw-r--r--source/pdf/pdf-device.c22
-rw-r--r--source/pdf/pdf-font.c4
-rw-r--r--source/pdf/pdf-form.c6
-rw-r--r--source/pdf/pdf-interpret.c16
-rw-r--r--source/pdf/pdf-link.c8
-rw-r--r--source/pdf/pdf-object.c28
-rw-r--r--source/pdf/pdf-op-filter.c19
-rw-r--r--source/pdf/pdf-op-run.c59
-rw-r--r--source/pdf/pdf-page.c33
-rw-r--r--source/pdf/pdf-parse.c38
-rw-r--r--source/pdf/pdf-pattern.c7
-rw-r--r--source/pdf/pdf-run.c8
-rw-r--r--source/pdf/pdf-shade.c15
-rw-r--r--source/pdf/pdf-signature.c4
-rw-r--r--source/pdf/pdf-type3.c6
-rw-r--r--source/pdf/pdf-write.c2
-rw-r--r--source/pdf/pdf-xobject.c24
19 files changed, 206 insertions, 247 deletions
diff --git a/source/pdf/pdf-annot.c b/source/pdf/pdf-annot.c
index 7dd4784e..e2e2392f 100644
--- a/source/pdf/pdf-annot.c
+++ b/source/pdf/pdf-annot.c
@@ -31,18 +31,18 @@ pdf_drop_annots(fz_context *ctx, pdf_annot *annot)
}
/* Create transform to fit appearance stream to annotation Rect */
-void
-pdf_annot_transform(fz_context *ctx, pdf_annot *annot, fz_matrix *annot_ctm)
+fz_matrix
+pdf_annot_transform(fz_context *ctx, pdf_annot *annot)
{
fz_rect bbox, rect;
fz_matrix matrix;
float w, h, x, y;
- pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)), &rect);
- pdf_xobject_bbox(ctx, annot->ap, &bbox);
- pdf_xobject_matrix(ctx, annot->ap, &matrix);
+ rect = pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)));
+ bbox = pdf_xobject_bbox(ctx, annot->ap);
+ matrix = pdf_xobject_matrix(ctx, annot->ap);
- fz_transform_rect(&bbox, &matrix);
+ bbox = fz_transform_rect(bbox, matrix);
if (bbox.x1 == bbox.x0)
w = 0;
else
@@ -54,7 +54,7 @@ pdf_annot_transform(fz_context *ctx, pdf_annot *annot, fz_matrix *annot_ctm)
x = rect.x0 - bbox.x0;
y = rect.y0 - bbox.y0;
- fz_pre_scale(fz_translate(annot_ctm, x, y), w, h);
+ return fz_pre_scale(fz_translate(x, y), w, h);
}
pdf_annot *pdf_new_annot(fz_context *ctx, pdf_page *page, pdf_obj *obj)
@@ -124,16 +124,13 @@ pdf_next_annot(fz_context *ctx, pdf_annot *annot)
return annot ? annot->next : NULL;
}
-fz_rect *
-pdf_bound_annot(fz_context *ctx, pdf_annot *annot, fz_rect *rect)
+fz_rect
+pdf_bound_annot(fz_context *ctx, pdf_annot *annot)
{
- pdf_obj *obj = pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect));
- fz_rect mediabox;
+ fz_rect annot_rect = pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)));
fz_matrix page_ctm;
- pdf_to_rect(ctx, obj, rect);
- pdf_page_transform(ctx, annot->page, &mediabox, &page_ctm);
- fz_transform_rect(rect, &page_ctm);
- return rect;
+ pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
+ return fz_transform_rect(annot_rect, page_ctm);
}
void
@@ -369,26 +366,27 @@ pdf_set_annot_flags(fz_context *ctx, pdf_annot *annot, int flags)
pdf_dirty_annot(ctx, annot);
}
-void
-pdf_annot_rect(fz_context *ctx, pdf_annot *annot, fz_rect *rect)
+fz_rect
+pdf_annot_rect(fz_context *ctx, pdf_annot *annot)
{
fz_matrix page_ctm;
+ fz_rect rect;
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)), rect);
- fz_transform_rect(rect, &page_ctm);
+ rect = pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)));
+ fz_transform_rect(rect, page_ctm);
+ return rect;
}
void
-pdf_set_annot_rect(fz_context *ctx, pdf_annot *annot, const fz_rect *rect)
+pdf_set_annot_rect(fz_context *ctx, pdf_annot *annot, fz_rect rect)
{
- fz_rect trect = *rect;
fz_matrix page_ctm, inv_page_ctm;
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
- fz_transform_rect(&trect, &inv_page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
+ rect = fz_transform_rect(rect, inv_page_ctm);
- pdf_dict_put_rect(ctx, annot->obj, PDF_NAME(Rect), &trect);
+ pdf_dict_put_rect(ctx, annot->obj, PDF_NAME(Rect), rect);
pdf_dirty_annot(ctx, annot);
}
@@ -832,8 +830,8 @@ pdf_annot_line(fz_context *ctx, pdf_annot *annot, fz_point *a, fz_point *b)
a->y = pdf_array_get_real(ctx, line, 1);
b->x = pdf_array_get_real(ctx, line, 2);
b->y = pdf_array_get_real(ctx, line, 3);
- fz_transform_point(a, &page_ctm);
- fz_transform_point(b, &page_ctm);
+ *a = fz_transform_point(*a, page_ctm);
+ *b = fz_transform_point(*b, page_ctm);
}
void
@@ -845,10 +843,10 @@ pdf_set_annot_line(fz_context *ctx, pdf_annot *annot, fz_point a, fz_point b)
check_allowed_subtypes(ctx, annot, PDF_NAME(L), line_subtypes);
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
- fz_transform_point(&a, &inv_page_ctm);
- fz_transform_point(&b, &inv_page_ctm);
+ a = fz_transform_point(a, inv_page_ctm);
+ b = fz_transform_point(b, inv_page_ctm);
line = pdf_new_array(ctx, annot->page->doc, 4);
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME(L), line);
@@ -896,9 +894,7 @@ pdf_annot_vertex(fz_context *ctx, pdf_annot *annot, int i)
point.x = pdf_array_get_real(ctx, vertices, i * 2);
point.y = pdf_array_get_real(ctx, vertices, i * 2 + 1);
- fz_transform_point(&point, &page_ctm);
-
- return point;
+ return fz_transform_point(point, page_ctm);
}
void
@@ -915,13 +911,12 @@ pdf_set_annot_vertices(fz_context *ctx, pdf_annot *annot, int n, const fz_point
fz_throw(ctx, FZ_ERROR_GENERIC, "invalid number of vertices");
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
vertices = pdf_new_array(ctx, doc, n * 2);
for (i = 0; i < n; ++i)
{
- point = v[i];
- fz_transform_point(&point, &inv_page_ctm);
+ point = fz_transform_point(v[i], inv_page_ctm);
pdf_array_push_real(ctx, vertices, point.x);
pdf_array_push_real(ctx, vertices, point.y);
}
@@ -945,7 +940,7 @@ void pdf_add_annot_vertex(fz_context *ctx, pdf_annot *annot, fz_point p)
check_allowed_subtypes(ctx, annot, PDF_NAME(Vertices), vertices_subtypes);
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
vertices = pdf_dict_get(ctx, annot->obj, PDF_NAME(Vertices));
if (!pdf_is_array(ctx, vertices))
@@ -954,7 +949,7 @@ void pdf_add_annot_vertex(fz_context *ctx, pdf_annot *annot, fz_point p)
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME(Vertices), vertices);
}
- fz_transform_point(&p, &inv_page_ctm);
+ p = fz_transform_point(p, inv_page_ctm);
pdf_array_push_real(ctx, vertices, p.x);
pdf_array_push_real(ctx, vertices, p.y);
@@ -969,9 +964,9 @@ void pdf_set_annot_vertex(fz_context *ctx, pdf_annot *annot, int i, fz_point p)
check_allowed_subtypes(ctx, annot, PDF_NAME(Vertices), vertices_subtypes);
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
- fz_transform_point(&p, &inv_page_ctm);
+ p = fz_transform_point(p, inv_page_ctm);
vertices = pdf_dict_get(ctx, annot->obj, PDF_NAME(Vertices));
pdf_array_put_drop(ctx, vertices, i * 2 + 0, pdf_new_real(ctx, p.x));
@@ -1018,7 +1013,7 @@ pdf_annot_quad_point(fz_context *ctx, pdf_annot *annot, int idx, float v[8])
fz_point point;
point.x = pdf_array_get_real(ctx, quad_points, idx * 8 + i + 0);
point.y = pdf_array_get_real(ctx, quad_points, idx * 8 + i + 1);
- fz_transform_point(&point, &page_ctm);
+ point = fz_transform_point(point, page_ctm);
v[i+0] = point.x;
v[i+1] = point.y;
}
@@ -1038,7 +1033,7 @@ pdf_set_annot_quad_points(fz_context *ctx, pdf_annot *annot, int n, const float
fz_throw(ctx, FZ_ERROR_GENERIC, "invalid number of quadrilaterals");
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
quad_points = pdf_new_array(ctx, doc, n * 8);
for (i = 0; i < n; ++i)
@@ -1047,7 +1042,7 @@ pdf_set_annot_quad_points(fz_context *ctx, pdf_annot *annot, int n, const float
{
point.x = v[i * 8 + k * 2 + 0];
point.y = v[i * 8 + k * 2 + 1];
- fz_transform_point(&point, &inv_page_ctm);
+ point = fz_transform_point(point, inv_page_ctm);
pdf_array_push_real(ctx, quad_points, point.x);
pdf_array_push_real(ctx, quad_points, point.y);
}
@@ -1074,7 +1069,7 @@ pdf_add_annot_quad_point(fz_context *ctx, pdf_annot *annot, fz_quad quad)
check_allowed_subtypes(ctx, annot, PDF_NAME(QuadPoints), quad_point_subtypes);
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
quad_points = pdf_dict_get(ctx, annot->obj, PDF_NAME(QuadPoints));
if (!pdf_is_array(ctx, quad_points))
@@ -1087,7 +1082,7 @@ pdf_add_annot_quad_point(fz_context *ctx, pdf_annot *annot, fz_quad quad)
* in a counterclockwise fashion. Experiments with Adobe's implementation
* indicates a cross-wise ordering is intended: ul, ur, ll, lr.
*/
- fz_transform_quad(&quad, &inv_page_ctm);
+ quad = fz_transform_quad(quad, inv_page_ctm);
pdf_array_push_real(ctx, quad_points, quad.ul.x);
pdf_array_push_real(ctx, quad_points, quad.ul.y);
pdf_array_push_real(ctx, quad_points, quad.ur.x);
@@ -1148,9 +1143,7 @@ pdf_annot_ink_list_stroke_vertex(fz_context *ctx, pdf_annot *annot, int i, int k
point.x = pdf_array_get_real(ctx, stroke, k * 2 + 0);
point.y = pdf_array_get_real(ctx, stroke, k * 2 + 1);
- fz_transform_point(&point, &page_ctm);
-
- return point;
+ return fz_transform_point(point, page_ctm);
}
void
@@ -1165,7 +1158,7 @@ pdf_set_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, const int *coun
check_allowed_subtypes(ctx, annot, PDF_NAME(InkList), ink_list_subtypes);
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
// TODO: update Rect (in update appearance perhaps?)
@@ -1175,8 +1168,7 @@ pdf_set_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, const int *coun
stroke = pdf_new_array(ctx, doc, count[i] * 2);
for (k = 0; k < count[i]; ++k)
{
- point = *v++;
- fz_transform_point(&point, &inv_page_ctm);
+ point = fz_transform_point(*v++, inv_page_ctm);
pdf_array_push_real(ctx, stroke, point.x);
pdf_array_push_real(ctx, stroke, point.y);
}
@@ -1205,7 +1197,7 @@ pdf_add_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, fz_point p[])
check_allowed_subtypes(ctx, annot, PDF_NAME(InkList), ink_list_subtypes);
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
ink_list = pdf_dict_get(ctx, annot->obj, PDF_NAME(InkList));
if (!pdf_is_array(ctx, ink_list))
@@ -1219,8 +1211,7 @@ pdf_add_annot_ink_list(fz_context *ctx, pdf_annot *annot, int n, fz_point p[])
{
for (i = 0; i < n; ++i)
{
- fz_point tp = p[i];
- fz_transform_point(&tp, &inv_page_ctm);
+ fz_point tp = fz_transform_point(p[i], inv_page_ctm);
pdf_array_push_real(ctx, stroke, tp.x);
pdf_array_push_real(ctx, stroke, tp.y);
}
@@ -1244,15 +1235,15 @@ pdf_set_text_annot_position(fz_context *ctx, pdf_annot *annot, fz_point pt)
int flags;
pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
- fz_invert_matrix(&inv_page_ctm, &page_ctm);
+ inv_page_ctm = fz_invert_matrix(page_ctm);
rect.x0 = pt.x;
rect.x1 = pt.x + TEXT_ANNOT_SIZE;
rect.y0 = pt.y;
rect.y1 = pt.y + TEXT_ANNOT_SIZE;
- fz_transform_rect(&rect, &inv_page_ctm);
+ rect = fz_transform_rect(rect, inv_page_ctm);
- pdf_dict_put_rect(ctx, annot->obj, PDF_NAME(Rect), &rect);
+ pdf_dict_put_rect(ctx, annot->obj, PDF_NAME(Rect), rect);
flags = pdf_dict_get_int(ctx, annot->obj, PDF_NAME(F));
flags |= (PDF_ANNOT_IS_NO_ZOOM|PDF_ANNOT_IS_NO_ROTATE);
diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c
index 2c18a813..0e2e2847 100644
--- a/source/pdf/pdf-appearance.c
+++ b/source/pdf/pdf-appearance.c
@@ -113,9 +113,9 @@ static void pdf_write_arrow_appearance(fz_context *ctx, fz_buffer *buf, fz_rect
v = rotate_vector(angle, 8.8f*r, -4.5f*r);
b = fz_make_point(x + v.x, y + v.y);
- fz_include_point_in_rect(rect, &a);
- fz_include_point_in_rect(rect, &b);
- fz_expand_rect(rect, w);
+ *rect = fz_include_point_in_rect(*rect, a);
+ *rect = fz_include_point_in_rect(*rect, b);
+ *rect = fz_expand_rect(*rect, w);
fz_append_printf(ctx, buf, "%g %g m\n", a.x, a.y);
fz_append_printf(ctx, buf, "%g %g l\n", x, y);
@@ -182,8 +182,8 @@ pdf_write_line_cap_appearance(fz_context *ctx, fz_buffer *buf, fz_rect *rect,
fz_append_printf(ctx, buf, "%g %g m\n", a.x, a.y);
fz_append_printf(ctx, buf, "%g %g l\n", b.x, b.y);
fz_append_string(ctx, buf, "S\n");
- fz_include_point_in_rect(rect, &a);
- fz_include_point_in_rect(rect, &b);
+ *rect = fz_include_point_in_rect(*rect, a);
+ *rect = fz_include_point_in_rect(*rect, b);
}
/* PDF 1.6 */
else if (cap == PDF_NAME(ROpenArrow))
@@ -208,8 +208,8 @@ pdf_write_line_cap_appearance(fz_context *ctx, fz_buffer *buf, fz_rect *rect,
fz_append_printf(ctx, buf, "%g %g m\n", a.x, a.y);
fz_append_printf(ctx, buf, "%g %g l\n", b.x, b.y);
fz_append_string(ctx, buf, "S\n");
- fz_include_point_in_rect(rect, &a);
- fz_include_point_in_rect(rect, &b);
+ *rect = fz_include_point_in_rect(*rect, a);
+ *rect = fz_include_point_in_rect(*rect, b);
}
}
@@ -247,7 +247,7 @@ pdf_write_line_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf, fz_
pdf_write_line_cap_appearance(ctx, buf, rect, a.x, a.y, dx/l, dy/l, w, ic, pdf_array_get(ctx, le, 0));
pdf_write_line_cap_appearance(ctx, buf, rect, b.x, b.y, -dx/l, -dy/l, w, ic, pdf_array_get(ctx, le, 1));
}
- fz_expand_rect(rect, fz_max(1, w));
+ *rect = fz_expand_rect(*rect, fz_max(1, w));
}
static void
@@ -323,14 +323,14 @@ pdf_write_polygon_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf,
rect->y0 = rect->y1 = p.y;
}
else
- fz_include_point_in_rect(rect, &p);
+ *rect = fz_include_point_in_rect(*rect, p);
if (i == 0)
fz_append_printf(ctx, buf, "%g %g m\n", p.x, p.y);
else
fz_append_printf(ctx, buf, "%g %g l\n", p.x, p.y);
}
fz_append_string(ctx, buf, close ? "s" : "S");
- fz_expand_rect(rect, lw);
+ *rect = fz_expand_rect(*rect, lw);
}
}
@@ -363,12 +363,12 @@ pdf_write_ink_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf, fz_r
rect->y0 = rect->y1 = p.y;
}
else
- fz_include_point_in_rect(rect, &p);
+ *rect = fz_include_point_in_rect(*rect, p);
fz_append_printf(ctx, buf, "%g %g %c\n", p.x, p.y, k == 0 ? 'm' : 'l');
}
}
fz_append_printf(ctx, buf, "S");
- fz_expand_rect(rect, lw);
+ *rect = fz_expand_rect(*rect, lw);
}
/* Contrary to the specification, the points within a QuadPoint are NOT
@@ -398,13 +398,12 @@ extract_quad(fz_context *ctx, fz_point *quad, pdf_obj *obj, int i)
static void
union_quad(fz_rect *rect, const fz_point quad[4], float lw)
{
- fz_rect tmp;
- tmp.x0 = fz_min(fz_min(quad[0].x, quad[1].x), fz_min(quad[2].x, quad[3].x));
- tmp.y0 = fz_min(fz_min(quad[0].y, quad[1].y), fz_min(quad[2].y, quad[3].y));
- tmp.x1 = fz_max(fz_max(quad[0].x, quad[1].x), fz_max(quad[2].x, quad[3].x));
- tmp.y1 = fz_max(fz_max(quad[0].y, quad[1].y), fz_max(quad[2].y, quad[3].y));
- fz_expand_rect(&tmp, lw);
- fz_union_rect(rect, &tmp);
+ fz_rect qbox;
+ qbox.x0 = fz_min(fz_min(quad[0].x, quad[1].x), fz_min(quad[2].x, quad[3].x));
+ qbox.y0 = fz_min(fz_min(quad[0].y, quad[1].y), fz_min(quad[2].y, quad[3].y));
+ qbox.x1 = fz_max(fz_max(quad[0].x, quad[1].x), fz_max(quad[2].x, quad[3].x));
+ qbox.y1 = fz_max(fz_max(quad[0].y, quad[1].y), fz_max(quad[2].y, quad[3].y));
+ *rect = fz_union_rect(*rect, fz_expand_rect(qbox, lw));
}
static fz_point
@@ -745,7 +744,7 @@ pdf_write_stamp_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf, fz
pdf_write_fill_color_appearance(ctx, annot, buf);
pdf_write_stroke_color_appearance(ctx, annot, buf);
- fz_rotate(&rotate, 0.6f);
+ rotate = fz_rotate(0.6f);
fz_append_printf(ctx, buf, "%M cm\n", &rotate);
fz_append_string(ctx, buf, "2 w\n2 2 186 44 re\nS\n");
@@ -995,7 +994,7 @@ pdf_write_free_text_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf
if (r == 90 || r == 270)
t = h, h = w, w = t;
- fz_rotate(matrix, r);
+ *matrix = fz_rotate(r);
*bbox = fz_make_rect(0, 0, w, h);
if (pdf_write_fill_color_appearance(ctx, annot, buf))
@@ -1029,7 +1028,7 @@ pdf_write_tx_widget_appearance(fz_context *ctx, pdf_annot *annot, fz_buffer *buf
h = rect->y1 - rect->y0;
if (r == 90 || r == 270)
t = h, h = w, w = t;
- fz_rotate(matrix, r);
+ *matrix = fz_rotate(r);
*bbox = fz_make_rect(0, 0, w, h);
fz_append_string(ctx, buf, "/Tx BMC\nq\n");
@@ -1253,9 +1252,9 @@ void pdf_update_appearance(fz_context *ctx, pdf_annot *annot)
fz_try(ctx)
{
- pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)), &rect);
+ rect = pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME(Rect)));
pdf_write_appearance(ctx, annot, buf, &rect, &bbox, &matrix, &res);
- pdf_dict_put_rect(ctx, annot->obj, PDF_NAME(Rect), &rect);
+ pdf_dict_put_rect(ctx, annot->obj, PDF_NAME(Rect), rect);
if (!ap_n)
{
@@ -1264,13 +1263,13 @@ void pdf_update_appearance(fz_context *ctx, pdf_annot *annot)
ap = pdf_new_dict(ctx, annot->page->doc, 1);
pdf_dict_put_drop(ctx, annot->obj, PDF_NAME(AP), ap);
}
- new_ap_n = pdf_new_xobject(ctx, annot->page->doc, &bbox, &matrix, res, buf);
+ new_ap_n = pdf_new_xobject(ctx, annot->page->doc, bbox, matrix, res, buf);
pdf_dict_put(ctx, ap, PDF_NAME(N), new_ap_n);
}
else
{
new_ap_n = pdf_keep_obj(ctx, ap_n);
- pdf_update_xobject(ctx, annot->page->doc, ap_n, &bbox, &matrix, res, buf);
+ pdf_update_xobject(ctx, annot->page->doc, ap_n, bbox, matrix, res, buf);
}
pdf_drop_obj(ctx, annot->ap);
diff --git a/source/pdf/pdf-device.c b/source/pdf/pdf-device.c
index 9b33e5c9..4358508e 100644
--- a/source/pdf/pdf-device.c
+++ b/source/pdf/pdf-device.c
@@ -207,8 +207,8 @@ pdf_dev_ctm(fz_context *ctx, pdf_device *pdev, const fz_matrix *ctm)
if (memcmp(&gs->ctm, ctm, sizeof(*ctm)) == 0)
return;
- fz_invert_matrix(&inverse, &gs->ctm);
- fz_concat(&inverse, ctm, &inverse);
+ inverse = fz_invert_matrix(gs->ctm);
+ inverse = fz_concat(*ctm, inverse);
gs->ctm = *ctm;
fz_append_printf(ctx, gs->buf, "%M cm\n", &inverse);
}
@@ -446,7 +446,7 @@ pdf_dev_text_span(fz_context *ctx, pdf_device *pdev, fz_text_span *span)
tm.e = span->items[0].x;
tm.f = span->items[0].y;
- fz_invert_matrix(&inv_tm, &tm);
+ inv_tm = fz_invert_matrix(tm);
fz_append_printf(ctx, gs->buf, "%M Tm\n[<", &tm);
@@ -459,7 +459,7 @@ pdf_dev_text_span(fz_context *ctx, pdf_device *pdev, fz_text_span *span)
/* transform difference from expected pen position into font units. */
d.x = it->x - tm.e;
d.y = it->y - tm.f;
- fz_transform_vector(&d, &inv_tm);
+ d = fz_transform_vector(d, inv_tm);
dx = (int)(d.x * 1000 + (d.x < 0 ? -0.5f : 0.5f));
dy = (int)(d.y * 1000 + (d.y < 0 ? -0.5f : 0.5f));
@@ -483,9 +483,9 @@ pdf_dev_text_span(fz_context *ctx, pdf_device *pdev, fz_text_span *span)
adv = fz_advance_glyph(ctx, span->font, it->gid, span->wmode);
if (span->wmode == 0)
- fz_pre_translate(&tm, adv, 0);
+ tm = fz_pre_translate(tm, adv, 0);
else
- fz_pre_translate(&tm, 0, adv);
+ tm = fz_pre_translate(tm, 0, adv);
}
fz_append_string(ctx, gs->buf, ">]TJ\n");
@@ -605,7 +605,7 @@ pdf_dev_new_form(fz_context *ctx, pdf_obj **form_ref, pdf_device *pdev, const fz
pdf_dict_put(ctx, form, PDF_NAME(Subtype), PDF_NAME(Form));
pdf_dict_put(ctx, form, PDF_NAME(Group), group_ref);
pdf_dict_put_int(ctx, form, PDF_NAME(FormType), 1);
- pdf_dict_put_rect(ctx, form, PDF_NAME(BBox), bbox);
+ pdf_dict_put_rect(ctx, form, PDF_NAME(BBox), *bbox);
*form_ref = pdf_add_object(ctx, doc, form);
}
fz_always(ctx)
@@ -822,8 +822,8 @@ pdf_dev_fill_image(fz_context *ctx, fz_device *dev, fz_image *image, const fz_ma
pdf_dev_alpha(ctx, pdev, alpha, 0);
/* PDF images are upside down, so fiddle the ctm */
- fz_pre_scale(&local_ctm, 1, -1);
- fz_pre_translate(&local_ctm, 0, -1);
+ local_ctm = fz_pre_scale(local_ctm, 1, -1);
+ local_ctm = fz_pre_translate(local_ctm, 0, -1);
pdf_dev_ctm(ctx, pdev, &local_ctm);
fz_append_printf(ctx, gs->buf, "/Img%d Do\n", pdf_to_num(ctx, im_res));
@@ -862,8 +862,8 @@ pdf_dev_fill_image_mask(fz_context *ctx, fz_device *dev, fz_image *image, const
pdf_dev_color(ctx, pdev, colorspace, color, 0, color_params);
/* PDF images are upside down, so fiddle the ctm */
- fz_pre_scale(&local_ctm, 1, -1);
- fz_pre_translate(&local_ctm, 0, -1);
+ local_ctm = fz_pre_scale(local_ctm, 1, -1);
+ local_ctm = fz_pre_translate(local_ctm, 0, -1);
pdf_dev_ctm(ctx, pdev, &local_ctm);
fz_append_printf(ctx, gs->buf, "/Img%d Do Q\n", pdf_to_num(ctx, im_res));
diff --git a/source/pdf/pdf-font.c b/source/pdf/pdf-font.c
index b29a1a18..b540f4ec 100644
--- a/source/pdf/pdf-font.c
+++ b/source/pdf/pdf-font.c
@@ -1591,7 +1591,7 @@ pdf_add_font_descriptor(fz_context *ctx, pdf_document *doc, pdf_obj *fobj, fz_fo
bbox.y0 = font->bbox.y0 * 1000;
bbox.x1 = font->bbox.x1 * 1000;
bbox.y1 = font->bbox.y1 * 1000;
- pdf_dict_put_rect(ctx, fdobj, PDF_NAME(FontBBox), &bbox);
+ pdf_dict_put_rect(ctx, fdobj, PDF_NAME(FontBBox), bbox);
pdf_dict_put_int(ctx, fdobj, PDF_NAME(ItalicAngle), 0);
pdf_dict_put_int(ctx, fdobj, PDF_NAME(Ascent), face->ascender * 1000.0f / face->units_per_EM);
@@ -2226,7 +2226,7 @@ pdf_add_cjk_font(fz_context *ctx, pdf_document *doc, fz_font *fzfont, int script
{
pdf_dict_put(ctx, fontdesc, PDF_NAME(Type), PDF_NAME(FontDescriptor));
pdf_dict_put_text_string(ctx, fontdesc, PDF_NAME(FontName), basefont);
- pdf_dict_put_rect(ctx, fontdesc, PDF_NAME(FontBBox), &bbox);
+ pdf_dict_put_rect(ctx, fontdesc, PDF_NAME(FontBBox), bbox);
pdf_dict_put_int(ctx, fontdesc, PDF_NAME(Flags), flags);
pdf_dict_put_int(ctx, fontdesc, PDF_NAME(ItalicAngle), 0);
pdf_dict_put_int(ctx, fontdesc, PDF_NAME(Ascent), 1000);
diff --git a/source/pdf/pdf-form.c b/source/pdf/pdf-form.c
index 16811edd..f5466168 100644
--- a/source/pdf/pdf-form.c
+++ b/source/pdf/pdf-form.c
@@ -534,7 +534,7 @@ int pdf_pass_event(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf_ui_ev
for (annot = page->annots; annot; annot = annot->next)
{
- pdf_bound_annot(ctx, annot, &bbox);
+ bbox = pdf_bound_annot(ctx, annot);
if (pt->x >= bbox.x0 && pt->x <= bbox.x1)
if (pt->y >= bbox.y0 && pt->y <= bbox.y1)
break;
@@ -996,9 +996,9 @@ void pdf_field_set_text_color(fz_context *ctx, pdf_document *doc, pdf_obj *field
pdf_field_mark_dirty(ctx, doc, field);
}
-fz_rect *pdf_bound_widget(fz_context *ctx, pdf_widget *widget, fz_rect *rect)
+fz_rect pdf_bound_widget(fz_context *ctx, pdf_widget *widget)
{
- return pdf_bound_annot(ctx, (pdf_annot*)widget, rect);
+ return pdf_bound_annot(ctx, (pdf_annot*)widget);
}
char *pdf_text_widget_text(fz_context *ctx, pdf_document *doc, pdf_widget *tw)
diff --git a/source/pdf/pdf-interpret.c b/source/pdf/pdf-interpret.c
index fe874807..55416b90 100644
--- a/source/pdf/pdf-interpret.c
+++ b/source/pdf/pdf-interpret.c
@@ -1072,8 +1072,7 @@ pdf_process_annot(fz_context *ctx, pdf_processor *proc, pdf_document *doc, pdf_p
if (proc->op_q && proc->op_cm && proc->op_Do_form && proc->op_Q && annot->ap)
{
- fz_matrix matrix;
- pdf_annot_transform(ctx, annot, &matrix);
+ fz_matrix matrix = pdf_annot_transform(ctx, annot);
proc->op_q(ctx, proc);
proc->op_cm(ctx, proc,
matrix.a, matrix.b,
@@ -1179,14 +1178,14 @@ pdf_tos_make_trm(fz_context *ctx, pdf_text_object_state *tos, pdf_text_state *te
tos->char_ty = w1 * text->size + text->char_space;
}
- fz_concat(trm, &tsm, &tos->tm);
+ *trm = fz_concat(tsm, tos->tm);
tos->cid = cid;
tos->gid = pdf_font_cid_to_gid(ctx, fontdesc, cid);
tos->fontdesc = fontdesc;
/* Compensate for the glyph cache limited positioning precision */
- fz_expand_rect(fz_bound_glyph(ctx, fontdesc->font, tos->gid, trm, &tos->char_bbox), 1);
+ tos->char_bbox = fz_expand_rect(fz_bound_glyph(ctx, fontdesc->font, tos->gid, *trm), 1);
return tos->gid;
}
@@ -1194,15 +1193,14 @@ pdf_tos_make_trm(fz_context *ctx, pdf_text_object_state *tos, pdf_text_state *te
void
pdf_tos_move_after_char(fz_context *ctx, pdf_text_object_state *tos)
{
- fz_union_rect(&tos->text_bbox, &tos->char_bbox);
-
- fz_pre_translate(&tos->tm, tos->char_tx, tos->char_ty);
+ tos->text_bbox = fz_union_rect(tos->text_bbox, tos->char_bbox);
+ tos->tm = fz_pre_translate(tos->tm, tos->char_tx, tos->char_ty);
}
void
pdf_tos_translate(pdf_text_object_state *tos, float tx, float ty)
{
- fz_pre_translate(&tos->tlm, tx, ty);
+ tos->tlm = fz_pre_translate(tos->tlm, tx, ty);
tos->tm = tos->tlm;
}
@@ -1221,6 +1219,6 @@ pdf_tos_set_matrix(pdf_text_object_state *tos, float a, float b, float c, float
void
pdf_tos_newline(pdf_text_object_state *tos, float leading)
{
- fz_pre_translate(&tos->tlm, 0, -leading);
+ tos->tlm = fz_pre_translate(tos->tlm, 0, -leading);
tos->tm = tos->tlm;
}
diff --git a/source/pdf/pdf-link.c b/source/pdf/pdf-link.c
index e9f1c36f..6fe6f334 100644
--- a/source/pdf/pdf-link.c
+++ b/source/pdf/pdf-link.c
@@ -255,8 +255,8 @@ pdf_load_link(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int pagenum, co
if (!obj)
return NULL;
- pdf_to_rect(ctx, obj, &bbox);
- fz_transform_rect(&bbox, page_ctm);
+ bbox = pdf_to_rect(ctx, obj);
+ bbox = fz_transform_rect(bbox, *page_ctm);
obj = pdf_dict_get(ctx, dict, PDF_NAME(Dest));
if (obj)
@@ -274,7 +274,7 @@ pdf_load_link(fz_context *ctx, pdf_document *doc, pdf_obj *dict, int pagenum, co
return NULL;
fz_try(ctx)
- link = fz_new_link(ctx, &bbox, doc, uri);
+ link = fz_new_link(ctx, bbox, doc, uri);
fz_always(ctx)
fz_free(ctx, uri);
fz_catch(ctx)
@@ -343,7 +343,7 @@ pdf_resolve_link(fz_context *ctx, pdf_document *doc, const char *uri, float *xp,
p.y = y ? fz_atoi(y + 1) : 0;
obj = pdf_lookup_page_obj(ctx, doc, page);
pdf_page_obj_transform(ctx, obj, NULL, &ctm);
- fz_transform_point(&p, &ctm);
+ p = fz_transform_point(p, ctm);
if (xp) *xp = p.x;
if (yp) *yp = p.y;
diff --git a/source/pdf/pdf-object.c b/source/pdf/pdf-object.c
index ff425a8f..32a02b9b 100644
--- a/source/pdf/pdf-object.c
+++ b/source/pdf/pdf-object.c
@@ -811,15 +811,15 @@ pdf_array_find(fz_context *ctx, pdf_obj *arr, pdf_obj *obj)
return -1;
}
-pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, const fz_rect *rect)
+pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, fz_rect rect)
{
pdf_obj *arr = pdf_new_array(ctx, doc, 4);
fz_try(ctx)
{
- pdf_array_push_real(ctx, arr, rect->x0);
- pdf_array_push_real(ctx, arr, rect->y0);
- pdf_array_push_real(ctx, arr, rect->x1);
- pdf_array_push_real(ctx, arr, rect->y1);
+ pdf_array_push_real(ctx, arr, rect.x0);
+ pdf_array_push_real(ctx, arr, rect.y0);
+ pdf_array_push_real(ctx, arr, rect.x1);
+ pdf_array_push_real(ctx, arr, rect.y1);
}
fz_catch(ctx)
{
@@ -829,17 +829,17 @@ pdf_obj *pdf_new_rect(fz_context *ctx, pdf_document *doc, const fz_rect *rect)
return arr;
}
-pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, const fz_matrix *mtx)
+pdf_obj *pdf_new_matrix(fz_context *ctx, pdf_document *doc, fz_matrix mtx)
{
pdf_obj *arr = pdf_new_array(ctx, doc, 6);
fz_try(ctx)
{
- pdf_array_push_real(ctx, arr, mtx->a);
- pdf_array_push_real(ctx, arr, mtx->b);
- pdf_array_push_real(ctx, arr, mtx->c);
- pdf_array_push_real(ctx, arr, mtx->d);
- pdf_array_push_real(ctx, arr, mtx->e);
- pdf_array_push_real(ctx, arr, mtx->f);
+ pdf_array_push_real(ctx, arr, mtx.a);
+ pdf_array_push_real(ctx, arr, mtx.b);
+ pdf_array_push_real(ctx, arr, mtx.c);
+ pdf_array_push_real(ctx, arr, mtx.d);
+ pdf_array_push_real(ctx, arr, mtx.e);
+ pdf_array_push_real(ctx, arr, mtx.f);
}
fz_catch(ctx)
{
@@ -2198,12 +2198,12 @@ void pdf_dict_put_text_string(fz_context *ctx, pdf_obj *dict, pdf_obj *key, cons
pdf_dict_put_drop(ctx, dict, key, pdf_new_text_string(ctx, x));
}
-void pdf_dict_put_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const fz_rect *x)
+void pdf_dict_put_rect(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const fz_rect x)
{
pdf_dict_put_drop(ctx, dict, key, pdf_new_rect(ctx, NULL, x));
}
-void pdf_dict_put_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key, const fz_matrix *x)
+void pdf_dict_put_matrix(fz_context *ctx, pdf_obj *dict, pdf_obj *key, fz_matrix x)
{
pdf_dict_put_drop(ctx, dict, key, pdf_new_matrix(ctx, NULL, x));
}
diff --git a/source/pdf/pdf-op-filter.c b/source/pdf/pdf-op-filter.c
index cea60db5..10138cda 100644
--- a/source/pdf/pdf-op-filter.c
+++ b/source/pdf/pdf-op-filter.c
@@ -176,7 +176,7 @@ static void filter_flush(fz_context *ctx, pdf_filter_processor *p, int flush)
gstate->pending.ctm.e,
gstate->pending.ctm.f);
- fz_concat(&gstate->sent.ctm, &current, &gstate->pending.ctm);
+ gstate->sent.ctm = fz_concat(current, gstate->pending.ctm);
gstate->pending.ctm.a = 1;
gstate->pending.ctm.b = 0;
gstate->pending.ctm.c = 0;
@@ -450,9 +450,9 @@ filter_show_space(fz_context *ctx, pdf_filter_processor *p, float tadj)
pdf_font_desc *fontdesc = gstate->pending.text.font;
if (fontdesc->wmode == 0)
- fz_pre_translate(&p->tos.tm, tadj * gstate->pending.text.scale, 0);
+ p->tos.tm = fz_pre_translate(p->tos.tm, tadj * gstate->pending.text.scale, 0);
else
- fz_pre_translate(&p->tos.tm, 0, tadj);
+ p->tos.tm = fz_pre_translate(p->tos.tm, 0, tadj);
}
/* Process a string (from buf, of length len), from position *pos onwards.
@@ -633,12 +633,12 @@ filter_show_text(fz_context *ctx, pdf_filter_processor *p, pdf_obj *text)
if (fontdesc->wmode == 0)
{
skip.x += tadj;
- fz_pre_translate(&p->tos.tm, tadj * p->gstate->pending.text.scale, 0);
+ p->tos.tm = fz_pre_translate(p->tos.tm, tadj * p->gstate->pending.text.scale, 0);
}
else
{
skip.y += tadj;
- fz_pre_translate(&p->tos.tm, 0, tadj);
+ p->tos.tm = fz_pre_translate(p->tos.tm, 0, tadj);
}
}
@@ -822,7 +822,7 @@ pdf_filter_cm(fz_context *ctx, pdf_processor *proc, float a, float b, float c, f
{
pdf_filter_processor *p = (pdf_filter_processor*)proc;
filter_gstate *gstate = gstate_to_update(ctx, p);
- fz_matrix old, ctm;
+ fz_matrix ctm;
/* If we're being given an identity matrix, don't bother sending it */
if (a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0)
@@ -835,8 +835,7 @@ pdf_filter_cm(fz_context *ctx, pdf_processor *proc, float a, float b, float c, f
ctm.e = e;
ctm.f = f;
- old = gstate->pending.ctm;
- fz_concat(&gstate->pending.ctm, &ctm, &old);
+ gstate->pending.ctm = fz_concat(ctm, gstate->pending.ctm);
}
/* path construction */
@@ -1038,9 +1037,7 @@ pdf_filter_ET(fz_context *ctx, pdf_processor *proc)
p->chain->op_ET(ctx, p->chain);
if (p->after_text)
{
- fz_matrix ctm;
-
- fz_concat(&ctm, &p->gstate->sent.ctm, &p->gstate->pending.ctm);
+ fz_matrix ctm = fz_concat(p->gstate->sent.ctm, p->gstate->pending.ctm);
if (p->chain->op_q)
p->chain->op_q(ctx, p->chain);
p->after_text(ctx, p->opaque, p->doc, p->chain, &ctm);
diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c
index 8ef1943a..61729f0c 100644
--- a/source/pdf/pdf-op-run.c
+++ b/source/pdf/pdf-op-run.c
@@ -116,8 +116,8 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save)
save->ctm = gstate->softmask_ctm;
save_ctm = gstate->ctm;
- pdf_xobject_bbox(ctx, softmask, &mask_bbox);
- pdf_xobject_matrix(ctx, softmask, &mask_matrix);
+ mask_bbox = pdf_xobject_bbox(ctx, softmask);
+ mask_matrix = pdf_xobject_matrix(ctx, softmask);
pdf_tos_save(ctx, &pr->tos, tos_save);
@@ -125,8 +125,8 @@ begin_softmask(fz_context *ctx, pdf_run_processor *pr, softmask_save *save)
mask_bbox = fz_infinite_rect;
else
{
- fz_transform_rect(&mask_bbox, &mask_matrix);
- fz_transform_rect(&mask_bbox, &gstate->softmask_ctm);
+ mask_bbox = fz_transform_rect(mask_bbox, mask_matrix);
+ mask_bbox = fz_transform_rect(mask_bbox, gstate->softmask_ctm);
}
gstate->softmask = NULL;
gstate->softmask_resources = NULL;
@@ -208,7 +208,7 @@ pdf_show_shade(fz_context *ctx, pdf_run_processor *pr, fz_shade *shd)
if (pr->super.hidden)
return;
- fz_bound_shade(ctx, shd, &gstate->ctm, &bbox);
+ bbox = fz_bound_shade(ctx, shd, gstate->ctm);
gstate = pdf_begin_group(ctx, pr, &bbox, &softmask);
@@ -389,8 +389,8 @@ pdf_show_pattern(fz_context *ctx, pdf_run_processor *pr, pdf_pattern *pat, pdf_g
gstate->softmask = NULL;
}
- fz_concat(&ptm, &pat->matrix, &pat_gstate->ctm);
- fz_invert_matrix(&invptm, &ptm);
+ ptm = fz_concat(pat->matrix, pat_gstate->ctm);
+ invptm = fz_invert_matrix(ptm);
/* The parent_ctm is amended with our pattern matrix */
gparent_save = pr->gparent;
@@ -403,8 +403,7 @@ pdf_show_pattern(fz_context *ctx, pdf_run_processor *pr, pdf_pattern *pat, pdf_g
/* patterns are painted using the parent_ctm. area = bbox of
* shape to be filled in device space. Map it back to pattern
* space. */
- local_area = *area;
- fz_transform_rect(&local_area, &invptm);
+ local_area = fz_transform_rect(*area, invptm);
fx0 = (local_area.x0 - pat->bbox.x0) / pat->xstep;
fy0 = (local_area.y0 - pat->bbox.y0) / pat->ystep;
@@ -474,8 +473,7 @@ pdf_show_pattern(fz_context *ctx, pdf_run_processor *pr, pdf_pattern *pat, pdf_g
{
for (x = x0; x < x1; x++)
{
- gstate->ctm = ptm;
- fz_pre_translate(&gstate->ctm, x * pat->xstep, y * pat->ystep);
+ gstate->ctm = fz_pre_translate(ptm, x * pat->xstep, y * pat->ystep);
pdf_gsave(ctx, pr);
fz_try(ctx)
pdf_process_contents(ctx, (pdf_processor*)pr, pat->document, pat->resources, pat->contents, NULL);
@@ -547,11 +545,9 @@ pdf_show_image(fz_context *ctx, pdf_run_processor *pr, fz_image *image)
return;
/* PDF has images bottom-up, so flip them right side up here */
- image_ctm = gstate->ctm;
- fz_pre_scale(fz_pre_translate(&image_ctm, 0, 1), 1, -1);
+ image_ctm = fz_pre_scale(fz_pre_translate(gstate->ctm, 0, 1), 1, -1);
- bbox = fz_unit_rect;
- fz_transform_rect(&bbox, &image_ctm);
+ bbox = fz_transform_rect(fz_unit_rect, image_ctm);
if (image->mask && gstate->blendmode)
{
@@ -631,7 +627,7 @@ pdf_show_path(fz_context *ctx, pdf_run_processor *pr, int doclose, int dofill, i
if (doclose)
fz_closepath(ctx, path);
- fz_bound_path(ctx, path, (dostroke ? gstate->stroke_state : NULL), &gstate->ctm, &bbox);
+ bbox = fz_bound_path(ctx, path, (dostroke ? gstate->stroke_state : NULL), gstate->ctm);
if (pr->super.hidden)
dostroke = dofill = 0;
@@ -778,11 +774,9 @@ pdf_flush_text(fz_context *ctx, pdf_run_processor *pr)
fz_try(ctx)
{
- fz_rect tb = pr->tos.text_bbox;
-
- fz_transform_rect(&tb, &gstate->ctm);
+ fz_rect tb = fz_transform_rect(pr->tos.text_bbox, gstate->ctm);
if (dostroke)
- fz_adjust_rect_for_stroke(ctx, &tb, gstate->stroke_state, &gstate->ctm);
+ tb = fz_adjust_rect_for_stroke(ctx, tb, gstate->stroke_state, gstate->ctm);
/* Don't bother sending a text group with nothing in it */
if (!text->head)
@@ -925,8 +919,7 @@ pdf_show_char(fz_context *ctx, pdf_run_processor *pr, int cid)
/* Render the glyph stream direct here (only happens for
* type3 glyphs that seem to inherit current graphics
* attributes, or type 3 glyphs within type3 glyphs). */
- fz_matrix composed;
- fz_concat(&composed, &trm, &gstate->ctm);
+ fz_matrix composed = fz_concat(trm, gstate->ctm);
fz_render_t3_glyph_direct(ctx, pr->dev, fontdesc->font, gid, &composed, gstate, pr->nested_depth, pr->default_cs);
/* Render text invisibly so that it can still be extracted. */
pr->tos.text_mode = 3;
@@ -947,11 +940,11 @@ pdf_show_char(fz_context *ctx, pdf_run_processor *pr, int cid)
}
/* add glyph to textobject */
- fz_show_glyph(ctx, pr->tos.text, fontdesc->font, &trm, gid, ucsbuf[0], fontdesc->wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET);
+ fz_show_glyph(ctx, pr->tos.text, fontdesc->font, trm, gid, ucsbuf[0], fontdesc->wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET);
/* add filler glyphs for one-to-many unicode mapping */
for (i = 1; i < ucslen; i++)
- fz_show_glyph(ctx, pr->tos.text, fontdesc->font, &trm, -1, ucsbuf[i], fontdesc->wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET);
+ fz_show_glyph(ctx, pr->tos.text, fontdesc->font, trm, -1, ucsbuf[i], fontdesc->wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET);
pdf_tos_move_after_char(ctx, &pr->tos);
}
@@ -963,9 +956,9 @@ pdf_show_space(fz_context *ctx, pdf_run_processor *pr, float tadj)
pdf_font_desc *fontdesc = gstate->text.font;
if (fontdesc->wmode == 0)
- fz_pre_translate(&pr->tos.tm, tadj * gstate->text.scale, 0);
+ pr->tos.tm = fz_pre_translate(pr->tos.tm, tadj * gstate->text.scale, 0);
else
- fz_pre_translate(&pr->tos.tm, 0, tadj);
+ pr->tos.tm = fz_pre_translate(pr->tos.tm, 0, tadj);
}
static void
@@ -1232,13 +1225,13 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj
gstate = pr->gstate + pr->gtop;
- pdf_xobject_bbox(ctx, xobj, &xobj_bbox);
- pdf_xobject_matrix(ctx, xobj, &xobj_matrix);
+ xobj_bbox = pdf_xobject_bbox(ctx, xobj);
+ xobj_matrix = pdf_xobject_matrix(ctx, xobj);
transparency = pdf_xobject_transparency(ctx, xobj);
/* apply xobject's transform matrix */
- fz_concat(&local_transform, &xobj_matrix, &local_transform);
- fz_concat(&gstate->ctm, &local_transform, &gstate->ctm);
+ local_transform = fz_concat(xobj_matrix, local_transform);
+ gstate->ctm = fz_concat(local_transform, gstate->ctm);
/* The gparent is updated with the modified ctm */
gparent_save_ctm = pr->gstate[pr->gparent].ctm;
@@ -1247,11 +1240,9 @@ pdf_run_xobject(fz_context *ctx, pdf_run_processor *proc, pdf_obj *xobj, pdf_obj
/* apply soft mask, create transparency group and reset state */
if (transparency)
{
- fz_rect bbox;
int isolated = pdf_xobject_isolated(ctx, xobj);
- bbox = xobj_bbox;
- fz_transform_rect(&bbox, &gstate->ctm);
+ fz_rect bbox = fz_transform_rect(xobj_bbox, gstate->ctm);
/* Remember that we tried to call begin_softmask. Even
* if it throws an error, we must call end_softmask. */
@@ -1582,7 +1573,7 @@ static void pdf_run_cm(fz_context *ctx, pdf_processor *proc, float a, float b, f
m.d = d;
m.e = e;
m.f = f;
- fz_concat(&gstate->ctm, &m, &gstate->ctm);
+ gstate->ctm = fz_concat(m, gstate->ctm);
}
/* path construction */
diff --git a/source/pdf/pdf-page.c b/source/pdf/pdf-page.c
index 8300fdb3..f8131b2c 100644
--- a/source/pdf/pdf-page.c
+++ b/source/pdf/pdf-page.c
@@ -623,13 +623,13 @@ pdf_page_presentation(fz_context *ctx, pdf_page *page, fz_transition *transition
return transition;
}
-fz_rect *
-pdf_bound_page(fz_context *ctx, pdf_page *page, fz_rect *mediabox)
+fz_rect
+pdf_bound_page(fz_context *ctx, pdf_page *page)
{
fz_matrix page_ctm;
- pdf_page_transform(ctx, page, mediabox, &page_ctm);
- fz_transform_rect(mediabox, &page_ctm);
- return mediabox;
+ fz_rect mediabox;
+ pdf_page_transform(ctx, page, &mediabox, &page_ctm);
+ return fz_transform_rect(mediabox, page_ctm);
}
fz_link *
@@ -661,7 +661,6 @@ pdf_page_obj_transform(fz_context *ctx, pdf_obj *pageobj, fz_rect *page_mediabox
{
pdf_obj *obj;
fz_rect mediabox, cropbox, realbox, pagebox;
- fz_matrix tmp;
float userunit = 1;
int rotate;
@@ -672,8 +671,8 @@ pdf_page_obj_transform(fz_context *ctx, pdf_obj *pageobj, fz_rect *page_mediabox
if (pdf_is_real(ctx, obj))
userunit = pdf_to_real(ctx, obj);
- pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, pageobj, PDF_NAME(MediaBox)), &mediabox);
- if (fz_is_empty_rect(&mediabox))
+ mediabox = pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, pageobj, PDF_NAME(MediaBox)));
+ if (fz_is_empty_rect(mediabox))
{
mediabox.x0 = 0;
mediabox.y0 = 0;
@@ -681,9 +680,9 @@ pdf_page_obj_transform(fz_context *ctx, pdf_obj *pageobj, fz_rect *page_mediabox
mediabox.y1 = 792;
}
- pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, pageobj, PDF_NAME(CropBox)), &cropbox);
- if (!fz_is_empty_rect(&cropbox))
- fz_intersect_rect(&mediabox, &cropbox);
+ cropbox = pdf_to_rect(ctx, pdf_lookup_inherited_page_item(ctx, pageobj, PDF_NAME(CropBox)));
+ if (!fz_is_empty_rect(cropbox))
+ mediabox = fz_intersect_rect(mediabox, cropbox);
page_mediabox->x0 = fz_min(mediabox.x0, mediabox.x1);
page_mediabox->y0 = fz_min(mediabox.y0, mediabox.y1);
@@ -708,16 +707,14 @@ pdf_page_obj_transform(fz_context *ctx, pdf_obj *pageobj, fz_rect *page_mediabox
* to PDF user space (arbitrary page origin, y ascending, UserUnit dpi). */
/* Make left-handed and scale by UserUnit */
- fz_scale(page_ctm, userunit, -userunit);
+ *page_ctm = fz_scale(userunit, -userunit);
/* Rotate */
- fz_pre_rotate(page_ctm, -rotate);
+ *page_ctm = fz_pre_rotate(*page_ctm, -rotate);
/* Translate page origin to 0,0 */
- realbox = *page_mediabox;
- fz_transform_rect(&realbox, page_ctm);
- fz_translate(&tmp, -realbox.x0, -realbox.y0);
- fz_concat(page_ctm, page_ctm, &tmp);
+ realbox = fz_transform_rect(*page_mediabox, *page_ctm);
+ *page_ctm = fz_concat(*page_ctm, fz_translate(-realbox.x0, -realbox.y0));
}
void
@@ -1166,7 +1163,7 @@ pdf_delete_page_range(fz_context *ctx, pdf_document *doc, int start, int end)
}
pdf_obj *
-pdf_add_page(fz_context *ctx, pdf_document *doc, const fz_rect *mediabox, int rotate, pdf_obj *resources, fz_buffer *contents)
+pdf_add_page(fz_context *ctx, pdf_document *doc, fz_rect mediabox, int rotate, pdf_obj *resources, fz_buffer *contents)
{
pdf_obj *page_obj = pdf_new_dict(ctx, doc, 5);
fz_try(ctx)
diff --git a/source/pdf/pdf-parse.c b/source/pdf/pdf-parse.c
index fb1cc595..501c5626 100644
--- a/source/pdf/pdf-parse.c
+++ b/source/pdf/pdf-parse.c
@@ -3,40 +3,42 @@
#include <string.h>
-fz_rect *
-pdf_to_rect(fz_context *ctx, pdf_obj *array, fz_rect *r)
+fz_rect
+pdf_to_rect(fz_context *ctx, pdf_obj *array)
{
if (!pdf_is_array(ctx, array))
- *r = fz_empty_rect;
+ return fz_empty_rect;
else
{
float a = pdf_array_get_real(ctx, array, 0);
float b = pdf_array_get_real(ctx, array, 1);
float c = pdf_array_get_real(ctx, array, 2);
float d = pdf_array_get_real(ctx, array, 3);
- r->x0 = fz_min(a, c);
- r->y0 = fz_min(b, d);
- r->x1 = fz_max(a, c);
- r->y1 = fz_max(b, d);
+ fz_rect r;
+ r.x0 = fz_min(a, c);
+ r.y0 = fz_min(b, d);
+ r.x1 = fz_max(a, c);
+ r.y1 = fz_max(b, d);
+ return r;
}
- return r;
}
-fz_matrix *
-pdf_to_matrix(fz_context *ctx, pdf_obj *array, fz_matrix *m)
+fz_matrix
+pdf_to_matrix(fz_context *ctx, pdf_obj *array)
{
if (!pdf_is_array(ctx, array))
- *m = fz_identity;
+ return fz_identity;
else
{
- m->a = pdf_array_get_real(ctx, array, 0);
- m->b = pdf_array_get_real(ctx, array, 1);
- m->c = pdf_array_get_real(ctx, array, 2);
- m->d = pdf_array_get_real(ctx, array, 3);
- m->e = pdf_array_get_real(ctx, array, 4);
- m->f = pdf_array_get_real(ctx, array, 5);
+ fz_matrix m;
+ m.a = pdf_array_get_real(ctx, array, 0);
+ m.b = pdf_array_get_real(ctx, array, 1);
+ m.c = pdf_array_get_real(ctx, array, 2);
+ m.d = pdf_array_get_real(ctx, array, 3);
+ m.e = pdf_array_get_real(ctx, array, 4);
+ m.f = pdf_array_get_real(ctx, array, 5);
+ return m;
}
- return m;
}
static int
diff --git a/source/pdf/pdf-pattern.c b/source/pdf/pdf-pattern.c
index f1f94352..5574a565 100644
--- a/source/pdf/pdf-pattern.c
+++ b/source/pdf/pdf-pattern.c
@@ -58,13 +58,10 @@ pdf_load_pattern(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
pat->ystep = pdf_dict_get_real(ctx, dict, PDF_NAME(YStep));
obj = pdf_dict_get(ctx, dict, PDF_NAME(BBox));
- pdf_to_rect(ctx, obj, &pat->bbox);
+ pat->bbox = pdf_to_rect(ctx, obj);
obj = pdf_dict_get(ctx, dict, PDF_NAME(Matrix));
- if (obj)
- pdf_to_matrix(ctx, obj, &pat->matrix);
- else
- pat->matrix = fz_identity;
+ pat->matrix = pdf_to_matrix(ctx, obj);
pat->resources = pdf_dict_get(ctx, dict, PDF_NAME(Resources));
if (pat->resources)
diff --git a/source/pdf/pdf-run.c b/source/pdf/pdf-run.c
index 2cc56edb..15339373 100644
--- a/source/pdf/pdf-run.c
+++ b/source/pdf/pdf-run.c
@@ -16,7 +16,7 @@ pdf_run_annot_with_usage(fz_context *ctx, pdf_document *doc, pdf_page *page, pdf
fz_set_default_colorspaces(ctx, dev, default_cs);
pdf_page_transform(ctx, page, &mediabox, &page_ctm);
- fz_concat(&local_ctm, &page_ctm, ctm);
+ local_ctm = fz_concat(page_ctm, *ctm);
fz_try(ctx)
{
@@ -54,12 +54,12 @@ pdf_run_page_contents_with_usage(fz_context *ctx, pdf_document *doc, pdf_page *p
fz_try(ctx)
{
pdf_page_transform(ctx, page, &mediabox, &page_ctm);
- fz_concat(&local_ctm, &page_ctm, ctm);
+ local_ctm = fz_concat(page_ctm, *ctm);
+ mediabox = fz_transform_rect(mediabox, local_ctm);
resources = pdf_page_resources(ctx, page);
contents = pdf_page_contents(ctx, page);
-
if (page->transparency)
{
pdf_obj *group = pdf_page_group(ctx, page);
@@ -78,7 +78,7 @@ pdf_run_page_contents_with_usage(fz_context *ctx, pdf_document *doc, pdf_page *p
else
colorspace = fz_keep_colorspace(ctx, fz_default_output_intent(ctx, default_cs));
- fz_begin_group(ctx, dev, fz_transform_rect(&mediabox, &local_ctm), colorspace, 1, 0, 0, 1);
+ fz_begin_group(ctx, dev, &mediabox, colorspace, 1, 0, 0, 1);
fz_drop_colorspace(ctx, colorspace);
colorspace = NULL;
}
diff --git a/source/pdf/pdf-shade.c b/source/pdf/pdf-shade.c
index 5476c8b8..d34e8440 100644
--- a/source/pdf/pdf-shade.c
+++ b/source/pdf/pdf-shade.c
@@ -54,7 +54,6 @@ pdf_load_function_based_shading(fz_context *ctx, pdf_document *doc, fz_shade *sh
pdf_obj *obj;
float x0, y0, x1, y1;
float fv[2];
- fz_matrix matrix;
int xx, yy;
float *p;
int n = fz_colorspace_n(ctx, shade->colorspace);
@@ -70,12 +69,7 @@ pdf_load_function_based_shading(fz_context *ctx, pdf_document *doc, fz_shade *sh
y1 = pdf_array_get_real(ctx, obj, 3);
}
- obj = pdf_dict_get(ctx, dict, PDF_NAME(Matrix));
- if (obj)
- pdf_to_matrix(ctx, obj, &matrix);
- else
- matrix = fz_identity;
- shade->u.f.matrix = matrix;
+ shade->u.f.matrix = pdf_to_matrix(ctx, pdf_dict_get(ctx, dict, PDF_NAME(Matrix)));
shade->u.f.xdivs = FUNSEGS;
shade->u.f.ydivs = FUNSEGS;
shade->u.f.fn_vals = fz_malloc(ctx, (FUNSEGS+1)*(FUNSEGS+1)*n*sizeof(float));
@@ -346,7 +340,7 @@ pdf_load_shading_dict(fz_context *ctx, pdf_document *doc, pdf_obj *dict, const f
obj = pdf_dict_get(ctx, dict, PDF_NAME(BBox));
if (pdf_is_array(ctx, obj))
- pdf_to_rect(ctx, obj, &shade->bbox);
+ shade->bbox = pdf_to_rect(ctx, obj);
obj = pdf_dict_get(ctx, dict, PDF_NAME(Function));
if (pdf_is_dict(ctx, obj))
@@ -449,10 +443,7 @@ pdf_load_shading(fz_context *ctx, pdf_document *doc, pdf_obj *dict)
if (pdf_dict_get(ctx, dict, PDF_NAME(PatternType)))
{
obj = pdf_dict_get(ctx, dict, PDF_NAME(Matrix));
- if (obj)
- pdf_to_matrix(ctx, obj, &mat);
- else
- mat = fz_identity;
+ mat = pdf_to_matrix(ctx, obj);
obj = pdf_dict_get(ctx, dict, PDF_NAME(ExtGState));
if (obj)
diff --git a/source/pdf/pdf-signature.c b/source/pdf/pdf-signature.c
index 6ccb7ab2..cfb623d9 100644
--- a/source/pdf/pdf-signature.c
+++ b/source/pdf/pdf-signature.c
@@ -71,10 +71,10 @@ void pdf_sign_signature(fz_context *ctx, pdf_document *doc, pdf_widget *widget,
pdf_signature_set_value(ctx, doc, wobj, signer);
- pdf_to_rect(ctx, pdf_dict_get(ctx, wobj, PDF_NAME(Rect)), &rect);
+ rect = pdf_to_rect(ctx, pdf_dict_get(ctx, wobj, PDF_NAME(Rect)));
/* Create an appearance stream only if the signature is intended to be visible */
- if (!fz_is_empty_rect(&rect))
+ if (!fz_is_empty_rect(rect))
{
dn = signer->designated_name(signer);
fzbuf = fz_new_buffer(ctx, 256);
diff --git a/source/pdf/pdf-type3.c b/source/pdf/pdf-type3.c
index cd7693cf..9d32797e 100644
--- a/source/pdf/pdf-type3.c
+++ b/source/pdf/pdf-type3.c
@@ -56,12 +56,12 @@ pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *d
fontdesc = pdf_new_font_desc(ctx);
obj = pdf_dict_get(ctx, dict, PDF_NAME(FontMatrix));
- pdf_to_matrix(ctx, obj, &matrix);
+ matrix = pdf_to_matrix(ctx, obj);
obj = pdf_dict_get(ctx, dict, PDF_NAME(FontBBox));
- fz_transform_rect(pdf_to_rect(ctx, obj, &bbox), &matrix);
+ bbox = fz_transform_rect(pdf_to_rect(ctx, obj), matrix);
- font = fz_new_type3_font(ctx, buf, &matrix);
+ font = fz_new_type3_font(ctx, buf, matrix);
fontdesc->font = font;
fontdesc->size += sizeof(fz_font) + 256 * (sizeof(fz_buffer*) + sizeof(float));
diff --git a/source/pdf/pdf-write.c b/source/pdf/pdf-write.c
index 0a66365e..63863104 100644
--- a/source/pdf/pdf-write.c
+++ b/source/pdf/pdf-write.c
@@ -3304,7 +3304,7 @@ pdf_writer_end_page(fz_context *ctx, fz_document_writer *wri_, fz_device *dev)
fz_try(ctx)
{
fz_close_device(ctx, dev);
- obj = pdf_add_page(ctx, wri->pdf, &wri->mediabox, 0, wri->resources, wri->contents);
+ obj = pdf_add_page(ctx, wri->pdf, wri->mediabox, 0, wri->resources, wri->contents);
pdf_insert_page(ctx, wri->pdf, -1, obj);
}
fz_always(ctx)
diff --git a/source/pdf/pdf-xobject.c b/source/pdf/pdf-xobject.c
index 871f001a..2cfe1f8f 100644
--- a/source/pdf/pdf-xobject.c
+++ b/source/pdf/pdf-xobject.c
@@ -7,16 +7,16 @@ pdf_xobject_resources(fz_context *ctx, pdf_obj *xobj)
return pdf_dict_get(ctx, xobj, PDF_NAME(Resources));
}
-fz_rect *
-pdf_xobject_bbox(fz_context *ctx, pdf_obj *xobj, fz_rect *bbox)
+fz_rect
+pdf_xobject_bbox(fz_context *ctx, pdf_obj *xobj)
{
- return pdf_to_rect(ctx, pdf_dict_get(ctx, xobj, PDF_NAME(BBox)), bbox);
+ return pdf_to_rect(ctx, pdf_dict_get(ctx, xobj, PDF_NAME(BBox)));
}
-fz_matrix *
-pdf_xobject_matrix(fz_context *ctx, pdf_obj *xobj, fz_matrix *matrix)
+fz_matrix
+pdf_xobject_matrix(fz_context *ctx, pdf_obj *xobj)
{
- return pdf_to_matrix(ctx, pdf_dict_get(ctx, xobj, PDF_NAME(Matrix)), matrix);
+ return pdf_to_matrix(ctx, pdf_dict_get(ctx, xobj, PDF_NAME(Matrix)));
}
int pdf_xobject_isolated(fz_context *ctx, pdf_obj *xobj)
@@ -65,7 +65,7 @@ pdf_xobject_colorspace(fz_context *ctx, pdf_obj *xobj)
}
pdf_obj *
-pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const fz_matrix *mat, pdf_obj *res, fz_buffer *contents)
+pdf_new_xobject(fz_context *ctx, pdf_document *doc, fz_rect bbox, fz_matrix matrix, pdf_obj *res, fz_buffer *contents)
{
pdf_obj *ind = NULL;
pdf_obj *form = pdf_new_dict(ctx, doc, 5);
@@ -74,8 +74,7 @@ pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const f
pdf_dict_put(ctx, form, PDF_NAME(Type), PDF_NAME(XObject));
pdf_dict_put(ctx, form, PDF_NAME(Subtype), PDF_NAME(Form));
pdf_dict_put_rect(ctx, form, PDF_NAME(BBox), bbox);
- if (mat)
- pdf_dict_put_matrix(ctx, form, PDF_NAME(Matrix), mat);
+ pdf_dict_put_matrix(ctx, form, PDF_NAME(Matrix), matrix);
if (res)
pdf_dict_put(ctx, form, PDF_NAME(Resources), res);
ind = pdf_add_stream(ctx, doc, contents, form, 0);
@@ -88,13 +87,10 @@ pdf_new_xobject(fz_context *ctx, pdf_document *doc, const fz_rect *bbox, const f
}
void
-pdf_update_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *form, const fz_rect *bbox, const fz_matrix *mat, pdf_obj *res, fz_buffer *contents)
+pdf_update_xobject(fz_context *ctx, pdf_document *doc, pdf_obj *form, fz_rect bbox, fz_matrix matrix, pdf_obj *res, fz_buffer *contents)
{
pdf_dict_put_rect(ctx, form, PDF_NAME(BBox), bbox);
- if (mat)
- pdf_dict_put_matrix(ctx, form, PDF_NAME(Matrix), mat);
- else
- pdf_dict_del(ctx, form, PDF_NAME(Matrix));
+ pdf_dict_put_matrix(ctx, form, PDF_NAME(Matrix), matrix);
if (res)
pdf_dict_put(ctx, form, PDF_NAME(Resources), res);
else