diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-04-21 12:03:06 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-04-23 16:36:35 +0200 |
commit | 2d6fbde89b08b7dd4a2050c71fe6663ea8e9c2d9 (patch) | |
tree | 7a21036fa2fe975dac3462a075ee968eb3ec267f /client/red_drawable.h | |
parent | 98d91203c5d2f6f7249f38941466857b6a566f5d (diff) | |
download | spice-2d6fbde89b08b7dd4a2050c71fe6663ea8e9c2d9.tar.gz spice-2d6fbde89b08b7dd4a2050c71fe6663ea8e9c2d9.tar.xz spice-2d6fbde89b08b7dd4a2050c71fe6663ea8e9c2d9.zip |
Move RedPixmap::Format to RedDrawable::Format
We need to know the format for other drawables too (like for instance
the native format of a window), so we're pushing this down.
This changes a bunch of references to be RedDrawable::, but not all.
The the old RedPixmap:: references still work, but will be phased out.
Diffstat (limited to 'client/red_drawable.h')
-rw-r--r-- | client/red_drawable.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/client/red_drawable.h b/client/red_drawable.h index b6538f11..5cea85e8 100644 --- a/client/red_drawable.h +++ b/client/red_drawable.h @@ -18,7 +18,9 @@ #ifndef _H_RED_DRAWABLE #define _H_RED_DRAWABLE +#include <pixman_utils.h> #include "pixels_source.h" +#include "utils.h" typedef uint32_t rgb32_t; @@ -47,6 +49,56 @@ public: RedDrawable() {} virtual ~RedDrawable() {} + enum Format { + ARGB32, + RGB32, + RGB16_555, + RGB16_565, + A1, + }; + + static int format_to_bpp(Format format) { + if (format == RedDrawable::A1) { + return 1; + } else if (format == RGB16_555 || format == RGB16_565) { + return 16; + } else { + return 32; + } + } + + static pixman_format_code_t format_to_pixman(Format format) { + switch (format) { + case RedDrawable::ARGB32: + return PIXMAN_a8r8g8b8; + case RedDrawable::RGB32: + return PIXMAN_x8r8g8b8; + case RedDrawable::RGB16_555: + return PIXMAN_x1r5g5b5; + case RedDrawable::RGB16_565: + return PIXMAN_r5g6b5; + case RedDrawable::A1: + return PIXMAN_a1; + default: + THROW("unsupported format %d", format); + } + } + + static Format format_from_surface(uint32_t format) { + switch (format) { + case SPICE_SURFACE_FMT_16_555: + return RedDrawable::RGB16_555; + case SPICE_SURFACE_FMT_16_565: + return RedDrawable::RGB16_565; + case SPICE_SURFACE_FMT_32_xRGB: + return RedDrawable::RGB32; + case SPICE_SURFACE_FMT_32_ARGB: + return RedDrawable::ARGB32; + default: + THROW("Unsupported RedPixman format"); + } + } + enum CombineOP { OP_COPY, OP_AND, |