[PATCH 15/72] image: typecasting helpers

"Enrico Weigelt, metux IT consult" <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
Introduce helpers for typecasting from abstract surface to the
actual image surface type.

This patch is also going to be needed by other backends utilizing
the image surface internally.

Signed-off-by: Enrico Weigelt, metux IT consult <[email protected]>
---
 src/cairo-image-surface-private.h |  7 +++++++
 src/cairo-image-surface.c         | 43 +++++++++++++++++++--------------------
 2 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/src/cairo-image-surface-private.h b/src/cairo-image-surface-private.h
index 8ca694c..3af7f82 100644
--- a/src/cairo-image-surface-private.h
+++ b/src/cairo-image-surface-private.h
@@ -88,6 +88,13 @@ typedef struct _cairo_image_source {
     unsigned is_opaque_solid : 1;
 } cairo_image_source_t;
 
+static cairo_always_inline cairo_image_surface_t *
+_cairo_surface_cast_image ( cairo_surface_t *surface )
+{
+    assert (surface != NULL);
+    return cairo_container_of (surface, cairo_image_surface_t, base);
+}
+
 cairo_private extern const cairo_surface_backend_t _cairo_image_surface_backend;
 cairo_private extern const cairo_surface_backend_t _cairo_image_source_backend;
 
diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c
index 13d6272..796dd61 100644
--- a/src/cairo-image-surface.c
+++ b/src/cairo-image-surface.c
@@ -402,7 +402,7 @@ cairo_image_surface_create (cairo_format_t	format,
 }
 slim_hidden_def (cairo_image_surface_create);
 
-    cairo_surface_t *
+cairo_surface_t *
 _cairo_image_surface_create_with_content (cairo_content_t	content,
 					  int			width,
 					  int			height)
