summaryrefslogtreecommitdiff
path: root/src/win32/cairo-win32-surface.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/win32/cairo-win32-surface.c')
-rw-r--r--[-rwxr-xr-x]src/win32/cairo-win32-surface.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/win32/cairo-win32-surface.c b/src/win32/cairo-win32-surface.c
index 7cd46fc60..e6862bd10 100755..100644
--- a/src/win32/cairo-win32-surface.c
+++ b/src/win32/cairo-win32-surface.c
@@ -172,6 +172,21 @@ cairo_win32_surface_get_dc (cairo_surface_t *surface)
}
/**
+ * _cairo_surface_is_win32:
+ * @surface: a #cairo_surface_t
+ *
+ * Checks if a surface is an #cairo_win32_surface_t
+ *
+ * Return value: %TRUE if the surface is an win32 surface
+ **/
+static inline cairo_bool_t
+_cairo_surface_is_win32 (const cairo_surface_t *surface)
+{
+ /* _cairo_surface_nil sets a NULL backend so be safe */
+ return surface->backend && surface->backend->type == CAIRO_SURFACE_TYPE_WIN32;
+}
+
+/**
* cairo_win32_surface_get_image:
* @surface: a #cairo_surface_t
*
@@ -187,8 +202,10 @@ cairo_win32_surface_get_dc (cairo_surface_t *surface)
cairo_surface_t *
cairo_win32_surface_get_image (cairo_surface_t *surface)
{
- if (surface->backend->type != CAIRO_SURFACE_TYPE_WIN32)
- return NULL;
+
+ if (! _cairo_surface_is_win32 (surface)) {
+ return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
+ }
GdiFlush();
return to_win32_display_surface(surface)->image;