[PATCH 3/5] ddraw/tests: RestoreDisplayMode uses the registry mode.
Stefan Dösinger
stefan at codeweavers.com
Fri Oct 24 04:28:55 CDT 2014
---
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
More information about the wine-patches
mailing list