Damjan Jovanovic : gdiplus: In CompositingModeSourceCopy, fully transparent pixels are drawn black.
Alexandre Julliard
julliard at winehq.org
Tue Jun 2 08:11:17 CDT 2020
Module: wine
Branch: stable
Commit: 79b2c4a97d6fbcd45dd8c07b4b326ad3b9ef36c5
URL: https://source.winehq.org/git/wine.git/?a=commit;h=79b2c4a97d6fbcd45dd8c07b4b326ad3b9ef36c5
Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date: Thu Mar 5 03:35:40 2020 +0200
gdiplus: In CompositingModeSourceCopy, fully transparent pixels are drawn black.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42585
Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 99a171981cc42970f0caee69e1ceb0e810d5955f)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/gdiplus/graphics.c | 7 ++++++-
dlls/gdiplus/tests/image.c | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index e485e5c99f..810300ae59 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -384,7 +384,12 @@ static GpStatus alpha_blend_bmp_pixels(GpGraphics *graphics, INT dst_x, INT dst_
src_color = ((ARGB*)(src + src_stride * y))[x];
if (comp_mode == CompositingModeSourceCopy)
- GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, src_color);
+ {
+ if (!(src_color & 0xff000000))
+ GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, 0);
+ else
+ GdipBitmapSetPixel(dst_bitmap, x+dst_x, y+dst_y, src_color);
+ }
else
{
if (!(src_color & 0xff000000))
diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c
index 62cd79fec6..ad941d266f 100644
--- a/dlls/gdiplus/tests/image.c
+++ b/dlls/gdiplus/tests/image.c
@@ -4208,7 +4208,7 @@ static void test_DrawImage_SourceCopy(void)
expect(0, dst_pixels[0]);
expect(0xffff0000, dst_pixels[1]);
expect(0, dst_pixels[2]);
- todo_wine expect(0, dst_pixels[3]);
+ expect(0, dst_pixels[3]);
status = GdipDeleteGraphics(graphics);
expect(Ok, status);
More information about the wine-cvs
mailing list