summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2006-05-01 15:44:58 -0700
committerCarl Worth <cworth@cworth.org>2006-05-02 11:38:28 -0700
commit41e288a88023cac9ced77099bceced41cf526a99 (patch)
treeee9933ab3326db8978285a1d2c2f3208b003a282
parent0e4527c67e623801544be05de32f21a0c10e5b5d (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.c2
-rw-r--r--src/cairo-xcb-surface.c5
-rw-r--r--src/cairo-xlib-surface.c19
-rw-r--r--src/cairoint.h4
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,