Skip to content

Commit

Permalink
PS/PDF: Fix regression when changing page size to a larger size
Browse files Browse the repository at this point in the history
  • Loading branch information
Adrian Johnson committed Nov 21, 2010
1 parent ccff764 commit ed87ddd
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
28 changes: 28 additions & 0 deletions src/cairo-paginated-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,34 @@ _cairo_paginated_surface_get_target (cairo_surface_t *surface)
return paginated_surface->target;
}

cairo_status_t
_cairo_paginated_surface_set_size (cairo_surface_t *surface,
int width,
int height)
{
cairo_paginated_surface_t *paginated_surface;
cairo_status_t status;
cairo_rectangle_t recording_extents;

assert (_cairo_surface_is_paginated (surface));

paginated_surface = (cairo_paginated_surface_t *) surface;

recording_extents.x = 0;
recording_extents.y = 0;
recording_extents.width = width;
recording_extents.height = height;

cairo_surface_destroy (paginated_surface->recording_surface);
paginated_surface->recording_surface = cairo_recording_surface_create (paginated_surface->content,
&recording_extents);
status = paginated_surface->recording_surface->status;
if (unlikely (status))
return _cairo_surface_set_error (surface, status);

return CAIRO_STATUS_SUCCESS;
}

static cairo_status_t
_cairo_paginated_surface_finish (void *abstract_surface)
{
Expand Down
10 changes: 8 additions & 2 deletions src/cairo-pdf-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -645,13 +645,19 @@ cairo_pdf_surface_set_size (cairo_surface_t *surface,
double height_in_points)
{
cairo_pdf_surface_t *pdf_surface = NULL; /* hide compiler warning */
cairo_status_t status;

if (! _extract_pdf_surface (surface, &pdf_surface))
return;

_cairo_pdf_surface_set_size_internal (pdf_surface,
width_in_points,
height_in_points);
status = _cairo_paginated_surface_set_size (pdf_surface->paginated_surface,
width_in_points,
height_in_points);
if (status)
status = _cairo_surface_set_error (surface, status);
}

static void
Expand Down Expand Up @@ -1720,8 +1726,6 @@ _cairo_pdf_surface_finish (void *abstract_surface)
surface->font_subsets = NULL;
}

_cairo_surface_clipper_reset (&surface->clipper);

return status;
}

Expand Down Expand Up @@ -3571,6 +3575,8 @@ _cairo_pdf_surface_show_page (void *abstract_surface)
if (unlikely (status))
return status;

_cairo_surface_clipper_reset (&surface->clipper);

status = _cairo_pdf_surface_write_page (surface);
if (unlikely (status))
return status;
Expand Down
6 changes: 6 additions & 0 deletions src/cairo-ps-surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -1303,6 +1303,7 @@ cairo_ps_surface_set_size (cairo_surface_t *surface,
double height_in_points)
{
cairo_ps_surface_t *ps_surface = NULL;
cairo_status_t status;

if (! _extract_ps_surface (surface, TRUE, &ps_surface))
return;
Expand All @@ -1312,6 +1313,11 @@ cairo_ps_surface_set_size (cairo_surface_t *surface,
cairo_matrix_init (&ps_surface->cairo_to_ps, 1, 0, 0, -1, 0, height_in_points);
_cairo_pdf_operators_set_cairo_to_pdf_matrix (&ps_surface->pdf_operators,
&ps_surface->cairo_to_ps);
status = _cairo_paginated_surface_set_size (ps_surface->paginated_surface,
width_in_points,
height_in_points);
if (status)
status = _cairo_surface_set_error (surface, status);
}

/**
Expand Down

0 comments on commit ed87ddd

Please sign in to comment.