Commit db3a8d6c authored by Alexandre Julliard's avatar Alexandre Julliard

gdi32: Avoid binary ROPs when shrinking in DELETESCANS mode.

parent 6f6e919e
...@@ -5950,6 +5950,23 @@ static void shrink_row_32(const dib_info *dst_dib, const POINT *dst_start, ...@@ -5950,6 +5950,23 @@ static void shrink_row_32(const dib_info *dst_dib, const POINT *dst_start,
DWORD *src_ptr = get_pixel_ptr_32( src_dib, src_start->x, src_start->y ); DWORD *src_ptr = get_pixel_ptr_32( src_dib, src_start->x, src_start->y );
int err = params->err_start; int err = params->err_start;
int width; int width;
if (mode == STRETCH_DELETESCANS)
{
for (width = params->length; width; width--)
{
*dst_ptr = *src_ptr;
src_ptr += params->src_inc;
if (err > 0)
{
dst_ptr += params->dst_inc;
err += params->err_add_1;
}
else err += params->err_add_2;
}
}
else
{
struct rop_codes codes; struct rop_codes codes;
DWORD init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u; DWORD init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u;
BOOL new_pix = TRUE; BOOL new_pix = TRUE;
...@@ -5969,6 +5986,7 @@ static void shrink_row_32(const dib_info *dst_dib, const POINT *dst_start, ...@@ -5969,6 +5986,7 @@ static void shrink_row_32(const dib_info *dst_dib, const POINT *dst_start,
} }
else err += params->err_add_2; else err += params->err_add_2;
} }
}
} }
static void shrink_row_24(const dib_info *dst_dib, const POINT *dst_start, static void shrink_row_24(const dib_info *dst_dib, const POINT *dst_start,
...@@ -5980,6 +5998,25 @@ static void shrink_row_24(const dib_info *dst_dib, const POINT *dst_start, ...@@ -5980,6 +5998,25 @@ static void shrink_row_24(const dib_info *dst_dib, const POINT *dst_start,
BYTE *src_ptr = get_pixel_ptr_24( src_dib, src_start->x, src_start->y ); BYTE *src_ptr = get_pixel_ptr_24( src_dib, src_start->x, src_start->y );
int err = params->err_start; int err = params->err_start;
int width; int width;
if (mode == STRETCH_DELETESCANS)
{
for (width = params->length; width; width--)
{
dst_ptr[0] = src_ptr[0];
dst_ptr[1] = src_ptr[1];
dst_ptr[2] = src_ptr[2];
src_ptr += 3 * params->src_inc;
if (err > 0)
{
dst_ptr += 3 * params->dst_inc;
err += params->err_add_1;
}
else err += params->err_add_2;
}
}
else
{
struct rop_codes codes; struct rop_codes codes;
BYTE init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u; BYTE init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u;
BOOL new_pix = TRUE; BOOL new_pix = TRUE;
...@@ -6001,6 +6038,7 @@ static void shrink_row_24(const dib_info *dst_dib, const POINT *dst_start, ...@@ -6001,6 +6038,7 @@ static void shrink_row_24(const dib_info *dst_dib, const POINT *dst_start,
} }
else err += params->err_add_2; else err += params->err_add_2;
} }
}
} }
static void shrink_row_16(const dib_info *dst_dib, const POINT *dst_start, static void shrink_row_16(const dib_info *dst_dib, const POINT *dst_start,
...@@ -6012,6 +6050,23 @@ static void shrink_row_16(const dib_info *dst_dib, const POINT *dst_start, ...@@ -6012,6 +6050,23 @@ static void shrink_row_16(const dib_info *dst_dib, const POINT *dst_start,
WORD *src_ptr = get_pixel_ptr_16( src_dib, src_start->x, src_start->y ); WORD *src_ptr = get_pixel_ptr_16( src_dib, src_start->x, src_start->y );
int err = params->err_start; int err = params->err_start;
int width; int width;
if (mode == STRETCH_DELETESCANS)
{
for (width = params->length; width; width--)
{
*dst_ptr = *src_ptr;
src_ptr += params->src_inc;
if (err > 0)
{
dst_ptr += params->dst_inc;
err += params->err_add_1;
}
else err += params->err_add_2;
}
}
else
{
struct rop_codes codes; struct rop_codes codes;
WORD init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u; WORD init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u;
BOOL new_pix = TRUE; BOOL new_pix = TRUE;
...@@ -6031,6 +6086,7 @@ static void shrink_row_16(const dib_info *dst_dib, const POINT *dst_start, ...@@ -6031,6 +6086,7 @@ static void shrink_row_16(const dib_info *dst_dib, const POINT *dst_start,
} }
else err += params->err_add_2; else err += params->err_add_2;
} }
}
} }
static void shrink_row_8(const dib_info *dst_dib, const POINT *dst_start, static void shrink_row_8(const dib_info *dst_dib, const POINT *dst_start,
...@@ -6042,6 +6098,23 @@ static void shrink_row_8(const dib_info *dst_dib, const POINT *dst_start, ...@@ -6042,6 +6098,23 @@ static void shrink_row_8(const dib_info *dst_dib, const POINT *dst_start,
BYTE *src_ptr = get_pixel_ptr_8( src_dib, src_start->x, src_start->y ); BYTE *src_ptr = get_pixel_ptr_8( src_dib, src_start->x, src_start->y );
int err = params->err_start; int err = params->err_start;
int width; int width;
if (mode == STRETCH_DELETESCANS)
{
for (width = params->length; width; width--)
{
*dst_ptr = *src_ptr;
src_ptr += params->src_inc;
if (err > 0)
{
dst_ptr += params->dst_inc;
err += params->err_add_1;
}
else err += params->err_add_2;
}
}
else
{
struct rop_codes codes; struct rop_codes codes;
BYTE init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u; BYTE init_val = (mode == STRETCH_ANDSCANS) ? ~0u : 0u;
BOOL new_pix = TRUE; BOOL new_pix = TRUE;
...@@ -6061,6 +6134,7 @@ static void shrink_row_8(const dib_info *dst_dib, const POINT *dst_start, ...@@ -6061,6 +6134,7 @@ static void shrink_row_8(const dib_info *dst_dib, const POINT *dst_start,
} }
else err += params->err_add_2; else err += params->err_add_2;
} }
}
} }
static void shrink_row_4(const dib_info *dst_dib, const POINT *dst_start, static void shrink_row_4(const dib_info *dst_dib, const POINT *dst_start,
......
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