mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
d49e64c791
Reland after fixing quartz related clipping bug and a bunch of other ones
105 lines
3.1 KiB
Diff
105 lines
3.1 KiB
Diff
commit d2120bdb06c9aacc470bb346d6bc2071c2e0749d
|
|
Author: Jeff Muizelaar <jmuizelaar@mozilla.com>
|
|
Date: Fri Mar 12 15:32:09 2010 -0500
|
|
|
|
BGR
|
|
|
|
diff --git a/src/cairo-surface.c b/src/cairo-surface.c
|
|
index 332e3ab..4a1d6a0 100644
|
|
--- a/src/cairo-surface.c
|
|
+++ b/src/cairo-surface.c
|
|
@@ -1501,7 +1501,9 @@ static void
|
|
_wrap_release_source_image (void *data)
|
|
{
|
|
struct acquire_source_image_data *acquire_data = data;
|
|
- _cairo_surface_release_source_image (acquire_data->src, acquire_data->image, acquire_data->image_extra);
|
|
+ _cairo_surface_release_source_image (acquire_data->src,
|
|
+ acquire_data->image,
|
|
+ acquire_data->image_extra);
|
|
free(data);
|
|
}
|
|
|
|
@@ -1515,42 +1517,47 @@ _wrap_image (cairo_surface_t *src,
|
|
cairo_image_surface_t *surface;
|
|
cairo_status_t status;
|
|
|
|
- struct acquire_source_image_data *data = malloc(sizeof(*data));
|
|
+ struct acquire_source_image_data *data = malloc (sizeof (*data));
|
|
+ if (unlikely (data == NULL))
|
|
+ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
|
data->src = src;
|
|
data->image = image;
|
|
data->image_extra = image_extra;
|
|
|
|
- surface = (cairo_image_surface_t*)cairo_image_surface_create_for_data (image->data,
|
|
- image->format,
|
|
- image->width,
|
|
- image->height,
|
|
- image->stride);
|
|
+ surface = (cairo_image_surface_t*)
|
|
+ _cairo_image_surface_create_with_pixman_format (image->data,
|
|
+ image->pixman_format,
|
|
+ image->width,
|
|
+ image->height,
|
|
+ image->stride);
|
|
status = surface->base.status;
|
|
- if (status)
|
|
+ if (status) {
|
|
+ free (data);
|
|
return status;
|
|
+ }
|
|
|
|
status = _cairo_user_data_array_set_data (&surface->base.user_data,
|
|
- &wrap_image_key,
|
|
- data,
|
|
- _wrap_release_source_image);
|
|
+ &wrap_image_key,
|
|
+ data,
|
|
+ _wrap_release_source_image);
|
|
if (status) {
|
|
cairo_surface_destroy (&surface->base);
|
|
+ free (data);
|
|
return status;
|
|
}
|
|
-/*
|
|
- pixman_image_set_component_alpha (surface->pixman_image,
|
|
- pixman_image_get_component_alpha (image->pixman_image));
|
|
-*/
|
|
+
|
|
+ pixman_image_set_component_alpha (
|
|
+ surface->pixman_image,
|
|
+ pixman_image_get_component_alpha (image->pixman_image));
|
|
+
|
|
*out = surface;
|
|
return CAIRO_STATUS_SUCCESS;
|
|
}
|
|
|
|
-
|
|
/**
|
|
* _cairo_surface_clone_similar:
|
|
* @surface: a #cairo_surface_t
|
|
* @src: the source image
|
|
- * @content: target content mask
|
|
* @src_x: extent for the rectangle in src we actually care about
|
|
* @src_y: extent for the rectangle in src we actually care about
|
|
* @width: extent for the rectangle in src we actually care about
|
|
@@ -1627,12 +1634,12 @@ _cairo_surface_clone_similar (cairo_surface_t *surface,
|
|
_cairo_surface_release_source_image (src, image, image_extra);
|
|
} else {
|
|
status =
|
|
- surface->backend->clone_similar (surface, &image->base,
|
|
- src_x, src_y,
|
|
- width, height,
|
|
- clone_offset_x,
|
|
- clone_offset_y,
|
|
- clone_out);
|
|
+ surface->backend->clone_similar (surface, &image->base,
|
|
+ src_x, src_y,
|
|
+ width, height,
|
|
+ clone_offset_x,
|
|
+ clone_offset_y,
|
|
+ clone_out);
|
|
cairo_surface_destroy(&image->base);
|
|
}
|
|
}
|