@@ -561,7 +561,7 @@ slim_hidden_def (cairo_image_surface_create_for_data);
 unsigned char *
 cairo_image_surface_get_data (cairo_surface_t *surface)
 {
-    cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
+    cairo_image_surface_t *image_surface = _cairo_surface_cast_image (surface);
 
     if (! _cairo_surface_is_image (surface)) {
 	_cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
@@ -585,7 +585,7 @@ slim_hidden_def (cairo_image_surface_get_data);
 cairo_format_t
 cairo_image_surface_get_format (cairo_surface_t *surface)
 {
-    cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
+    cairo_image_surface_t *image_surface = _cairo_surface_cast_image (surface);
 
     if (! _cairo_surface_is_image (surface)) {
 	_cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
@@ -609,7 +609,7 @@ slim_hidden_def (cairo_image_surface_get_format);
 int
 cairo_image_surface_get_width (cairo_surface_t *surface)
 {
-    cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
+    cairo_image_surface_t *image_surface = _cairo_surface_cast_image (surface);
 
     if (! _cairo_surface_is_image (surface)) {
 	_cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
@@ -633,7 +633,7 @@ slim_hidden_def (cairo_image_surface_get_width);
 int
 cairo_image_surface_get_height (cairo_surface_t *surface)
 {
-    cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
+    cairo_image_surface_t *image_surface = _cairo_surface_cast_image (surface);
 
     if (! _cairo_surface_is_image (surface)) {
 	_cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
@@ -660,8 +660,7 @@ slim_hidden_def (cairo_image_surface_get_height);
 int
 cairo_image_surface_get_stride (cairo_surface_t *surface)
 {
-
-    cairo_image_surface_t *image_surface = (cairo_image_surface_t *) surface;
+    cairo_image_surface_t *image_surface = _cairo_surface_cast_image (surface);
 
     if (! _cairo_surface_is_image (surface)) {
 	_cairo_error_throw (CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
@@ -672,7 +671,7 @@ cairo_image_surface_get_stride (cairo_surface_t *surface)
 }
 slim_hidden_def (cairo_image_surface_get_stride);
 
-    cairo_format_t
+cairo_format_t
 _cairo_format_from_content (cairo_content_t content)
 {
     switch (content) {
@@ -688,7 +687,7 @@ _cairo_format_from_content (cairo_content_t content)
     return CAIRO_FORMAT_INVALID;
 }
 
-    cairo_content_t
+cairo_content_t
 _cairo_content_from_format (cairo_format_t format)
 {
     switch (format) {
@@ -711,7 +710,7 @@ _cairo_content_from_format (cairo_format_t format)
     return CAIRO_CONTENT_COLOR_ALPHA;
 }
 
-    int
+int
 _cairo_format_bits_per_pixel (cairo_format_t format)
 {
     switch (format) {
@@ -738,7 +737,7 @@ _cairo_image_surface_create_similar (void	       *abstract_other,
 				     int		width,
 				     int		height)
 {
-    cairo_image_surface_t *other = abstract_other;
+    cairo_image_surface_t *other = _cairo_surface_cast_image (abstract_other);
 
     TRACE ((stderr, "%s (other=%u)\n", __FUNCTION__, other->base.unique_id));
 
@@ -759,7 +758,7 @@ _cairo_image_surface_create_similar (void	       *abstract_other,
 cairo_surface_t *
 _cairo_image_surface_snapshot (void *abstract_surface)
 {
-    cairo_image_surface_t *image = abstract_surface;
+    cairo_image_surface_t *image = _cairo_surface_cast_image (abstract_surface);
     cairo_image_surface_t *clone;
 
     /* If we own the image, we can simply steal the memory for the snapshot */
@@ -807,7 +806,7 @@ cairo_image_surface_t *
 _cairo_image_surface_map_to_image (void *abstract_other,
 				   const cairo_rectangle_int_t *extents)
 {
-    cairo_image_surface_t *other = abstract_other;
+    cairo_image_surface_t *other = _cairo_surface_cast_image (abstract_other);
     cairo_surface_t *surface;
     uint8_t *data;
 
@@ -839,7 +838,7 @@ _cairo_image_surface_unmap_image (void *abstract_surface,
 cairo_status_t
 _cairo_image_surface_finish (void *abstract_surface)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     if (surface->pixman_image) {
 	pixman_image_unref (surface->pixman_image);
@@ -870,7 +869,7 @@ cairo_surface_t *
 _cairo_image_surface_source (void			*abstract_surface,
 			     cairo_rectangle_int_t	*extents)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     if (extents) {
 	extents->x = extents->y = 0;
@@ -886,7 +885,7 @@ _cairo_image_surface_acquire_source_image (void                    *abstract_sur
 					   cairo_image_surface_t  **image_out,
 					   void                   **image_extra)
 {
-    *image_out = abstract_surface;
+    *image_out = _cairo_surface_cast_image (abstract_surface);
     *image_extra = NULL;
 
     return CAIRO_STATUS_SUCCESS;
@@ -904,7 +903,7 @@ cairo_bool_t
 _cairo_image_surface_get_extents (void			  *abstract_surface,
 				  cairo_rectangle_int_t   *rectangle)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     rectangle->x = 0;
     rectangle->y = 0;
@@ -920,7 +919,7 @@ _cairo_image_surface_paint (void			*abstract_surface,
 			    const cairo_pattern_t	*source,
 			    const cairo_clip_t		*clip)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     TRACE ((stderr, "%s (surface=%d)\n",
 	    __FUNCTION__, surface->base.unique_id));
@@ -936,7 +935,7 @@ _cairo_image_surface_mask (void				*abstract_surface,
 			   const cairo_pattern_t	*mask,
 			   const cairo_clip_t		*clip)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     TRACE ((stderr, "%s (surface=%d)\n",
 	    __FUNCTION__, surface->base.unique_id));
@@ -957,7 +956,7 @@ _cairo_image_surface_stroke (void			*abstract_surface,
 			     cairo_antialias_t		 antialias,
 			     const cairo_clip_t		*clip)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     TRACE ((stderr, "%s (surface=%d)\n",
 	    __FUNCTION__, surface->base.unique_id));
@@ -978,7 +977,7 @@ _cairo_image_surface_fill (void				*abstract_surface,
 			   cairo_antialias_t		 antialias,
 			   const cairo_clip_t		*clip)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     TRACE ((stderr, "%s (surface=%d)\n",
 	    __FUNCTION__, surface->base.unique_id));
@@ -998,7 +997,7 @@ _cairo_image_surface_glyphs (void			*abstract_surface,
 			     cairo_scaled_font_t	*scaled_font,
 			     const cairo_clip_t		*clip)
 {
-    cairo_image_surface_t *surface = abstract_surface;
+    cairo_image_surface_t *surface = _cairo_surface_cast_image (abstract_surface);
 
     TRACE ((stderr, "%s (surface=%d)\n",
 	    __FUNCTION__, surface->base.unique_id));
-- 
2.6.4.442.g545299f

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.