diff options
Diffstat (limited to 'src/win32/cairo-win32-surface.c')
-rw-r--r--[-rwxr-xr-x] | src/win32/cairo-win32-surface.c | 21 |
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; |