diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2008-01-16 16:23:23 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2008-01-16 16:51:32 +0000 |
commit | 7111b18c27d7ee0439339a6aa72f0e4244f883f9 (patch) | |
tree | 162d5cf10b629ded2a44f8bb1cc64e4671a58cc7 /src/cairo-win32-surface.c | |
parent | 5cbc45488e276cb6e6ecfa7bc7dd4fae342de85e (diff) |
[cairo-surface] Introduce _cairo_surface_create_in_error().
Unexport all the static error surfaces and use a function to select
the appropriate error surface for the status.
Diffstat (limited to 'src/cairo-win32-surface.c')
-rw-r--r-- | src/cairo-win32-surface.c | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c index 2342230d..881532b6 100644 --- a/src/cairo-win32-surface.c +++ b/src/cairo-win32-surface.c @@ -67,7 +67,6 @@ #endif #define PELS_72DPI ((LONG)(72. / 0.0254)) -#define NIL_SURFACE ((cairo_surface_t*)&_cairo_surface_nil) static const cairo_surface_backend_t cairo_win32_surface_backend; @@ -333,10 +332,8 @@ _cairo_win32_surface_create_for_dc (HDC original_dc, int rowstride; surface = malloc (sizeof (cairo_win32_surface_t)); - if (surface == NULL) { - _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); - return NIL_SURFACE; - } + if (surface == NULL) + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); status = _create_dc_and_bitmap (surface, original_dc, format, width, height, @@ -346,10 +343,9 @@ _cairo_win32_surface_create_for_dc (HDC original_dc, surface->image = cairo_image_surface_create_for_data (bits, format, width, height, rowstride); - if (surface->image->status) { - status = _cairo_error (CAIRO_STATUS_NO_MEMORY); + status = surface->image->status; + if (status) goto FAIL; - } surface->format = format; @@ -365,7 +361,7 @@ _cairo_win32_surface_create_for_dc (HDC original_dc, _cairo_surface_init (&surface->base, &cairo_win32_surface_backend, _cairo_content_from_format (format)); - return (cairo_surface_t *)surface; + return &surface->base; FAIL: if (surface->bitmap) { @@ -373,10 +369,9 @@ _cairo_win32_surface_create_for_dc (HDC original_dc, DeleteObject (surface->bitmap); DeleteDC (surface->dc); } - if (surface) - free (surface); + free (surface); - return NIL_SURFACE; + return _cairo_surface_create_in_error (status); } static cairo_surface_t * @@ -1720,8 +1715,7 @@ cairo_win32_surface_create (HDC hdc) if (clipBoxType == ERROR) { _cairo_win32_print_gdi_error ("cairo_win32_surface_create"); /* XXX: Can we make a more reasonable guess at the error cause here? */ - _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); - return NIL_SURFACE; + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } if (GetDeviceCaps(hdc, TECHNOLOGY) == DT_RASDISPLAY) { @@ -1738,18 +1732,15 @@ cairo_win32_surface_create (HDC hdc) format = CAIRO_FORMAT_A1; else { _cairo_win32_print_gdi_error("cairo_win32_surface_create(bad BITSPIXEL)"); - _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); - return NIL_SURFACE; + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT)); } } else { format = CAIRO_FORMAT_RGB24; } surface = malloc (sizeof (cairo_win32_surface_t)); - if (surface == NULL) { - _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); - return NIL_SURFACE; - } + if (surface == NULL) + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); surface->image = NULL; surface->format = format; @@ -1837,7 +1828,7 @@ cairo_win32_surface_create_with_ddb (HDC hdc, HBITMAP saved_dc_bitmap; if (format != CAIRO_FORMAT_RGB24) - return NIL_SURFACE; + return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT)); /* XXX handle these eventually format != CAIRO_FORMAT_A8 || format != CAIRO_FORMAT_A1) @@ -1853,7 +1844,7 @@ cairo_win32_surface_create_with_ddb (HDC hdc, ddb_dc = CreateCompatibleDC (hdc); if (ddb_dc == NULL) { _cairo_win32_print_gdi_error("CreateCompatibleDC"); - new_surf = (cairo_win32_surface_t*) NIL_SURFACE; + new_surf = (cairo_win32_surface_t*) _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); goto FINISH; } @@ -1866,7 +1857,7 @@ cairo_win32_surface_create_with_ddb (HDC hdc, * video memory is probably exhausted. */ _cairo_win32_print_gdi_error("CreateCompatibleBitmap"); - new_surf = (cairo_win32_surface_t*) NIL_SURFACE; + new_surf = (cairo_win32_surface_t*) _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); goto FINISH; } |