Commit f3824783 authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

gdi32: Add a solid_rects primitive.

parent 9a7720fc
...@@ -25,6 +25,7 @@ static inline dibdrv_physdev *get_dibdrv_pdev( PHYSDEV dev ) ...@@ -25,6 +25,7 @@ static inline dibdrv_physdev *get_dibdrv_pdev( PHYSDEV dev )
typedef struct primitive_funcs typedef struct primitive_funcs
{ {
void (* solid_rects)(const dib_info *dib, int num, RECT *rc, DWORD and, DWORD xor);
DWORD (* colorref_to_pixel)(const dib_info *dib, COLORREF color); DWORD (* colorref_to_pixel)(const dib_info *dib, COLORREF color);
} primitive_funcs; } primitive_funcs;
......
...@@ -21,6 +21,35 @@ ...@@ -21,6 +21,35 @@
#include "gdi_private.h" #include "gdi_private.h"
#include "dibdrv.h" #include "dibdrv.h"
static inline DWORD *get_pixel_ptr_32(const dib_info *dib, int x, int y)
{
return (DWORD *)((BYTE*)dib->bits + y * dib->stride + x * 4);
}
static inline void do_rop_32(DWORD *ptr, DWORD and, DWORD xor)
{
*ptr = (*ptr & and) ^ xor;
}
static void solid_rects_32(const dib_info *dib, int num, RECT *rc, DWORD and, DWORD xor)
{
DWORD *ptr, *start;
int x, y, i;
for(i = 0; i < num; i++, rc++)
{
start = ptr = get_pixel_ptr_32(dib, rc->left, rc->top);
for(y = rc->top; y < rc->bottom; y++, start += dib->stride / 4)
for(x = rc->left, ptr = start; x < rc->right; x++)
do_rop_32(ptr++, and, xor);
}
}
static void solid_rects_null(const dib_info *dib, int num, RECT *rc, DWORD and, DWORD xor)
{
return;
}
static DWORD colorref_to_pixel_888(const dib_info *dib, COLORREF color) static DWORD colorref_to_pixel_888(const dib_info *dib, COLORREF color)
{ {
return ( ((color >> 16) & 0xff) | (color & 0xff00) | ((color << 16) & 0xff0000) ); return ( ((color >> 16) & 0xff) | (color & 0xff00) | ((color << 16) & 0xff0000) );
...@@ -58,15 +87,18 @@ static DWORD colorref_to_pixel_null(const dib_info *dib, COLORREF color) ...@@ -58,15 +87,18 @@ static DWORD colorref_to_pixel_null(const dib_info *dib, COLORREF color)
const primitive_funcs funcs_8888 = const primitive_funcs funcs_8888 =
{ {
solid_rects_32,
colorref_to_pixel_888 colorref_to_pixel_888
}; };
const primitive_funcs funcs_32 = const primitive_funcs funcs_32 =
{ {
solid_rects_32,
colorref_to_pixel_masks colorref_to_pixel_masks
}; };
const primitive_funcs funcs_null = const primitive_funcs funcs_null =
{ {
solid_rects_null,
colorref_to_pixel_null colorref_to_pixel_null
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment