Stefan Dösinger : gdi32, winex11drv: Add a test for compatible bitmap depths.
Alexandre Julliard
julliard at winehq.org
Wed Dec 12 09:29:15 CST 2007
Module: wine
Branch: master
Commit: aa390e840b025c41524439093fb268f259b1190c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aa390e840b025c41524439093fb268f259b1190c
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Fri Dec 7 16:12:26 2007 +0100
gdi32, winex11drv: Add a test for compatible bitmap depths.
---
dlls/gdi32/tests/bitmap.c | 36 +++++++++++++++++++++++++-----------
dlls/winex11.drv/bitmap.c | 8 ++++----
2 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
index 6f87e29..49dbb4e 100644
--- a/dlls/gdi32/tests/bitmap.c
+++ b/dlls/gdi32/tests/bitmap.c
@@ -1555,7 +1555,8 @@ static void test_select_object(void)
{
HDC hdc;
HBITMAP hbm, hbm_old;
- INT planes, bpp;
+ INT planes, bpp, i;
+ DWORD depths[] = {8, 15, 16, 24, 32};
hdc = GetDC(0);
ok(hdc != 0, "GetDC(0) failed\n");
@@ -1594,17 +1595,30 @@ static void test_select_object(void)
DeleteObject(hbm);
- /* test a color bitmap that doesn't match the dc's bpp */
- planes = GetDeviceCaps(hdc, PLANES);
- bpp = GetDeviceCaps(hdc, BITSPIXEL) == 24 ? 8 : 24;
-
- hbm = CreateBitmap(10, 10, planes, bpp, NULL);
- ok(hbm != 0, "CreateBitmap failed\n");
-
- hbm_old = SelectObject(hdc, hbm);
- ok(hbm_old == 0, "SelectObject should fail\n");
+ for(i = 0; i < sizeof(depths)/sizeof(depths[0]); i++) {
+ /* test a color bitmap to dc bpp matching */
+ planes = GetDeviceCaps(hdc, PLANES);
+ bpp = GetDeviceCaps(hdc, BITSPIXEL);
+
+ hbm = CreateBitmap(10, 10, planes, depths[i], NULL);
+ ok(hbm != 0, "CreateBitmap failed\n");
+
+ hbm_old = SelectObject(hdc, hbm);
+ if(depths[i] == bpp ||
+ (bpp == 16 && depths[i] == 15) /* 16 and 15 bpp are compatible */
+ ) {
+ ok(hbm_old != 0, "SelectObject failed, BITSPIXEL: %d, created depth: %d\n", bpp, depths[i]);
+ SelectObject(hdc, hbm_old);
+ } else {
+ if(bpp == 24 && depths[i] == 32) {
+ todo_wine ok(hbm_old == 0, "SelectObject should fail. BITSPIXELS: %d, created depth: %d\n", bpp, depths[i]);
+ } else {
+ ok(hbm_old == 0, "SelectObject should fail. BITSPIXELS: %d, created depth: %d\n", bpp, depths[i]);
+ }
+ }
- DeleteObject(hbm);
+ DeleteObject(hbm);
+ }
DeleteDC(hdc);
}
diff --git a/dlls/winex11.drv/bitmap.c b/dlls/winex11.drv/bitmap.c
index 6d4180b..e1a26d4 100644
--- a/dlls/winex11.drv/bitmap.c
+++ b/dlls/winex11.drv/bitmap.c
@@ -124,10 +124,10 @@ BOOL X11DRV_CreateBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap, LPVOID bmBit
/* check if bpp is compatible with screen depth */
if (!((bitmap.bmBitsPixel == 1) ||
(bitmap.bmBitsPixel == screen_depth) ||
- (bitmap.bmBitsPixel == 24 && screen_depth == 32) ||
- (bitmap.bmBitsPixel == 32 && screen_depth == 24) ||
- (bitmap.bmBitsPixel == 15 && screen_depth == 16) ||
- (bitmap.bmBitsPixel == 16 && screen_depth == 15)))
+ (bitmap.bmBitsPixel == 24 && screen_depth == 32) || /* FIXME: Not compatible */
+ (bitmap.bmBitsPixel == 32 && screen_depth == 24) || /* FIXME: Not compatible */
+ (bitmap.bmBitsPixel == 15 && screen_depth == 16) || /* Confirmed by tests */
+ (bitmap.bmBitsPixel == 16 && screen_depth == 15))) /* TODO: Confirm this */
{
ERR("Trying to make bitmap with planes=%d, bpp=%d\n",
bitmap.bmPlanes, bitmap.bmBitsPixel);
More information about the wine-cvs
mailing list