diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c index e65dcbc5336..a9c32bfc8fc 100644 --- a/dlls/gdi32/dibdrv/bitblt.c +++ b/dlls/gdi32/dibdrv/bitblt.c @@ -1230,12 +1230,11 @@ DWORD stretch_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bit else { int merged_rows = 0; - int faster_mode = mode; while (v_params.length--) { - if (hstretch) faster_mode = merged_rows ? mode : STRETCH_DELETESCANS; - row_fn( &dst_dib, &dst_start, &src_dib, &src_start, &h_params, faster_mode, merged_rows != 0 ); + if (mode != STRETCH_DELETESCANS || !merged_rows) + row_fn( &dst_dib, &dst_start, &src_dib, &src_start, &h_params, mode, merged_rows != 0 ); merged_rows++; if (err > 0) diff --git a/dlls/gdi32/dibdrv/primitives.c b/dlls/gdi32/dibdrv/primitives.c index d4c9fc33e05..1569bc056ea 100644 --- a/dlls/gdi32/dibdrv/primitives.c +++ b/dlls/gdi32/dibdrv/primitives.c @@ -5698,7 +5698,7 @@ static void stretch_row_32(const dib_info *dst_dib, const POINT *dst_start, int err = params->err_start; int width; - if (mode == STRETCH_DELETESCANS) + if (mode == STRETCH_DELETESCANS || !keep_dst) { for (width = params->length; width; width--) { @@ -5741,7 +5741,7 @@ static void stretch_row_24(const dib_info *dst_dib, const POINT *dst_start, int err = params->err_start; int width; - if (mode == STRETCH_DELETESCANS) + if (mode == STRETCH_DELETESCANS || !keep_dst) { for (width = params->length; width; width--) { @@ -5788,7 +5788,7 @@ static void stretch_row_16(const dib_info *dst_dib, const POINT *dst_start, int err = params->err_start; int width; - if (mode == STRETCH_DELETESCANS) + if (mode == STRETCH_DELETESCANS || !keep_dst) { for (width = params->length; width; width--) { @@ -5831,7 +5831,7 @@ static void stretch_row_8(const dib_info *dst_dib, const POINT *dst_start, int err = params->err_start; int width; - if (mode == STRETCH_DELETESCANS) + if (mode == STRETCH_DELETESCANS || !keep_dst) { for (width = params->length; width; width--) { @@ -5876,6 +5876,7 @@ static void stretch_row_4(const dib_info *dst_dib, const POINT *dst_start, struct rop_codes codes; BYTE src_val; + if (!keep_dst) mode = STRETCH_DELETESCANS; rop_codes_from_stretch_mode( mode, &codes ); for (width = params->length; width; width--) { @@ -5911,6 +5912,7 @@ static void stretch_row_1(const dib_info *dst_dib, const POINT *dst_start, struct rop_codes codes; BYTE src_val; + if (!keep_dst) mode = STRETCH_DELETESCANS; rop_codes_from_stretch_mode( mode, &codes ); for (width = params->length; width; width--) {