ddraw/tests: Ddraw restores the mode settings from the registry.
This commit is contained in:
parent
a04eb0c21b
commit
a6f7b213af
@ -2104,7 +2104,7 @@ static LRESULT CALLBACK mode_set_proc(HWND hwnd, UINT message, WPARAM wparam, LP
|
|||||||
|
|
||||||
struct test_coop_level_mode_set_enum_param
|
struct test_coop_level_mode_set_enum_param
|
||||||
{
|
{
|
||||||
DWORD ddraw_width, ddraw_height;
|
DWORD ddraw_width, ddraw_height, user32_width, user32_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC *surface_desc, void *context)
|
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC *surface_desc, void *context)
|
||||||
@ -2117,15 +2117,24 @@ static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC *surface_
|
|||||||
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
||||||
return DDENUMRET_OK;
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
param->ddraw_width = surface_desc->dwWidth;
|
if (!param->ddraw_width)
|
||||||
param->ddraw_height = surface_desc->dwHeight;
|
{
|
||||||
|
param->ddraw_width = surface_desc->dwWidth;
|
||||||
|
param->ddraw_height = surface_desc->dwHeight;
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
}
|
||||||
|
if (surface_desc->dwWidth == param->ddraw_width && surface_desc->dwHeight == param->ddraw_height)
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
|
param->user32_width = surface_desc->dwWidth;
|
||||||
|
param->user32_height = surface_desc->dwHeight;
|
||||||
return DDENUMRET_CANCEL;
|
return DDENUMRET_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_coop_level_mode_set(void)
|
static void test_coop_level_mode_set(void)
|
||||||
{
|
{
|
||||||
IDirectDrawSurface *primary;
|
IDirectDrawSurface *primary;
|
||||||
RECT registry_rect, ddraw_rect, r;
|
RECT registry_rect, ddraw_rect, user32_rect, r;
|
||||||
IDirectDraw *ddraw;
|
IDirectDraw *ddraw;
|
||||||
DDSURFACEDESC ddsd;
|
DDSURFACEDESC ddsd;
|
||||||
WNDCLASSA wc = {0};
|
WNDCLASSA wc = {0};
|
||||||
@ -2134,6 +2143,9 @@ static void test_coop_level_mode_set(void)
|
|||||||
ULONG ref;
|
ULONG ref;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
struct test_coop_level_mode_set_enum_param param;
|
struct test_coop_level_mode_set_enum_param param;
|
||||||
|
DEVMODEW devmode;
|
||||||
|
BOOL ret;
|
||||||
|
LONG change_ret;
|
||||||
|
|
||||||
static const UINT exclusive_messages[] =
|
static const UINT exclusive_messages[] =
|
||||||
{
|
{
|
||||||
@ -2156,17 +2168,29 @@ static void test_coop_level_mode_set(void)
|
|||||||
memset(¶m, 0, sizeof(param));
|
memset(¶m, 0, sizeof(param));
|
||||||
hr = IDirectDraw_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
hr = IDirectDraw_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
||||||
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
||||||
|
ref = IDirectDraw_Release(ddraw);
|
||||||
|
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||||
|
|
||||||
if (!param.ddraw_width)
|
if (!param.user32_height)
|
||||||
{
|
{
|
||||||
skip("Fewer than 2 different modes supported, skipping mode restore test.\n");
|
skip("Fewer than 3 different modes supported, skipping mode restore test.\n");
|
||||||
ref = IDirectDraw_Release(ddraw);
|
|
||||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
||||||
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
||||||
|
SetRect(&user32_rect, 0, 0, param.user32_width, param.user32_height);
|
||||||
|
|
||||||
|
memset(&devmode, 0, sizeof(devmode));
|
||||||
|
devmode.dmSize = sizeof(devmode);
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ddraw = create_ddraw();
|
||||||
|
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||||
|
|
||||||
wc.lpfnWndProc = mode_set_proc;
|
wc.lpfnWndProc = mode_set_proc;
|
||||||
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
||||||
@ -2179,8 +2203,8 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2192,14 +2216,14 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
||||||
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
@ -2223,10 +2247,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
|
|
||||||
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2253,18 +2277,37 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = IDirectDraw_RestoreDisplayMode(ddraw);
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
expect_messages = NULL;
|
expect_messages = NULL;
|
||||||
ok(screen_size.cx == registry_mode.dmPelsWidth
|
ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
|
||||||
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
|
param.user32_width, param.user32_height, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = exclusive_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
hr = IDirectDraw_RestoreDisplayMode(ddraw);
|
||||||
|
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
|
||||||
&& screen_size.cy == registry_mode.dmPelsHeight,
|
&& screen_size.cy == registry_mode.dmPelsHeight,
|
||||||
"Expected screen size %ux%u, got %ux%u.\n",
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
todo_wine ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
@ -2276,6 +2319,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
|
/* For Wine. */
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2335,6 +2382,23 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
|
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
|
||||||
{
|
{
|
||||||
@ -2406,6 +2470,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2468,6 +2542,26 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
||||||
|
|
||||||
@ -2532,6 +2626,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
|
@ -2303,7 +2303,7 @@ static LRESULT CALLBACK mode_set_proc2(HWND hwnd, UINT message, WPARAM wparam, L
|
|||||||
|
|
||||||
struct test_coop_level_mode_set_enum_param
|
struct test_coop_level_mode_set_enum_param
|
||||||
{
|
{
|
||||||
DWORD ddraw_width, ddraw_height;
|
DWORD ddraw_width, ddraw_height, user32_width, user32_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC *surface_desc, void *context)
|
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC *surface_desc, void *context)
|
||||||
@ -2316,15 +2316,24 @@ static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC *surface_
|
|||||||
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
||||||
return DDENUMRET_OK;
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
param->ddraw_width = surface_desc->dwWidth;
|
if (!param->ddraw_width)
|
||||||
param->ddraw_height = surface_desc->dwHeight;
|
{
|
||||||
|
param->ddraw_width = surface_desc->dwWidth;
|
||||||
|
param->ddraw_height = surface_desc->dwHeight;
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
}
|
||||||
|
if (surface_desc->dwWidth == param->ddraw_width && surface_desc->dwHeight == param->ddraw_height)
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
|
param->user32_width = surface_desc->dwWidth;
|
||||||
|
param->user32_height = surface_desc->dwHeight;
|
||||||
return DDENUMRET_CANCEL;
|
return DDENUMRET_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_coop_level_mode_set(void)
|
static void test_coop_level_mode_set(void)
|
||||||
{
|
{
|
||||||
IDirectDrawSurface *primary;
|
IDirectDrawSurface *primary;
|
||||||
RECT registry_rect, ddraw_rect, r;
|
RECT registry_rect, ddraw_rect, user32_rect, r;
|
||||||
IDirectDraw2 *ddraw;
|
IDirectDraw2 *ddraw;
|
||||||
DDSURFACEDESC ddsd;
|
DDSURFACEDESC ddsd;
|
||||||
WNDCLASSA wc = {0};
|
WNDCLASSA wc = {0};
|
||||||
@ -2333,6 +2342,9 @@ static void test_coop_level_mode_set(void)
|
|||||||
ULONG ref;
|
ULONG ref;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
struct test_coop_level_mode_set_enum_param param;
|
struct test_coop_level_mode_set_enum_param param;
|
||||||
|
DEVMODEW devmode;
|
||||||
|
BOOL ret;
|
||||||
|
LONG change_ret;
|
||||||
|
|
||||||
static const UINT exclusive_messages[] =
|
static const UINT exclusive_messages[] =
|
||||||
{
|
{
|
||||||
@ -2355,17 +2367,29 @@ static void test_coop_level_mode_set(void)
|
|||||||
memset(¶m, 0, sizeof(param));
|
memset(¶m, 0, sizeof(param));
|
||||||
hr = IDirectDraw2_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
hr = IDirectDraw2_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
||||||
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
||||||
|
ref = IDirectDraw2_Release(ddraw);
|
||||||
|
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||||
|
|
||||||
if (!param.ddraw_width)
|
if (!param.user32_height)
|
||||||
{
|
{
|
||||||
skip("Fewer than 2 different modes supported, skipping mode restore test.\n");
|
skip("Fewer than 3 different modes supported, skipping mode restore test.\n");
|
||||||
ref = IDirectDraw2_Release(ddraw);
|
|
||||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
||||||
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
||||||
|
SetRect(&user32_rect, 0, 0, param.user32_width, param.user32_height);
|
||||||
|
|
||||||
|
memset(&devmode, 0, sizeof(devmode));
|
||||||
|
devmode.dmSize = sizeof(devmode);
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ddraw = create_ddraw();
|
||||||
|
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||||
|
|
||||||
wc.lpfnWndProc = mode_set_proc;
|
wc.lpfnWndProc = mode_set_proc;
|
||||||
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
||||||
@ -2383,8 +2407,8 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2396,14 +2420,14 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
||||||
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
@ -2427,10 +2451,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
|
|
||||||
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2457,18 +2481,37 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = IDirectDraw2_RestoreDisplayMode(ddraw);
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
expect_messages = NULL;
|
expect_messages = NULL;
|
||||||
ok(screen_size.cx == registry_mode.dmPelsWidth
|
ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
|
||||||
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
|
param.user32_width, param.user32_height, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = exclusive_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
hr = IDirectDraw2_RestoreDisplayMode(ddraw);
|
||||||
|
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
|
||||||
&& screen_size.cy == registry_mode.dmPelsHeight,
|
&& screen_size.cy == registry_mode.dmPelsHeight,
|
||||||
"Expected screen size %ux%u, got %ux%u.\n",
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
todo_wine ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
@ -2480,6 +2523,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
|
/* For Wine. */
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2539,6 +2586,23 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
|
if (hr == DDERR_NOEXCLUSIVEMODE /* NT4 testbot */)
|
||||||
{
|
{
|
||||||
@ -2610,6 +2674,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2672,6 +2746,26 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
||||||
|
|
||||||
@ -2736,6 +2830,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface_Release(primary);
|
IDirectDrawSurface_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
|
@ -2490,7 +2490,7 @@ static LRESULT CALLBACK mode_set_proc2(HWND hwnd, UINT message, WPARAM wparam, L
|
|||||||
|
|
||||||
struct test_coop_level_mode_set_enum_param
|
struct test_coop_level_mode_set_enum_param
|
||||||
{
|
{
|
||||||
DWORD ddraw_width, ddraw_height;
|
DWORD ddraw_width, ddraw_height, user32_width, user32_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC2 *surface_desc, void *context)
|
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC2 *surface_desc, void *context)
|
||||||
@ -2503,15 +2503,24 @@ static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC2 *surface
|
|||||||
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
||||||
return DDENUMRET_OK;
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
param->ddraw_width = surface_desc->dwWidth;
|
if (!param->ddraw_width)
|
||||||
param->ddraw_height = surface_desc->dwHeight;
|
{
|
||||||
|
param->ddraw_width = surface_desc->dwWidth;
|
||||||
|
param->ddraw_height = surface_desc->dwHeight;
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
}
|
||||||
|
if (surface_desc->dwWidth == param->ddraw_width && surface_desc->dwHeight == param->ddraw_height)
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
|
param->user32_width = surface_desc->dwWidth;
|
||||||
|
param->user32_height = surface_desc->dwHeight;
|
||||||
return DDENUMRET_CANCEL;
|
return DDENUMRET_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_coop_level_mode_set(void)
|
static void test_coop_level_mode_set(void)
|
||||||
{
|
{
|
||||||
IDirectDrawSurface4 *primary;
|
IDirectDrawSurface4 *primary;
|
||||||
RECT registry_rect, ddraw_rect, r;
|
RECT registry_rect, ddraw_rect, user32_rect, r;
|
||||||
IDirectDraw4 *ddraw;
|
IDirectDraw4 *ddraw;
|
||||||
DDSURFACEDESC2 ddsd;
|
DDSURFACEDESC2 ddsd;
|
||||||
WNDCLASSA wc = {0};
|
WNDCLASSA wc = {0};
|
||||||
@ -2520,6 +2529,9 @@ static void test_coop_level_mode_set(void)
|
|||||||
ULONG ref;
|
ULONG ref;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
struct test_coop_level_mode_set_enum_param param;
|
struct test_coop_level_mode_set_enum_param param;
|
||||||
|
DEVMODEW devmode;
|
||||||
|
BOOL ret;
|
||||||
|
LONG change_ret;
|
||||||
|
|
||||||
static const UINT exclusive_messages[] =
|
static const UINT exclusive_messages[] =
|
||||||
{
|
{
|
||||||
@ -2542,17 +2554,29 @@ static void test_coop_level_mode_set(void)
|
|||||||
memset(¶m, 0, sizeof(param));
|
memset(¶m, 0, sizeof(param));
|
||||||
hr = IDirectDraw4_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
hr = IDirectDraw4_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
||||||
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
||||||
|
ref = IDirectDraw4_Release(ddraw);
|
||||||
|
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||||
|
|
||||||
if (!param.ddraw_width)
|
if (!param.user32_height)
|
||||||
{
|
{
|
||||||
skip("Fewer than 2 different modes supported, skipping mode restore test.\n");
|
skip("Fewer than 3 different modes supported, skipping mode restore test.\n");
|
||||||
ref = IDirectDraw4_Release(ddraw);
|
|
||||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
||||||
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
||||||
|
SetRect(&user32_rect, 0, 0, param.user32_width, param.user32_height);
|
||||||
|
|
||||||
|
memset(&devmode, 0, sizeof(devmode));
|
||||||
|
devmode.dmSize = sizeof(devmode);
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ddraw = create_ddraw();
|
||||||
|
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||||
|
|
||||||
wc.lpfnWndProc = mode_set_proc;
|
wc.lpfnWndProc = mode_set_proc;
|
||||||
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
||||||
@ -2570,8 +2594,8 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2583,14 +2607,14 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
||||||
hr = IDirectDrawSurface4_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface4_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
@ -2614,10 +2638,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
|
|
||||||
hr = IDirectDrawSurface4_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface4_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface4_Release(primary);
|
IDirectDrawSurface4_Release(primary);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2644,18 +2668,37 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = IDirectDraw4_RestoreDisplayMode(ddraw);
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
expect_messages = NULL;
|
expect_messages = NULL;
|
||||||
ok(screen_size.cx == registry_mode.dmPelsWidth
|
ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
|
||||||
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
|
param.user32_width, param.user32_height, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = exclusive_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
hr = IDirectDraw4_RestoreDisplayMode(ddraw);
|
||||||
|
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
|
||||||
&& screen_size.cy == registry_mode.dmPelsHeight,
|
&& screen_size.cy == registry_mode.dmPelsHeight,
|
||||||
"Expected screen size %ux%u, got %ux%u.\n",
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
todo_wine ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
@ -2667,6 +2710,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface4_Release(primary);
|
IDirectDrawSurface4_Release(primary);
|
||||||
|
|
||||||
|
/* For Wine. */
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2726,6 +2773,23 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
||||||
|
|
||||||
@ -2790,6 +2854,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface4_Release(primary);
|
IDirectDrawSurface4_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2852,6 +2926,26 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
||||||
|
|
||||||
@ -2916,6 +3010,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface4_Release(primary);
|
IDirectDrawSurface4_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
|
@ -2167,7 +2167,7 @@ static LRESULT CALLBACK mode_set_proc2(HWND hwnd, UINT message, WPARAM wparam, L
|
|||||||
|
|
||||||
struct test_coop_level_mode_set_enum_param
|
struct test_coop_level_mode_set_enum_param
|
||||||
{
|
{
|
||||||
DWORD ddraw_width, ddraw_height;
|
DWORD ddraw_width, ddraw_height, user32_width, user32_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC2 *surface_desc, void *context)
|
static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC2 *surface_desc, void *context)
|
||||||
@ -2180,15 +2180,24 @@ static HRESULT CALLBACK test_coop_level_mode_set_enum_cb(DDSURFACEDESC2 *surface
|
|||||||
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
&& surface_desc->dwHeight == registry_mode.dmPelsHeight)
|
||||||
return DDENUMRET_OK;
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
param->ddraw_width = surface_desc->dwWidth;
|
if (!param->ddraw_width)
|
||||||
param->ddraw_height = surface_desc->dwHeight;
|
{
|
||||||
|
param->ddraw_width = surface_desc->dwWidth;
|
||||||
|
param->ddraw_height = surface_desc->dwHeight;
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
}
|
||||||
|
if (surface_desc->dwWidth == param->ddraw_width && surface_desc->dwHeight == param->ddraw_height)
|
||||||
|
return DDENUMRET_OK;
|
||||||
|
|
||||||
|
param->user32_width = surface_desc->dwWidth;
|
||||||
|
param->user32_height = surface_desc->dwHeight;
|
||||||
return DDENUMRET_CANCEL;
|
return DDENUMRET_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_coop_level_mode_set(void)
|
static void test_coop_level_mode_set(void)
|
||||||
{
|
{
|
||||||
IDirectDrawSurface7 *primary;
|
IDirectDrawSurface7 *primary;
|
||||||
RECT registry_rect, ddraw_rect, r;
|
RECT registry_rect, ddraw_rect, user32_rect, r;
|
||||||
IDirectDraw7 *ddraw;
|
IDirectDraw7 *ddraw;
|
||||||
DDSURFACEDESC2 ddsd;
|
DDSURFACEDESC2 ddsd;
|
||||||
WNDCLASSA wc = {0};
|
WNDCLASSA wc = {0};
|
||||||
@ -2197,6 +2206,9 @@ static void test_coop_level_mode_set(void)
|
|||||||
ULONG ref;
|
ULONG ref;
|
||||||
MSG msg;
|
MSG msg;
|
||||||
struct test_coop_level_mode_set_enum_param param;
|
struct test_coop_level_mode_set_enum_param param;
|
||||||
|
DEVMODEW devmode;
|
||||||
|
BOOL ret;
|
||||||
|
LONG change_ret;
|
||||||
|
|
||||||
static const UINT exclusive_messages[] =
|
static const UINT exclusive_messages[] =
|
||||||
{
|
{
|
||||||
@ -2219,17 +2231,29 @@ static void test_coop_level_mode_set(void)
|
|||||||
memset(¶m, 0, sizeof(param));
|
memset(¶m, 0, sizeof(param));
|
||||||
hr = IDirectDraw7_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
hr = IDirectDraw7_EnumDisplayModes(ddraw, 0, NULL, ¶m, test_coop_level_mode_set_enum_cb);
|
||||||
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to enumerate display mode, hr %#x.\n", hr);
|
||||||
|
ref = IDirectDraw7_Release(ddraw);
|
||||||
|
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
||||||
|
|
||||||
if (!param.ddraw_width)
|
if (!param.user32_height)
|
||||||
{
|
{
|
||||||
skip("Fewer than 2 different modes supported, skipping mode restore test.\n");
|
skip("Fewer than 3 different modes supported, skipping mode restore test.\n");
|
||||||
ref = IDirectDraw7_Release(ddraw);
|
|
||||||
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
SetRect(®istry_rect, 0, 0, registry_mode.dmPelsWidth, registry_mode.dmPelsHeight);
|
||||||
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
SetRect(&ddraw_rect, 0, 0, param.ddraw_width, param.ddraw_height);
|
||||||
|
SetRect(&user32_rect, 0, 0, param.user32_width, param.user32_height);
|
||||||
|
|
||||||
|
memset(&devmode, 0, sizeof(devmode));
|
||||||
|
devmode.dmSize = sizeof(devmode);
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ddraw = create_ddraw();
|
||||||
|
ok(!!ddraw, "Failed to create a ddraw object.\n");
|
||||||
|
|
||||||
wc.lpfnWndProc = mode_set_proc;
|
wc.lpfnWndProc = mode_set_proc;
|
||||||
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
wc.lpszClassName = "ddraw_test_wndproc_wc";
|
||||||
@ -2247,8 +2271,8 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2260,14 +2284,14 @@ static void test_coop_level_mode_set(void)
|
|||||||
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
ok(SUCCEEDED(hr), "Failed to create surface, hr %#x.\n",hr);
|
||||||
hr = IDirectDrawSurface7_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface7_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
@ -2291,10 +2315,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
|
|
||||||
hr = IDirectDrawSurface7_GetSurfaceDesc(primary, &ddsd);
|
hr = IDirectDrawSurface7_GetSurfaceDesc(primary, &ddsd);
|
||||||
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to get surface desc, hr %#x.\n", hr);
|
||||||
ok(ddsd.dwWidth == registry_mode.dmPelsWidth, "Expected surface width %u, got %u.\n",
|
ok(ddsd.dwWidth == param.user32_width, "Expected surface width %u, got %u.\n",
|
||||||
registry_mode.dmPelsWidth, ddsd.dwWidth);
|
param.user32_width, ddsd.dwWidth);
|
||||||
ok(ddsd.dwHeight == registry_mode.dmPelsHeight, "Expected surface height %u, got %u.\n",
|
ok(ddsd.dwHeight == param.user32_height, "Expected surface height %u, got %u.\n",
|
||||||
registry_mode.dmPelsHeight, ddsd.dwHeight);
|
param.user32_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface7_Release(primary);
|
IDirectDrawSurface7_Release(primary);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
@ -2321,18 +2345,37 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = IDirectDraw7_RestoreDisplayMode(ddraw);
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
expect_messages = NULL;
|
expect_messages = NULL;
|
||||||
ok(screen_size.cx == registry_mode.dmPelsWidth
|
ok(screen_size.cx == param.user32_width && screen_size.cy == param.user32_height,
|
||||||
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
|
param.user32_width, param.user32_height, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, &user32_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
user32_rect.left, user32_rect.top, user32_rect.right, user32_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = exclusive_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
hr = IDirectDraw7_RestoreDisplayMode(ddraw);
|
||||||
|
ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
todo_wine ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
todo_wine ok(screen_size.cx == registry_mode.dmPelsWidth
|
||||||
&& screen_size.cy == registry_mode.dmPelsHeight,
|
&& screen_size.cy == registry_mode.dmPelsHeight,
|
||||||
"Expected screen size %ux%u, got %ux%u.\n",
|
"Expected screen size %ux%u, got %ux%u.\n",
|
||||||
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight, screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
GetWindowRect(window, &r);
|
GetWindowRect(window, &r);
|
||||||
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
todo_wine ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
r.left, r.top, r.right, r.bottom);
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
@ -2344,6 +2387,10 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface7_Release(primary);
|
IDirectDrawSurface7_Release(primary);
|
||||||
|
|
||||||
|
/* For Wine. */
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2403,6 +2450,23 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
||||||
|
|
||||||
@ -2467,6 +2531,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface7_Release(primary);
|
IDirectDrawSurface7_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
@ -2529,6 +2603,26 @@ static void test_coop_level_mode_set(void)
|
|||||||
screen_size.cx = 0;
|
screen_size.cx = 0;
|
||||||
screen_size.cy = 0;
|
screen_size.cy = 0;
|
||||||
|
|
||||||
|
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
|
devmode.dmPelsWidth = param.user32_width;
|
||||||
|
devmode.dmPelsHeight = param.user32_height;
|
||||||
|
change_ret = ChangeDisplaySettingsW(&devmode, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
|
ok(!*expect_messages, "Expected message %#x, but didn't receive it.\n", *expect_messages);
|
||||||
|
expect_messages = NULL;
|
||||||
|
ok(!screen_size.cx && !screen_size.cy, "Got unexpected screen size %ux%u.\n", screen_size.cx, screen_size.cy);
|
||||||
|
|
||||||
|
GetWindowRect(window, &r);
|
||||||
|
ok(EqualRect(&r, ®istry_rect), "Expected {%d, %d, %d, %d}, got {%d, %d, %d, %d}.\n",
|
||||||
|
registry_rect.left, registry_rect.top, registry_rect.right, registry_rect.bottom,
|
||||||
|
r.left, r.top, r.right, r.bottom);
|
||||||
|
|
||||||
|
PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE);
|
||||||
|
expect_messages = normal_messages;
|
||||||
|
screen_size.cx = 0;
|
||||||
|
screen_size.cy = 0;
|
||||||
|
|
||||||
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
hr = set_display_mode(ddraw, param.ddraw_width, param.ddraw_height);
|
||||||
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
ok(SUCCEEDED(hr), "Failed to set display mode, hr %#x.\n", hr);
|
||||||
|
|
||||||
@ -2593,6 +2687,16 @@ static void test_coop_level_mode_set(void)
|
|||||||
param.ddraw_height, ddsd.dwHeight);
|
param.ddraw_height, ddsd.dwHeight);
|
||||||
IDirectDrawSurface7_Release(primary);
|
IDirectDrawSurface7_Release(primary);
|
||||||
|
|
||||||
|
ret = EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||||
|
ok(ret, "Failed to get display mode.\n");
|
||||||
|
todo_wine ok(devmode.dmPelsWidth == registry_mode.dmPelsWidth
|
||||||
|
&& devmode.dmPelsHeight == registry_mode.dmPelsHeight,
|
||||||
|
"Expected resolution %ux%u, got %ux%u.\n",
|
||||||
|
registry_mode.dmPelsWidth, registry_mode.dmPelsHeight,
|
||||||
|
devmode.dmPelsWidth, devmode.dmPelsHeight);
|
||||||
|
change_ret = ChangeDisplaySettingsW(NULL, CDS_FULLSCREEN);
|
||||||
|
ok(change_ret == DISP_CHANGE_SUCCESSFUL, "Failed to change display mode, ret %#x.\n", change_ret);
|
||||||
|
|
||||||
memset(&ddsd, 0, sizeof(ddsd));
|
memset(&ddsd, 0, sizeof(ddsd));
|
||||||
ddsd.dwSize = sizeof(ddsd);
|
ddsd.dwSize = sizeof(ddsd);
|
||||||
ddsd.dwFlags = DDSD_CAPS;
|
ddsd.dwFlags = DDSD_CAPS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user