summaryrefslogtreecommitdiffstats
path: root/client/windows/red_pixmap_gdi.cpp
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-04-29 13:34:16 +0200
committerAlexander Larsson <alexl@redhat.com>2010-04-29 13:34:16 +0200
commit1e4ec1f513ed7dec51cac42e7cb974ad6c36eb3f (patch)
treefcbf26716384f7b3362a0322cad5d4e08037f7e4 /client/windows/red_pixmap_gdi.cpp
parent7dddbfe488e44e942d26e2c86c1208464b74aa90 (diff)
downloadspice-1e4ec1f513ed7dec51cac42e7cb974ad6c36eb3f.tar.gz
spice-1e4ec1f513ed7dec51cac42e7cb974ad6c36eb3f.tar.xz
spice-1e4ec1f513ed7dec51cac42e7cb974ad6c36eb3f.zip
client: Support 16bpp pixmaps on win32
Diffstat (limited to 'client/windows/red_pixmap_gdi.cpp')
-rw-r--r--client/windows/red_pixmap_gdi.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/client/windows/red_pixmap_gdi.cpp b/client/windows/red_pixmap_gdi.cpp
index b6449b9f..cf8190e0 100644
--- a/client/windows/red_pixmap_gdi.cpp
+++ b/client/windows/red_pixmap_gdi.cpp
@@ -30,9 +30,12 @@ struct RedPixmap_p {
};
RedPixmapGdi::RedPixmapGdi(int width, int height, RedDrawable::Format format, bool top_bottom)
- : RedPixmap(width, height, format, top_bottom )
+ : RedPixmap(width, height, format, top_bottom)
{
- ASSERT(format == RedDrawable::ARGB32 || format == RedDrawable::RGB32 || format == RedDrawable::A1);
+ DWORD *pixel_format;
+ ASSERT(format == RedDrawable::ARGB32 || format == RedDrawable::RGB32
+ || format == RedDrawable::RGB16_555 || format == RedDrawable::RGB16_565
+ || format == RedDrawable::A1);
ASSERT(sizeof(RedPixmap_p) <= PIXELES_SOURCE_OPAQUE_SIZE);
struct {
@@ -47,7 +50,12 @@ RedPixmapGdi::RedPixmapGdi(int width, int height, RedDrawable::Format format, bo
bitmap_info.inf.bmiHeader.biPlanes = 1;
bitmap_info.inf.bmiHeader.biBitCount = RedDrawable::format_to_bpp(format);
- bitmap_info.inf.bmiHeader.biCompression = BI_RGB;
+ if (format == RedDrawable::RGB16_565) {
+ bitmap_info.inf.bmiHeader.biCompression = BI_BITFIELDS;
+
+ } else {
+ bitmap_info.inf.bmiHeader.biCompression = BI_RGB;
+ }
switch (format) {
case RedDrawable::A1:
bitmap_info.inf.bmiColors[0].rgbRed = 0;
@@ -57,7 +65,13 @@ RedPixmapGdi::RedPixmapGdi(int width, int height, RedDrawable::Format format, bo
bitmap_info.inf.bmiColors[1].rgbGreen = 0xff;
bitmap_info.inf.bmiColors[1].rgbBlue = 0xff;
break;
- }
+ case RedDrawable::RGB16_565:
+ pixel_format = (DWORD *)bitmap_info.inf.bmiColors;
+ pixel_format[0] = 0xf800;
+ pixel_format[1] = 0x07e0;
+ pixel_format[2] = 0x001f;
+ break;
+ }
AutoDC dc(create_compatible_dc());
AutoGDIObject bitmap(CreateDIBSection(dc.get(), &bitmap_info.inf, 0,
(VOID **)&_data, NULL, 0));