Huw Davies : gdi32: Add pixel_to_colorref primitives.
Alexandre Julliard
julliard at winehq.org
Wed Oct 19 14:05:25 CDT 2011
Module: wine
Branch: master
Commit: ddbaa9491a7953886d1b5d4c9b671a0048e61eb2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ddbaa9491a7953886d1b5d4c9b671a0048e61eb2
Author: Huw Davies <huw at codeweavers.com>
Date: Wed Oct 19 12:41:54 2011 +0100
gdi32: Add pixel_to_colorref primitives.
---
dlls/gdi32/dibdrv/dibdrv.h | 1 +
dlls/gdi32/dibdrv/primitives.c | 40 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/dibdrv/dibdrv.h b/dlls/gdi32/dibdrv/dibdrv.h
index 6d96e77..b23e931 100644
--- a/dlls/gdi32/dibdrv/dibdrv.h
+++ b/dlls/gdi32/dibdrv/dibdrv.h
@@ -145,6 +145,7 @@ typedef struct primitive_funcs
void (* blend_rect)(const dib_info *dst, const RECT *rc, const dib_info *src,
const POINT *origin, BLENDFUNCTION blend);
DWORD (* colorref_to_pixel)(const dib_info *dib, COLORREF color);
+ COLORREF (* pixel_to_colorref)(const dib_info *dib, DWORD pixel);
void (* convert_to)(dib_info *dst, const dib_info *src, const RECT *src_rect);
BOOL (* create_rop_masks)(const dib_info *dib, const dib_info *hatch,
const rop_mask *fg, const rop_mask *bg, rop_mask_bits *bits);
diff --git a/dlls/gdi32/dibdrv/primitives.c b/dlls/gdi32/dibdrv/primitives.c
index 7477a79..594d05d 100644
--- a/dlls/gdi32/dibdrv/primitives.c
+++ b/dlls/gdi32/dibdrv/primitives.c
@@ -1132,6 +1132,37 @@ static inline RGBQUAD colortable_entry(const dib_info *dib, DWORD index)
return default_rgb;
}
+static COLORREF pixel_to_colorref_888(const dib_info *dib, DWORD pixel)
+{
+ return ( ((pixel >> 16) & 0xff) | (pixel & 0xff00) | ((pixel << 16) & 0xff0000) );
+}
+
+static COLORREF pixel_to_colorref_masks(const dib_info *dib, DWORD pixel)
+{
+ return RGB( get_field( pixel, dib->red_shift, dib->red_len ),
+ get_field( pixel, dib->green_shift, dib->green_len ),
+ get_field( pixel, dib->blue_shift, dib->blue_len ) );
+}
+
+static COLORREF pixel_to_colorref_555(const dib_info *dib, DWORD pixel)
+{
+ return RGB( ((pixel >> 7) & 0xf8) | ((pixel >> 12) & 0x07),
+ ((pixel >> 2) & 0xf8) | ((pixel >> 7) & 0x07),
+ ((pixel << 3) & 0xf8) | ((pixel >> 2) & 0x07) );
+}
+
+static COLORREF pixel_to_colorref_colortable(const dib_info *dib, DWORD pixel)
+{
+ RGBQUAD quad = colortable_entry( dib, pixel );
+
+ return RGB( quad.rgbRed, quad.rgbGreen, quad.rgbBlue );
+}
+
+static COLORREF pixel_to_colorref_null(const dib_info *dib, DWORD pixel)
+{
+ return 0;
+}
+
static inline BOOL bit_fields_match(const dib_info *d1, const dib_info *d2)
{
assert( d1->bit_count > 8 && d1->bit_count == d2->bit_count );
@@ -4320,6 +4351,7 @@ const primitive_funcs funcs_8888 =
copy_rect_32,
blend_rect_8888,
colorref_to_pixel_888,
+ pixel_to_colorref_888,
convert_to_8888,
create_rop_masks_32,
stretch_row_32,
@@ -4333,6 +4365,7 @@ const primitive_funcs funcs_32 =
copy_rect_32,
blend_rect_32,
colorref_to_pixel_masks,
+ pixel_to_colorref_masks,
convert_to_32,
create_rop_masks_32,
stretch_row_32,
@@ -4346,6 +4379,7 @@ const primitive_funcs funcs_24 =
copy_rect_24,
blend_rect_24,
colorref_to_pixel_888,
+ pixel_to_colorref_888,
convert_to_24,
create_rop_masks_24,
stretch_row_24,
@@ -4359,6 +4393,7 @@ const primitive_funcs funcs_555 =
copy_rect_16,
blend_rect_555,
colorref_to_pixel_555,
+ pixel_to_colorref_555,
convert_to_555,
create_rop_masks_16,
stretch_row_16,
@@ -4372,6 +4407,7 @@ const primitive_funcs funcs_16 =
copy_rect_16,
blend_rect_16,
colorref_to_pixel_masks,
+ pixel_to_colorref_masks,
convert_to_16,
create_rop_masks_16,
stretch_row_16,
@@ -4385,6 +4421,7 @@ const primitive_funcs funcs_8 =
copy_rect_8,
blend_rect_8,
colorref_to_pixel_colortable,
+ pixel_to_colorref_colortable,
convert_to_8,
create_rop_masks_8,
stretch_row_8,
@@ -4398,6 +4435,7 @@ const primitive_funcs funcs_4 =
copy_rect_4,
blend_rect_4,
colorref_to_pixel_colortable,
+ pixel_to_colorref_colortable,
convert_to_4,
create_rop_masks_4,
stretch_row_4,
@@ -4411,6 +4449,7 @@ const primitive_funcs funcs_1 =
copy_rect_1,
blend_rect_1,
colorref_to_pixel_colortable,
+ pixel_to_colorref_colortable,
convert_to_1,
create_rop_masks_1,
stretch_row_1,
@@ -4424,6 +4463,7 @@ const primitive_funcs funcs_null =
copy_rect_null,
blend_rect_null,
colorref_to_pixel_null,
+ pixel_to_colorref_null,
convert_to_null,
create_rop_masks_null,
stretch_row_null,
More information about the wine-cvs
mailing list