Пример #1
0
cairo_surface_t *
_cairo_test_paginated_surface_create_for_data (unsigned char		*data,
					 cairo_content_t	 content,
					 int		 	 width,
					 int		 	 height,
					 int		 	 stride)
{
    cairo_status_t status;
    cairo_surface_t *target;
    cairo_surface_t *paginated;
    test_paginated_surface_t *surface;

    target =  _cairo_image_surface_create_for_data_with_content (data, content,
								width, height,
								stride);
    status = cairo_surface_status (target);
    if (status)
	return target;

    surface = malloc (sizeof (test_paginated_surface_t));
    if (unlikely (surface == NULL)) {
	cairo_surface_destroy (target);
	return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
    }

    _cairo_surface_init (&surface->base, &test_paginated_surface_backend,
			 content);

    surface->target = target;

    paginated =  _cairo_paginated_surface_create (&surface->base,
	                                          content, width, height,
						  &test_paginated_surface_paginated_backend);
    status = paginated->status;
    if (status == CAIRO_STATUS_SUCCESS) {
	/* paginated keeps the only reference to surface now, drop ours */
	cairo_surface_destroy (&surface->base);
	return paginated;
    }

    cairo_surface_destroy (target);
    free (surface);
    return _cairo_surface_create_in_error (status);
}
Пример #2
0
cairo_surface_t *
_cairo_test_paginated_surface_create (cairo_surface_t *target)
{
    cairo_status_t status;
    cairo_surface_t *paginated;
    test_paginated_surface_t *surface;

    status = cairo_surface_status (target);
    if (unlikely (status))
	return _cairo_surface_create_in_error (status);

    surface = malloc (sizeof (test_paginated_surface_t));
    if (unlikely (surface == NULL))
	return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));

    _cairo_surface_init (&surface->base,
			 &test_paginated_surface_backend,
			 NULL, /* device */
			 target->content,
			 TRUE); /* is_vector */

    surface->target = cairo_surface_reference (target);

    paginated =  _cairo_paginated_surface_create (&surface->base,
						  target->content,
						  &test_paginated_surface_paginated_backend);
    status = paginated->status;
    if (status == CAIRO_STATUS_SUCCESS) {
	/* paginated keeps the only reference to surface now, drop ours */
	cairo_surface_destroy (&surface->base);
	return paginated;
    }

    cairo_surface_destroy (target);
    free (surface);
    return _cairo_surface_create_in_error (status);
}