Paul Gofman : user32/tests: Add test for 16 bit image stretch mode in CopyImage().

Alexandre Julliard julliard at winehq.org
Wed Jan 9 16:57:10 CST 2019


Module: wine
Branch: master
Commit: 75165d0da52d066c3c0ddb6aff67cf8b20811617
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=75165d0da52d066c3c0ddb6aff67cf8b20811617

Author: Paul Gofman <gofmanp at gmail.com>
Date:   Wed Jan  9 15:49:33 2019 +0300

user32/tests: Add test for 16 bit image stretch mode in CopyImage().

Signed-off-by: Paul Gofman <gofmanp at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/cursoricon.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/tests/cursoricon.c b/dlls/user32/tests/cursoricon.c
index f00d3f2..ed69400 100644
--- a/dlls/user32/tests/cursoricon.c
+++ b/dlls/user32/tests/cursoricon.c
@@ -2758,13 +2758,19 @@ static COLORREF get_color_from_bits(const unsigned char *bits, const BITMAPINFO
     unsigned int stride, shift, mask;
     const unsigned char *data;
     RGBQUAD color;
+    WORD color16;
 
-    ok(h->biBitCount <= 8 || h->biBitCount >= 24, "Unsupported bit count %u.\n", h->biBitCount);
     stride = ((h->biBitCount * h->biWidth + 7) / 8 + 3) & ~3;
     data = bits + row * stride + column * h->biBitCount / 8;
     if (h->biBitCount >= 24)
         return RGB(data[2], data[1], data[0]);
 
+    if (h->biBitCount == 16)
+    {
+        color16 = ((WORD)data[1] << 8) | data[0];
+        return RGB(((color16 >> 10) & 0x1f) << 3, ((color16 >> 5) & 0x1f) << 3,
+                (color16 & 0x1f) << 3);
+    }
     shift = 8 - h->biBitCount - (column * h->biBitCount) % 8;
     mask = ~(~0u << h->biBitCount);
     color = bmi->bmiColors[(data[0] >> shift) & mask];
@@ -2785,6 +2791,20 @@ static void test_CopyImage_StretchMode(void)
         0x3f, 0xff, 0x00,  0x3f, 0xff, 0x3f,  0x00, 0x00,
         0x3f, 0xff, 0x7f,  0x00, 0xff, 0x3f,  0x00, 0x00,
     };
+#define rgb16(r, g, b) ((WORD)(((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3)))
+    static const WORD test_bits_16[] =
+    {
+        rgb16(0x00, 0x20, 0x00), rgb16(0x00, 0x40, 0x00), rgb16(0x00, 0x40, 0xff), rgb16(0x00, 0x20, 0x00),
+        rgb16(0x00, 0x60, 0x00), rgb16(0xff, 0x80, 0x00), rgb16(0xff, 0x60, 0x00), rgb16(0x00, 0x80, 0x00),
+        rgb16(0x00, 0x20, 0xff), rgb16(0x00, 0x40, 0x00), rgb16(0x00, 0x40, 0xff), rgb16(0x00, 0x20, 0x00),
+        rgb16(0xff, 0x80, 0x00), rgb16(0x00, 0x60, 0xff), rgb16(0x00, 0x80, 0x00), rgb16(0x00, 0x60, 0x00),
+    };
+    static const WORD expected_bits_16[] =
+    {
+        rgb16(0x00, 0x40, 0x00), rgb16(0x00, 0x20, 0x00),
+        rgb16(0x00, 0x40, 0x00), rgb16(0x00, 0x20, 0x00),
+    };
+#undef rgb16
     static const unsigned char test_bits_8[] =
     {
         0x00, 0xff, 0x00, 0xff,
@@ -2836,6 +2856,8 @@ static void test_CopyImage_StretchMode(void)
         {4, 4, 2, 2, 8, test_bits_8, expected_bits_8,
                 sizeof(test_bits_8), sizeof(expected_bits_8), colors_bits_8,
                 sizeof(colors_bits_8), TRUE},
+        {4, 4, 2, 2, 16, (const unsigned char *)test_bits_16, (const unsigned char *)expected_bits_16,
+                sizeof(test_bits_16), sizeof(expected_bits_16), NULL, 0, TRUE},
     };
 
     HBITMAP bitmap, bitmap_copy;




More information about the wine-cvs mailing list