diff options
author | Carl Worth <cworth@cworth.org> | 2006-05-01 15:44:58 -0700 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2006-05-02 11:38:28 -0700 |
commit | 41e288a88023cac9ced77099bceced41cf526a99 (patch) | |
tree | ee9933ab3326db8978285a1d2c2f3208b003a282 | |
parent | 0e4527c67e623801544be05de32f21a0c10e5b5d (diff) |
Make backend-specific function set a surface error on type mismatch.
If any backend-specific, surface-modifying function is called with
the wrong surface type we set an error on that surface.
-rw-r--r-- | src/cairo-surface.c | 2 | ||||
-rw-r--r-- | src/cairo-xcb-surface.c | 5 | ||||
-rw-r--r-- | src/cairo-xlib-surface.c | 19 | ||||
-rw-r--r-- | src/cairoint.h | 4 |
4 files changed, 19 insertions, 11 deletions
diff --git a/src/cairo-surface.c b/src/cairo-surface.c index 9a15db4f6..f905dfd05 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -108,7 +108,7 @@ const cairo_surface_t _cairo_surface_nil_read_error = { * breakpoint in _cairo_error() to generate a stack trace for when the * user causes cairo to detect an error. **/ -static void +void _cairo_surface_set_error (cairo_surface_t *surface, cairo_status_t status) { diff --git a/src/cairo-xcb-surface.c b/src/cairo-xcb-surface.c index 78eafc0fa..1e90f10e0 100644 --- a/src/cairo-xcb-surface.c +++ b/src/cairo-xcb-surface.c @@ -1291,9 +1291,10 @@ cairo_xcb_surface_set_size (cairo_surface_t *surface, { cairo_xcb_surface_t *xcb_surface = (cairo_xcb_surface_t *)surface; - /* XXX: How do we want to handle this error case? */ - if (! _cairo_surface_is_xcb (surface)) + if (! _cairo_surface_is_xcb (surface)) { + _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_TYPE_MISMATCH); return; + } xcb_surface->width = width; xcb_surface->height = height; diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c index 91bb178a1..3245af6cc 100644 --- a/src/cairo-xlib-surface.c +++ b/src/cairo-xlib-surface.c @@ -1947,18 +1947,20 @@ cairo_xlib_surface_create_with_xrender_format (Display *dpy, * this function on a surface created for a Pixmap. **/ void -cairo_xlib_surface_set_size (cairo_surface_t *surface, +cairo_xlib_surface_set_size (cairo_surface_t *abstract_surface, int width, int height) { - cairo_xlib_surface_t *xlib_surface = (cairo_xlib_surface_t *)surface; + cairo_xlib_surface_t *surface = (cairo_xlib_surface_t *) abstract_surface; - /* XXX: How do we want to handle this error case? */ - if (! _cairo_surface_is_xlib (surface)) + if (! _cairo_surface_is_xlib (abstract_surface)) { + _cairo_surface_set_error (abstract_surface, + CAIRO_STATUS_SURFACE_TYPE_MISMATCH); return; + } - xlib_surface->width = width; - xlib_surface->height = height; + surface->width = width; + surface->height = height; } /** * cairo_xlib_surface_set_drawable: @@ -1982,9 +1984,10 @@ cairo_xlib_surface_set_drawable (cairo_surface_t *abstract_surface, { cairo_xlib_surface_t *surface = (cairo_xlib_surface_t *)abstract_surface; - /* XXX: How do we want to handle this error case? */ - if (! _cairo_surface_is_xlib (abstract_surface)) + if (! _cairo_surface_is_xlib (abstract_surface)) { + _cairo_surface_set_error (abstract_surface, CAIRO_STATUS_SURFACE_TYPE_MISMATCH); return; + } /* XXX: and what about this case? */ if (surface->owns_pixmap) diff --git a/src/cairoint.h b/src/cairoint.h index 65b482ff9..cfa8b7d23 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -1607,6 +1607,10 @@ extern const cairo_private cairo_surface_t _cairo_surface_nil; extern const cairo_private cairo_surface_t _cairo_surface_nil_read_error; extern const cairo_private cairo_surface_t _cairo_surface_nil_file_not_found; +cairo_private void +_cairo_surface_set_error (cairo_surface_t *surface, + cairo_status_t status); + cairo_private cairo_surface_t * _cairo_surface_create_similar_scratch (cairo_surface_t *other, cairo_content_t content, |