From: Stefan Dösinger Subject: [PATCH 3/5] ddraw/tests: RestoreDisplayMode uses the registry mode. Message-Id: <1414142937-20378-3-git-send-email-stefan@codeweavers.com> Date: Fri, 24 Oct 2014 11:28:55 +0200 --- dlls/ddraw/tests/ddraw1.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw2.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw4.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/ddraw/tests/ddraw7.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 464 insertions(+) diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 742d82c..6577216 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -5632,6 +5632,121 @@ static void test_surface_desc_lock(void) DestroyWindow(window); } +struct restore_mode_param +{ + DEVMODEW registry_mode; + DWORD width1, height1, width2, height2; +}; + +static HRESULT CALLBACK test_restore_display_mode_cb(DDSURFACEDESC *surface_desc, void *context) +{ + struct restore_mode_param *param = context; + + if (U1(surface_desc->ddpfPixelFormat).dwRGBBitCount != param->registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + if (surface_desc->dwWidth == param->registry_mode.dmPelsWidth + && surface_desc->dwHeight == param->registry_mode.dmPelsHeight) + return DDENUMRET_OK; + + if (!param->width1) + { + param->width1 = surface_desc->dwWidth; + param->height1 = surface_desc->dwHeight; + return DDENUMRET_OK; + } + if (surface_desc->dwWidth == param->width1 && surface_desc->dwHeight == param->height1) + return DDENUMRET_OK; + + param->width2 = surface_desc->dwWidth; + param->height2 = surface_desc->dwHeight; + return DDENUMRET_CANCEL; +} + +static void test_restore_display_mode(void) +{ + IDirectDraw *ddraw; + ULONG refcount; + HWND window; + HRESULT hr; + DEVMODEW devmode; + BOOL ret; + LONG change_ret; + struct restore_mode_param param; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(¶m, 0, sizeof(param)); + param.registry_mode.dmSize = sizeof(param.registry_mode); + ret = EnumDisplaySettingsW(NULL, ENUM_REGISTRY_SETTINGS, ¶m.registry_mode); + ok(ret, "Failed to get display mode.\n"); + hr = IDirectDraw_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_restore_display_mode_cb); + ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr); + refcount = IDirectDraw_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + if (!param.width2) + { + skip("Fewer than 3 different modes supported, skipping mode restore test.\n"); + return; + } + + memset(&devmode, 0, sizeof(devmode)); + devmode.dmSize = sizeof(devmode); + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, 0, 0, 0, 0); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + hr = IDirectDraw_RestoreDisplayMode(ddraw); + ok(SUCCEEDED(hr), "Failed to restore display mode, hr %#x.\n", hr); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + refcount = IDirectDraw_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + refcount = IDirectDraw_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + DestroyWindow(window); + change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); +} + START_TEST(ddraw1) { IDirectDraw *ddraw; @@ -5684,4 +5799,5 @@ START_TEST(ddraw1) test_palette_alpha(); test_lost_device(); test_surface_desc_lock(); + test_restore_display_mode(); } diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index c5a8393..cd0ff84 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -6708,6 +6708,121 @@ static void test_surface_desc_lock(void) DestroyWindow(window); } +struct restore_mode_param +{ + DEVMODEW registry_mode; + DWORD width1, height1, width2, height2; +}; + +static HRESULT CALLBACK test_restore_display_mode_cb(DDSURFACEDESC *surface_desc, void *context) +{ + struct restore_mode_param *param = context; + + if (U1(surface_desc->ddpfPixelFormat).dwRGBBitCount != param->registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + if (surface_desc->dwWidth == param->registry_mode.dmPelsWidth + && surface_desc->dwHeight == param->registry_mode.dmPelsHeight) + return DDENUMRET_OK; + + if (!param->width1) + { + param->width1 = surface_desc->dwWidth; + param->height1 = surface_desc->dwHeight; + return DDENUMRET_OK; + } + if (surface_desc->dwWidth == param->width1 && surface_desc->dwHeight == param->height1) + return DDENUMRET_OK; + + param->width2 = surface_desc->dwWidth; + param->height2 = surface_desc->dwHeight; + return DDENUMRET_CANCEL; +} + +static void test_restore_display_mode(void) +{ + IDirectDraw2 *ddraw; + ULONG refcount; + HWND window; + HRESULT hr; + DEVMODEW devmode; + BOOL ret; + LONG change_ret; + struct restore_mode_param param; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(¶m, 0, sizeof(param)); + param.registry_mode.dmSize = sizeof(param.registry_mode); + ret = EnumDisplaySettingsW(NULL, ENUM_REGISTRY_SETTINGS, ¶m.registry_mode); + ok(ret, "Failed to get display mode.\n"); + hr = IDirectDraw2_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_restore_display_mode_cb); + ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr); + refcount = IDirectDraw2_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + if (!param.width2) + { + skip("Fewer than 3 different modes supported, skipping mode restore test.\n"); + return; + } + + memset(&devmode, 0, sizeof(devmode)); + devmode.dmSize = sizeof(devmode); + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, 0, 0, 0, 0); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + hr = IDirectDraw2_RestoreDisplayMode(ddraw); + ok(SUCCEEDED(hr), "Failed to restore display mode, hr %#x.\n", hr); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + refcount = IDirectDraw2_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + refcount = IDirectDraw2_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + DestroyWindow(window); + change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); +} + START_TEST(ddraw2) { IDirectDraw2 *ddraw; @@ -6766,4 +6881,5 @@ START_TEST(ddraw2) test_palette_alpha(); test_lost_device(); test_surface_desc_lock(); + test_restore_display_mode(); } diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index 009ac6f..33d28c1 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -7783,6 +7783,121 @@ static void test_surface_desc_lock(void) DestroyWindow(window); } +struct restore_mode_param +{ + DEVMODEW registry_mode; + DWORD width1, height1, width2, height2; +}; + +static HRESULT CALLBACK test_restore_display_mode_cb(DDSURFACEDESC2 *surface_desc, void *context) +{ + struct restore_mode_param *param = context; + + if (U1(surface_desc->ddpfPixelFormat).dwRGBBitCount != param->registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + if (surface_desc->dwWidth == param->registry_mode.dmPelsWidth + && surface_desc->dwHeight == param->registry_mode.dmPelsHeight) + return DDENUMRET_OK; + + if (!param->width1) + { + param->width1 = surface_desc->dwWidth; + param->height1 = surface_desc->dwHeight; + return DDENUMRET_OK; + } + if (surface_desc->dwWidth == param->width1 && surface_desc->dwHeight == param->height1) + return DDENUMRET_OK; + + param->width2 = surface_desc->dwWidth; + param->height2 = surface_desc->dwHeight; + return DDENUMRET_CANCEL; +} + +static void test_restore_display_mode(void) +{ + IDirectDraw4 *ddraw; + ULONG refcount; + HWND window; + HRESULT hr; + DEVMODEW devmode; + BOOL ret; + LONG change_ret; + struct restore_mode_param param; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(¶m, 0, sizeof(param)); + param.registry_mode.dmSize = sizeof(param.registry_mode); + ret = EnumDisplaySettingsW(NULL, ENUM_REGISTRY_SETTINGS, ¶m.registry_mode); + ok(ret, "Failed to get display mode.\n"); + hr = IDirectDraw4_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_restore_display_mode_cb); + ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr); + refcount = IDirectDraw4_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + if (!param.width2) + { + skip("Fewer than 3 different modes supported, skipping mode restore test.\n"); + return; + } + + memset(&devmode, 0, sizeof(devmode)); + devmode.dmSize = sizeof(devmode); + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, 0, 0, 0, 0); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + hr = IDirectDraw4_RestoreDisplayMode(ddraw); + ok(SUCCEEDED(hr), "Failed to restore display mode, hr %#x.\n", hr); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + refcount = IDirectDraw4_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + refcount = IDirectDraw4_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + DestroyWindow(window); + change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); +} + START_TEST(ddraw4) { IDirectDraw4 *ddraw; @@ -7848,4 +7963,5 @@ START_TEST(ddraw4) test_vb_writeonly(); test_lost_device(); test_surface_desc_lock(); + test_restore_display_mode(); } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index ec50fb8..18e6636 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -7626,6 +7626,121 @@ static void test_surface_desc_lock(void) DestroyWindow(window); } +struct restore_mode_param +{ + DEVMODEW registry_mode; + DWORD width1, height1, width2, height2; +}; + +static HRESULT CALLBACK test_restore_display_mode_cb(DDSURFACEDESC2 *surface_desc, void *context) +{ + struct restore_mode_param *param = context; + + if (U1(surface_desc->ddpfPixelFormat).dwRGBBitCount != param->registry_mode.dmBitsPerPel) + return DDENUMRET_OK; + if (surface_desc->dwWidth == param->registry_mode.dmPelsWidth + && surface_desc->dwHeight == param->registry_mode.dmPelsHeight) + return DDENUMRET_OK; + + if (!param->width1) + { + param->width1 = surface_desc->dwWidth; + param->height1 = surface_desc->dwHeight; + return DDENUMRET_OK; + } + if (surface_desc->dwWidth == param->width1 && surface_desc->dwHeight == param->height1) + return DDENUMRET_OK; + + param->width2 = surface_desc->dwWidth; + param->height2 = surface_desc->dwHeight; + return DDENUMRET_CANCEL; +} + +static void test_restore_display_mode(void) +{ + IDirectDraw7 *ddraw; + ULONG refcount; + HWND window; + HRESULT hr; + DEVMODEW devmode; + BOOL ret; + LONG change_ret; + struct restore_mode_param param; + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + + memset(¶m, 0, sizeof(param)); + param.registry_mode.dmSize = sizeof(param.registry_mode); + ret = EnumDisplaySettingsW(NULL, ENUM_REGISTRY_SETTINGS, ¶m.registry_mode); + ok(ret, "Failed to get display mode.\n"); + hr = IDirectDraw7_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_restore_display_mode_cb); + ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr); + refcount = IDirectDraw7_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + if (!param.width2) + { + skip("Fewer than 3 different modes supported, skipping mode restore test.\n"); + return; + } + + memset(&devmode, 0, sizeof(devmode)); + devmode.dmSize = sizeof(devmode); + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, 0, 0, 0, 0); + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + hr = IDirectDraw7_RestoreDisplayMode(ddraw); + ok(SUCCEEDED(hr), "Failed to restore display mode, hr %#x.\n", hr); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + refcount = IDirectDraw7_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + devmode.dmPelsWidth = param.width1; + devmode.dmPelsHeight = param.height1; + change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); + + ddraw = create_ddraw(); + ok(!!ddraw, "Failed to create a ddraw object.\n"); + hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); + ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr); + hr = set_display_mode(ddraw, param.width2, param.height2); + ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr); + refcount = IDirectDraw7_Release(ddraw); + ok(!refcount, "Got unexpected refcount %u.\n", refcount); + + ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode); + ok(ret, "Failed to get display mode.\n"); + todo_wine ok(devmode.dmPelsWidth == param.registry_mode.dmPelsWidth, "Got unexpect width %u, expected %u.\n", + devmode.dmPelsWidth, param.registry_mode.dmPelsWidth); + todo_wine ok(devmode.dmPelsHeight == param.registry_mode.dmPelsHeight, "Got unexpect height %u, expected %u.\n", + devmode.dmPelsHeight, param.registry_mode.dmPelsHeight); + + DestroyWindow(window); + change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN); + ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", ret); +} + START_TEST(ddraw7) { HMODULE module = GetModuleHandleA("ddraw.dll"); @@ -7699,4 +7814,5 @@ START_TEST(ddraw7) test_lost_device(); test_resource_priority(); test_surface_desc_lock(); + test_restore_display_mode(); } -- 2.0.4