api: Introduce CAIRO_FORMAT_INVALID formally in the API.

We were exposing the actual value of CAIRO_FORMAT_INVALID
through API functions already, so it makes sense to just
go ahead and put it in the cairo_format_t enum.
This commit is contained in:
M Joonas Pihlaja 2010-02-28 23:31:06 +02:00
parent 620cd9c2be
commit 5b7f4bb241
24 changed files with 88 additions and 43 deletions

View file

@ -115,7 +115,7 @@ cairo_boilerplate_format_from_content (cairo_content_t content)
case CAIRO_CONTENT_ALPHA: format = CAIRO_FORMAT_A8; break;
default:
assert (0); /* not reached */
format = (cairo_format_t) -1;
format = CAIRO_FORMAT_INVALID;
break;
}

View file

@ -110,6 +110,7 @@ _cairo_debug_check_image_surface_is_defined (const cairo_surface_t *surface)
case CAIRO_FORMAT_ARGB32:
width = image->width*4;
break;
case CAIRO_FORMAT_INVALID:
default:
/* XXX compute width from pixman bpp */
return;

View file

@ -164,6 +164,9 @@ cairo_gl_context_get_glyph_cache (cairo_gl_context_t *ctx,
cache = &ctx->glyph_cache[1];
format = CAIRO_FORMAT_A8;
break;
case CAIRO_FORMAT_INVALID:
ASSERT_NOT_REACHED;
return NULL;
}
if (unlikely (cache->tex == 0)) {
@ -182,6 +185,9 @@ cairo_gl_context_get_glyph_cache (cairo_gl_context_t *ctx,
case CAIRO_FORMAT_A8:
internal_format = GL_ALPHA;
break;
case CAIRO_FORMAT_INVALID:
ASSERT_NOT_REACHED;
return NULL;
}
glGenTextures (1, &cache->tex);

View file

@ -277,6 +277,7 @@ _cairo_format_to_pixman_format_code (cairo_format_t format)
ret = PIXMAN_x8r8g8b8;
break;
case CAIRO_FORMAT_ARGB32:
case CAIRO_FORMAT_INVALID:
default:
ret = PIXMAN_a8r8g8b8;
break;
@ -626,7 +627,7 @@ _cairo_format_from_content (cairo_content_t content)
}
ASSERT_NOT_REACHED;
return CAIRO_FORMAT_ARGB32;
return CAIRO_FORMAT_INVALID;
}
cairo_content_t
@ -640,6 +641,8 @@ _cairo_content_from_format (cairo_format_t format)
case CAIRO_FORMAT_A8:
case CAIRO_FORMAT_A1:
return CAIRO_CONTENT_ALPHA;
case CAIRO_FORMAT_INVALID:
break;
}
ASSERT_NOT_REACHED;
@ -658,6 +661,7 @@ _cairo_format_bits_per_pixel (cairo_format_t format)
return 8;
case CAIRO_FORMAT_A1:
return 1;
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
return 0;

View file

