diff --git a/src/cairo-analysis-surface.c b/src/cairo-analysis-surface.c index c6253803f..2dc149d45 100644 --- a/src/cairo-analysis-surface.c +++ b/src/cairo-analysis-surface.c @@ -673,10 +673,17 @@ _cairo_analysis_surface_create (cairo_surface_t *target, _cairo_region_init (&surface->supported_region); _cairo_region_init (&surface->fallback_region); - surface->current_clip.x = 0; - surface->current_clip.y = 0; - surface->current_clip.width = width; - surface->current_clip.height = height; + if (width == -1 && height == -1) { + surface->current_clip.x = CAIRO_RECT_INT_MIN; + surface->current_clip.y = CAIRO_RECT_INT_MIN; + surface->current_clip.width = CAIRO_RECT_INT_MAX - CAIRO_RECT_INT_MIN; + surface->current_clip.height = CAIRO_RECT_INT_MAX - CAIRO_RECT_INT_MIN; + } else { + surface->current_clip.x = 0; + surface->current_clip.y = 0; + surface->current_clip.width = width; + surface->current_clip.height = height; + } return &surface->base; } diff --git a/src/cairo-meta-surface.c b/src/cairo-meta-surface.c index 61c9b5d3e..f7ce2d701 100644 --- a/src/cairo-meta-surface.c +++ b/src/cairo-meta-surface.c @@ -570,6 +570,9 @@ _cairo_meta_surface_get_extents (void *abstract_surface, { cairo_meta_surface_t *surface = abstract_surface; + if (surface->width_pixels == -1 && surface->height_pixels == -1) + return CAIRO_INT_STATUS_UNSUPPORTED; + rectangle->x = 0; rectangle->y = 0; rectangle->width = surface->width_pixels;