summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Hua <william.hua@canonical.com>2015-10-13 10:18:11 +0100
committerWilliam Hua <william.hua@canonical.com>2015-10-14 09:21:41 +0100
commitaf5792f14126382705b2de328e4266f03ad1f824 (patch)
tree0f8fce9bf8bf36d5cfdedddc6e80b428994305cf
parent364732f2e6439d3f2e8c02092d30b7aeac0e5bb8 (diff)
downloadgtk+-af5792f14126382705b2de328e4266f03ad1f824.tar.gz
mir: support more pixel formats
-rw-r--r--gdk/mir/gdkmirdisplay.c23
-rw-r--r--gdk/mir/gdkmirwindowimpl.c37
2 files changed, 50 insertions, 10 deletions
diff --git a/gdk/mir/gdkmirdisplay.c b/gdk/mir/gdkmirdisplay.c
index 6eda3522c6..73f8bcf835 100644
--- a/gdk/mir/gdkmirdisplay.c
+++ b/gdk/mir/gdkmirdisplay.c
@@ -539,12 +539,19 @@ get_pixel_formats (MirConnection *connection,
{
*sw_pixel_format = mir_pixel_format_invalid;
- for (i = 0; i < n_formats; i++)
+ for (i = 0; i < n_formats && *sw_pixel_format == mir_pixel_format_invalid; i++)
{
- if (formats[i] == mir_pixel_format_argb_8888)
+ switch (formats[i])
{
+ case mir_pixel_format_abgr_8888:
+ case mir_pixel_format_xbgr_8888:
+ case mir_pixel_format_argb_8888:
+ case mir_pixel_format_xrgb_8888:
+ case mir_pixel_format_rgb_565:
*sw_pixel_format = formats[i];
break;
+ default:
+ break;
}
}
}
@@ -553,22 +560,20 @@ get_pixel_formats (MirConnection *connection,
{
*hw_pixel_format = mir_pixel_format_invalid;
- for (i = 0; i < n_formats; i++)
+ for (i = 0; i < n_formats && *hw_pixel_format == mir_pixel_format_invalid; i++)
{
switch (formats[i])
- {
+ {
case mir_pixel_format_abgr_8888:
case mir_pixel_format_xbgr_8888:
case mir_pixel_format_argb_8888:
case mir_pixel_format_xrgb_8888:
+ case mir_pixel_format_rgb_565:
*hw_pixel_format = formats[i];
break;
default:
- continue;
- }
-
- if (*hw_pixel_format != mir_pixel_format_invalid)
- break;
+ break;
+ }
}
}
}
diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c
index 9b3a249e54..05bec83d4d 100644
--- a/gdk/mir/gdkmirwindowimpl.c
+++ b/gdk/mir/gdkmirwindowimpl.c
@@ -423,7 +423,42 @@ gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window)
ensure_surface (window);
mir_buffer_stream_get_graphics_region (mir_surface_get_buffer_stream (impl->surface), &region);
- g_assert (region.pixel_format == mir_pixel_format_argb_8888);
+
+ switch (region.pixel_format)
+ {
+ case mir_pixel_format_abgr_8888:
+ g_warning ("pixel format ABGR 8888 not supported, using ARGB 8888");
+ pixel_format = CAIRO_FORMAT_ARGB32;
+ break;
+ case mir_pixel_format_xbgr_8888:
+ g_warning ("pixel format XBGR 8888 not supported, using XRGB 8888");
+ pixel_format = CAIRO_FORMAT_RGB24;
+ break;
+ case mir_pixel_format_argb_8888:
+ pixel_format = CAIRO_FORMAT_ARGB32;
+ break;
+ case mir_pixel_format_xrgb_8888:
+ pixel_format = CAIRO_FORMAT_RGB24;
+ break;
+ case mir_pixel_format_bgr_888:
+ g_error ("pixel format BGR 888 not supported");
+ break;
+ case mir_pixel_format_rgb_888:
+ g_error ("pixel format RGB 888 not supported");
+ break;
+ case mir_pixel_format_rgb_565:
+ pixel_format = CAIRO_FORMAT_RGB16_565;
+ break;
+ case mir_pixel_format_rgba_5551:
+ g_error ("pixel format RGBA 5551 not supported");
+ break;
+ case mir_pixel_format_rgba_4444:
+ g_error ("pixel format RGBA 4444 not supported");
+ break;
+ default:
+ g_error ("unknown pixel format");
+ break;
+ }
cairo_surface = cairo_image_surface_create_for_data ((unsigned char *) region.vaddr,
pixel_format,