@ -230,6 +230,7 @@ write_png (cairo_surface_t *surface,
png_set_packswap (png);
#endif
break;
case CAIRO_FORMAT_INVALID:
default:
status = _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
goto BAIL4;

View file

@ -2146,6 +2146,7 @@ _cairo_scaled_font_show_glyphs (cairo_scaled_font_t *scaled_font,
mask_format = glyph_surface->format;
break;
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
mask_format = CAIRO_FORMAT_ARGB32;

View file

@ -817,14 +817,15 @@ _emit_stroke_style (cairo_script_surface_t *surface,
static const char *
_format_to_string (cairo_format_t format)
{
static const char *names[] = {
"ARGB32", /* CAIRO_FORMAT_ARGB32 */
"RGB24", /* CAIRO_FORMAT_RGB24 */
"A8", /* CAIRO_FORMAT_A8 */
"A1" /* CAIRO_FORMAT_A1 */
};
assert (format < ARRAY_LENGTH (names));
return names[format];
switch (format) {
case CAIRO_FORMAT_ARGB32: return "ARGB32";
case CAIRO_FORMAT_RGB24: return "RGB24";
case CAIRO_FORMAT_A8: return "A8";
case CAIRO_FORMAT_A1: return "A1";
case CAIRO_FORMAT_INVALID: return "INVALID";
}
ASSERT_NOT_REACHED;
return "INVALID";
}
static cairo_status_t
@ -1057,6 +1058,7 @@ _write_image_surface (cairo_output_stream_t *output,
data += stride;
}
break;
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
break;
@ -1110,6 +1112,7 @@ _write_image_surface (cairo_output_stream_t *output,
data += stride;
}
break;
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
break;
@ -1230,6 +1233,9 @@ _emit_image_surface (cairo_script_surface_t *surface,
case CAIRO_FORMAT_ARGB32:
len = clone->width * 4;
break;
case CAIRO_FORMAT_INVALID:
ASSERT_NOT_REACHED;
break;
}
len *= clone->height;

View file

@ -176,6 +176,9 @@ _create_dc_and_bitmap (cairo_win32_surface_t *surface,
surface->is_dib = FALSE;
switch (format) {
default:
case CAIRO_FORMAT_INVALID:
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
case CAIRO_FORMAT_ARGB32:
case CAIRO_FORMAT_RGB24:
num_palette = 0;
@ -337,6 +340,9 @@ _cairo_win32_surface_create_for_dc (HDC original_dc,
unsigned char *bits;
int rowstride;
if (! CAIRO_FORMAT_VALID (format))
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
surface = malloc (sizeof (cairo_win32_surface_t));
if (surface == NULL)
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));

View file

@ -3829,6 +3829,7 @@ _cairo_xcb_scaled_font_get_glyphset_info_for_format (cairo_scaled_font_t *scaled
switch (format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_ARGB32: glyphset_index = GLYPHSET_INDEX_ARGB32; break;
case CAIRO_FORMAT_A8: glyphset_index = GLYPHSET_INDEX_A8; break;
@ -3892,6 +3893,7 @@ _cairo_xcb_scaled_font_get_glyphset_info_for_pending_free_glyph (
if (surface != NULL) {
switch (surface->format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_ARGB32: i = GLYPHSET_INDEX_ARGB32; break;
case CAIRO_FORMAT_A8: i = GLYPHSET_INDEX_A8; break;
@ -4058,6 +4060,7 @@ _cairo_xcb_surface_add_glyph (cairo_xcb_connection_t *connection,
break;
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
break;

View file

@ -591,6 +591,7 @@ _cairo_xlib_display_get_xrender_format (cairo_xlib_display_t *display,
pict_format = PictStandardA8; break;
case CAIRO_FORMAT_RGB24:
pict_format = PictStandardRGB24; break;
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
case CAIRO_FORMAT_ARGB32:

View file

@ -3749,6 +3749,7 @@ _cairo_xlib_scaled_font_get_glyphset_info_for_format (cairo_scaled_font_t *scale
switch (format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_ARGB32: glyphset_index = GLYPHSET_INDEX_ARGB32; break;
case CAIRO_FORMAT_A8: glyphset_index = GLYPHSET_INDEX_A8; break;
@ -3810,6 +3811,7 @@ _cairo_xlib_scaled_font_get_glyphset_info_for_pending_free_glyph (
if (surface != NULL) {
switch (surface->format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_ARGB32: i = GLYPHSET_INDEX_ARGB32; break;
case CAIRO_FORMAT_A8: i = GLYPHSET_INDEX_A8; break;
@ -3999,6 +4001,7 @@ _cairo_xlib_surface_add_glyph (Display *dpy,
}
break;
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_INVALID:
default:
ASSERT_NOT_REACHED;
break;

View file

@ -71,17 +71,6 @@ slim_hidden_proto (cairo_xml_for_recording_surface);
static const cairo_surface_backend_t _cairo_xml_surface_backend;
static const char *
_direction_to_string (cairo_bool_t backward)
{
static const char *names[] = {
"FORWARD",
"BACKWARD"
};
assert (backward < ARRAY_LENGTH (names));
return names[backward];
}
static const char *
_operator_to_string (cairo_operator_t op)
{
@ -214,14 +203,15 @@ _content_to_string (cairo_content_t content)
static const char *
_format_to_string (cairo_format_t format)
{
static const char *names[] = {
"ARGB32", /* CAIRO_FORMAT_ARGB32 */
"RGB24", /* CAIRO_FORMAT_RGB24 */
"A8", /* CAIRO_FORMAT_A8 */
"A1" /* CAIRO_FORMAT_A1 */
};
assert (format < ARRAY_LENGTH (names));
return names[format];
switch (format) {
case CAIRO_FORMAT_ARGB32: return "ARGB32";
case CAIRO_FORMAT_RGB24: return "RGB24";
case CAIRO_FORMAT_A8: return "A8";
case CAIRO_FORMAT_A1: return "A1";
case CAIRO_FORMAT_INVALID: return "INVALID";
}
ASSERT_NOT_REACHED;
return "INVALID";
}
static void

View file

@ -2231,6 +2231,7 @@ cairo_surface_has_show_text_glyphs (cairo_surface_t *surface);
/**
* cairo_format_t:
* @CAIRO_FORMAT_INVALID: no such format exists or is supported.
* @CAIRO_FORMAT_ARGB32: each pixel is a 32-bit quantity, with
* alpha in the upper 8 bits, then red, then green, then blue.
* The 32-bit quantities are stored native-endian. Pre-multiplied
@ -2257,10 +2258,11 @@ cairo_surface_has_show_text_glyphs (cairo_surface_t *surface);
* New entries may be added in future versions.
**/
typedef enum _cairo_format {
CAIRO_FORMAT_ARGB32,
CAIRO_FORMAT_RGB24,
CAIRO_FORMAT_A8,
CAIRO_FORMAT_A1
CAIRO_FORMAT_INVALID = -1,
CAIRO_FORMAT_ARGB32 = 0,
CAIRO_FORMAT_RGB24 = 1,
CAIRO_FORMAT_A8 = 2,
CAIRO_FORMAT_A1 = 3
/* The value of 4 is reserved by a deprecated enum value.
* The next format added must have an explicit value of 5.
CAIRO_FORMAT_RGB16_565 = 4,

View file

@ -2148,8 +2148,8 @@ _cairo_surface_has_device_transform (cairo_surface_t *surface) cairo_pure;
* to support it (at least cairo_surface_write_to_png() and a few spots
* in cairo-xlib-surface.c--again see -Wswitch-enum).
*/
#define CAIRO_FORMAT_INVALID ((unsigned int) -1)
#define CAIRO_FORMAT_VALID(format) ((format) <= CAIRO_FORMAT_A1)
#define CAIRO_FORMAT_VALID(format) ((format) >= CAIRO_FORMAT_ARGB32 && \
(format) <= CAIRO_FORMAT_A1)
/* pixman-required stride alignment in bytes. */
#define CAIRO_STRIDE_ALIGNMENT (sizeof (uint32_t))

View file

@ -522,6 +522,7 @@ gallium_surface_create_for_name (cairo_drm_device_t *base_dev,
switch (format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_A1:
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
case CAIRO_FORMAT_A8:

View file

@ -1594,6 +1594,7 @@ i915_buffer_cache_init (intel_buffer_cache_t *cache,
cache->buffer.height = height;
switch (format) {
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_A1:
case CAIRO_FORMAT_RGB24:
ASSERT_NOT_REACHED;

View file

@ -349,7 +349,7 @@ intel_surface_create_for_name (cairo_drm_device_t *device,
cairo_status_t status;
switch (format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_A1:
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
case CAIRO_FORMAT_ARGB32:

View file

@ -708,7 +708,6 @@ intel_bo_put_image (intel_device_t *dev,
offset = dst_y * stride;
data = src->data + src_y * src->stride;
switch (src->format) {
default:
case CAIRO_FORMAT_ARGB32:
case CAIRO_FORMAT_RGB24:
offset += 4 * dst_x;
@ -726,6 +725,8 @@ intel_bo_put_image (intel_device_t *dev,
src_x, src_y,
width, height,
dst_x, dst_y);
default:
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
}
if (bo->tiling == I915_TILING_NONE) {
@ -1016,8 +1017,6 @@ intel_glyph_cache_add_glyph (intel_device_t *device,
}
break;
default:
ASSERT_NOT_REACHED;
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_ARGB32:
dst += 4*node->x;
@ -1028,6 +1027,9 @@ intel_glyph_cache_add_glyph (intel_device_t *device,
src += glyph_surface->stride;
}
break;
default:
ASSERT_NOT_REACHED;
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
}
/* leave mapped! */
@ -1113,6 +1115,7 @@ intel_get_glyph_cache (intel_device_t *device,
break;
default:
ASSERT_NOT_REACHED;
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
}
if (unlikely (cache->buffer.bo == NULL)) {
@ -1227,7 +1230,9 @@ intel_buffer_cache_init (intel_buffer_cache_t *cache,
switch (format) {
case CAIRO_FORMAT_A1:
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_INVALID:
ASSERT_NOT_REACHED;
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT);
case CAIRO_FORMAT_ARGB32:
cache->buffer.map0 = MAPSURF_32BIT | MT_32BIT_ARGB8888;
cache->buffer.stride = width * 4;

View file

@ -367,7 +367,7 @@ radeon_surface_create_for_name (cairo_drm_device_t *device,
cairo_content_t content;
switch (format) {
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_A1:
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT));
case CAIRO_FORMAT_ARGB32:

View file

@ -191,6 +191,7 @@ write_ppm (cairo_surface_t *surface, int fd)
format_str = "P5";
break;
case CAIRO_FORMAT_A1:
case CAIRO_FORMAT_INVALID:
default:
return "unhandled image format";
}

View file

@ -57,6 +57,7 @@ format_to_string (cairo_format_t format)
case CAIRO_FORMAT_A8: return "a8";
case CAIRO_FORMAT_RGB24: return "rgb24";
case CAIRO_FORMAT_ARGB32: return "argb32";
case CAIRO_FORMAT_INVALID:
default: return "???";
}
}

View file

@ -2844,6 +2844,7 @@ _image_read_raw (csi_file_t *src,
len = 3 * width * height;
break;
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32:
len = 4 * width * height;
break;
@ -2894,6 +2895,7 @@ _image_read_raw (csi_file_t *src,
#endif
}
break;
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32:
/* stride == width */
break;
@ -2968,6 +2970,7 @@ _image_read_raw (csi_file_t *src,
#endif
}
break;
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32:
/* stride == width */
break;
@ -2994,6 +2997,7 @@ _image_read_raw (csi_file_t *src,
break;
case CAIRO_FORMAT_RGB24:
case CAIRO_FORMAT_INVALID:
default:
break;
}
@ -6140,6 +6144,7 @@ _integer_constants[] = {
{ "A8", CAIRO_FORMAT_A8 },
{ "RGB24", CAIRO_FORMAT_RGB24 },
{ "ARGB32", CAIRO_FORMAT_ARGB32 },
{ "INVALID", CAIRO_FORMAT_INVALID },
{ NULL, 0 }
};

View file

@ -618,6 +618,9 @@ compare_images (cairo_surface_t *a,
bb += stride;
}
break;
case CAIRO_FORMAT_INVALID:
break;
}
return TRUE;
@ -831,7 +834,7 @@ request_image (struct client *c,
unsigned long offset = -1;
int len;
assert (format != (cairo_format_t) -1);
assert (format != CAIRO_FORMAT_INVALID);
len = sprintf (buf, ".image %lu %d %d %d %d\n",
closure->id, format, width, height, stride);
@ -900,14 +903,14 @@ send_surface (struct client *c,
{
cairo_surface_t *source = closure->surface;
cairo_surface_t *image;
cairo_format_t format = (cairo_format_t) -1;
cairo_format_t format = CAIRO_FORMAT_INVALID;
cairo_t *cr;
int width, height, stride;
void *data;
unsigned long serial;
get_surface_size (source, &width, &height, &format);
if (format == (cairo_format_t) -1)
if (format == CAIRO_FORMAT_INVALID)
format = format_for_content (cairo_surface_get_content (source));
stride = cairo_format_stride_for_width (format, width);

View file

@ -1439,6 +1439,7 @@ _format_to_string (cairo_format_t format)
{
#define f(name) case CAIRO_FORMAT_ ## name: return #name
switch (format) {
f(INVALID);
f(ARGB32);
f(RGB24);
f(A8);
@ -1570,6 +1571,7 @@ _emit_image (cairo_surface_t *image,
case CAIRO_FORMAT_A8: len = width; break;
case CAIRO_FORMAT_RGB24: len = 3*width; break;
default:
case CAIRO_FORMAT_INVALID:
case CAIRO_FORMAT_ARGB32: len = 4*width; break;
}
@ -1607,6 +1609,7 @@ _emit_image (cairo_surface_t *image,
data += stride;
}
break;
case CAIRO_FORMAT_INVALID:
default:
break;
}
@ -1659,6 +1662,7 @@ _emit_image (cairo_surface_t *image,
data += stride;
}
break;
case CAIRO_FORMAT_INVALID:
default:
break;
}