Vincent Povirk : gdiplus: GdipGetDC doesn' t set the alpha channel for a 32-bit dib.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 19 09:59:02 CDT 2015


Module: wine
Branch: master
Commit: e9d9ef591b490a8b4eb173df34b10a6977f45b6d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e9d9ef591b490a8b4eb173df34b10a6977f45b6d

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Wed Mar 18 15:52:18 2015 -0500

gdiplus: GdipGetDC doesn't set the alpha channel for a 32-bit dib.

---

 dlls/gdiplus/graphics.c       |  2 +-
 dlls/gdiplus/tests/graphics.c | 18 +++++++++++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 6d86e3a..5284b99 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -5713,7 +5713,7 @@ GpStatus WINGDIPAPI GdipGetDC(GpGraphics *graphics, HDC *hdc)
     {
         stat = METAFILE_GetDC((GpMetafile*)graphics->image, hdc);
     }
-    else if (!graphics->hdc || graphics->alpha_hdc ||
+    else if (!graphics->hdc ||
         (graphics->image && graphics->image->type == ImageTypeBitmap && ((GpBitmap*)graphics->image)->format & PixelFormatAlpha))
     {
         /* Create a fake HDC and fill it with a constant color. */
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c
index e0bd615..77de9e4 100644
--- a/dlls/gdiplus/tests/graphics.c
+++ b/dlls/gdiplus/tests/graphics.c
@@ -4445,12 +4445,13 @@ static void test_measured_extra_space(void)
 static void test_alpha_hdc(void)
 {
     GpStatus status;
-    HDC hdc;
+    HDC hdc, gp_hdc;
     HBITMAP hbm, old_hbm;
     GpGraphics *graphics;
     ULONG *bits;
     BITMAPINFO bmi;
     GpRectF bounds;
+    COLORREF colorref;
 
     hdc = CreateCompatibleDC(0);
     ok(hdc != NULL, "CreateCompatibleDC failed\n");
@@ -4484,6 +4485,21 @@ static void test_alpha_hdc(void)
 
     expect(0xffaaaaaa, bits[0]);
 
+    bits[0] = 0xdeadbeef;
+
+    status = GdipGetDC(graphics, &gp_hdc);
+    expect(Ok, status);
+
+    colorref = GetPixel(gp_hdc, 0, 4);
+    expect(0xefbead, colorref);
+
+    SetPixel(gp_hdc, 0, 4, 0xffffff);
+
+    expect(0xffffff, bits[0]);
+
+    status = GdipReleaseDC(graphics, gp_hdc);
+    expect(Ok, status);
+
     SelectObject(hdc, old_hbm);
 
     bits[0] = 0xdeadbeef;




More information about the wine-cvs mailing list