Signed-off-by: Jinoh Kang jinoh.kang.kr@gmail.com ---
Notes: v1 -> v2: fix commit message v2 -> v3: remove fixed todo_wine
dlls/comctl32/static.c | 11 +++++++++++ dlls/comctl32/tests/static.c | 2 -- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/static.c b/dlls/comctl32/static.c index 7a3ac958111..9b20e6a8b66 100644 --- a/dlls/comctl32/static.c +++ b/dlls/comctl32/static.c @@ -203,6 +203,17 @@ static HBITMAP create_alpha_bitmap( HBITMAP hbitmap ) DeleteObject( alpha ); alpha = 0; } + else + { + /* pre-multiply by alpha */ + for (i = 0, ptr = bits; i < bm.bmWidth * bm.bmHeight; i++, ptr += 4) + { + unsigned int alpha = ptr[3]; + ptr[0] = (ptr[0] * alpha + 127) / 255; + ptr[1] = (ptr[1] * alpha + 127) / 255; + ptr[2] = (ptr[2] * alpha + 127) / 255; + } + } }
DeleteDC( hdc ); diff --git a/dlls/comctl32/tests/static.c b/dlls/comctl32/tests/static.c index b8f43142d6b..7b6ac679c92 100644 --- a/dlls/comctl32/tests/static.c +++ b/dlls/comctl32/tests/static.c @@ -165,7 +165,6 @@ static void test_image(HBITMAP image, BOOL is_dib, BOOL is_premult, BOOL is_alph ok(bm.bmBits != NULL, "bmBits is NULL\n"); memcpy(bits, bm.bmBits, 4); if (is_premult) - todo_wine ok(bits[0] == 0x05 && bits[1] == 0x09 && bits[2] == 0x0e && bits[3] == 0x44, "bits: %02x %02x %02x %02x\n", bits[0], bits[1], bits[2], bits[3]); else if (is_alpha) @@ -195,7 +194,6 @@ static void test_image(HBITMAP image, BOOL is_dib, BOOL is_premult, BOOL is_alph DeleteDC(hdc);
if (is_premult) - todo_wine ok(bits[0] == 0x05 && bits[1] == 0x09 && bits[2] == 0x0e && bits[3] == 0x44, "bits: %02x %02x %02x %02x\n", bits[0], bits[1], bits[2], bits[3]); else if (is_alpha)