diff -r 333589ef694b gfx/cairo/cairo/src/cairo-deprecated.h --- a/gfx/cairo/cairo/src/cairo-deprecated.h Fri Mar 05 02:03:05 2010 -0800 +++ b/gfx/cairo/cairo/src/cairo-deprecated.h Sat Mar 13 22:52:26 2010 +0200 @@ -48,7 +48,7 @@ * completely implemented. So while this format value is currently * deprecated, it may eventually acquire complete support in the future. */ -#define CAIRO_FORMAT_RGB16_565 4 +/* #define CAIRO_FORMAT_RGB16_565 4 */ #define CAIRO_FONT_TYPE_ATSUI CAIRO_FONT_TYPE_QUARTZ diff -r 333589ef694b gfx/cairo/cairo/src/cairo-image-surface.c --- a/gfx/cairo/cairo/src/cairo-image-surface.c Fri Mar 05 02:03:05 2010 -0800 +++ b/gfx/cairo/cairo/src/cairo-image-surface.c Sat Mar 13 22:52:26 2010 +0200 @@ -49,8 +49,10 @@ _cairo_format_from_pixman_format (pixman return CAIRO_FORMAT_A8; case PIXMAN_a1: return CAIRO_FORMAT_A1; + case PIXMAN_r5g6b5: + return CAIRO_FORMAT_RGB16_565; case PIXMAN_a8b8g8r8: case PIXMAN_x8b8g8r8: case PIXMAN_r8g8b8: - case PIXMAN_b8g8r8: case PIXMAN_r5g6b5: case PIXMAN_b5g6r5: + case PIXMAN_b8g8r8: case PIXMAN_b5g6r5: case PIXMAN_a1r5g5b5: case PIXMAN_x1r5g5b5: case PIXMAN_a1b5g5r5: case PIXMAN_x1b5g5r5: case PIXMAN_a4r4g4b4: case PIXMAN_x4r4g4b4: case PIXMAN_a4b4g4r4: case PIXMAN_x4b4g4r4: case PIXMAN_r3g3b2: @@ -306,6 +308,9 @@ _cairo_format_to_pixman_format_code (cai case CAIRO_FORMAT_RGB24: ret = PIXMAN_x8r8g8b8; break; + case CAIRO_FORMAT_RGB16_565: + ret = PIXMAN_r5g6b5; + break; case CAIRO_FORMAT_ARGB32: default: ret = PIXMAN_a8r8g8b8; @@ -671,6 +676,8 @@ _cairo_content_from_format (cairo_format return CAIRO_CONTENT_COLOR_ALPHA; case CAIRO_FORMAT_RGB24: return CAIRO_CONTENT_COLOR; + case CAIRO_FORMAT_RGB16_565: + return CAIRO_CONTENT_COLOR; case CAIRO_FORMAT_A8: case CAIRO_FORMAT_A1: return CAIRO_CONTENT_ALPHA; @@ -688,6 +695,8 @@ _cairo_format_bits_per_pixel (cairo_form return 32; case CAIRO_FORMAT_RGB24: return 32; + case CAIRO_FORMAT_RGB16_565: + return 16; case CAIRO_FORMAT_A8: return 8; case CAIRO_FORMAT_A1: @@ -1601,6 +1610,11 @@ _cairo_image_analyze_transparency (cairo return image->transparency = CAIRO_IMAGE_HAS_ALPHA; } + if (image->format == CAIRO_FORMAT_RGB16_565) { + image->transparency = CAIRO_IMAGE_IS_OPAQUE; + return CAIRO_IMAGE_IS_OPAQUE; + } + if (image->format != CAIRO_FORMAT_ARGB32) return image->transparency = CAIRO_IMAGE_HAS_ALPHA; diff -r 333589ef694b gfx/cairo/cairo/src/cairo-xlib-display.c --- a/gfx/cairo/cairo/src/cairo-xlib-display.c Fri Mar 05 02:03:05 2010 -0800 +++ b/gfx/cairo/cairo/src/cairo-xlib-display.c Sat Mar 13 22:52:26 2010 +0200 @@ -549,11 +549,28 @@ _cairo_xlib_display_get_xrender_format ( pict_format = PictStandardA8; break; case CAIRO_FORMAT_RGB24: pict_format = PictStandardRGB24; break; + case CAIRO_FORMAT_RGB16_565: { + Visual *visual = NULL; + Screen *screen = DefaultScreenOfDisplay(display->display); + int j; + for (j = 0; j < screen->ndepths; j++) { + Depth *d = &screen->depths[j]; + if (d->depth == 16 && d->nvisuals && &d->visuals[0]) { + visual = &d->visuals[0]; + break; + } + } + if (!visual) + return NULL; + xrender_format = XRenderFindVisualFormat(display->display, visual); + break; + } default: ASSERT_NOT_REACHED; case CAIRO_FORMAT_ARGB32: pict_format = PictStandardARGB32; break; } + if (!xrender_format) xrender_format = XRenderFindStandardFormat (display->display, pict_format); display->cached_xrender_formats[format] = xrender_format; diff -r 333589ef694b gfx/cairo/cairo/src/cairo-xlib-private.h --- a/gfx/cairo/cairo/src/cairo-xlib-private.h Fri Mar 05 02:03:05 2010 -0800 +++ b/gfx/cairo/cairo/src/cairo-xlib-private.h Sat Mar 13 22:52:26 2010 +0200 @@ -66,7 +66,7 @@ struct _cairo_xlib_display { int render_major; int render_minor; - XRenderPictFormat *cached_xrender_formats[CAIRO_FORMAT_A1 + 1]; + XRenderPictFormat *cached_xrender_formats[CAIRO_FORMAT_RGB16_565 + 1]; cairo_xlib_job_t *workqueue; cairo_freelist_t wq_freelist; diff -r 333589ef694b gfx/cairo/cairo/src/cairo.h --- a/gfx/cairo/cairo/src/cairo.h Fri Mar 05 02:03:05 2010 -0800 +++ b/gfx/cairo/cairo/src/cairo.h Sat Mar 13 22:52:26 2010 +0200 @@ -2066,11 +2066,8 @@ typedef enum _cairo_format { CAIRO_FORMAT_ARGB32, CAIRO_FORMAT_RGB24, CAIRO_FORMAT_A8, - CAIRO_FORMAT_A1 - /* 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, - */ + CAIRO_FORMAT_A1, + CAIRO_FORMAT_RGB16_565 } cairo_format_t; cairo_public cairo_surface_t * diff -r 333589ef694b gfx/cairo/cairo/src/cairoint.h --- a/gfx/cairo/cairo/src/cairoint.h Fri Mar 05 02:03:05 2010 -0800 +++ b/gfx/cairo/cairo/src/cairoint.h Sat Mar 13 22:52:26 2010 +0200 @@ -2151,7 +2151,7 @@ _cairo_surface_has_device_transform (cai * 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_RGB16_565) /* pixman-required stride alignment in bytes. */ #define CAIRO_STRIDE_ALIGNMENT (sizeof (uint32_t))