Module: wine Branch: master Commit: 2a63a03eb1d8c35ba9ba801068e2e5f860e67f5a URL: http://source.winehq.org/git/wine.git/?a=commit;h=2a63a03eb1d8c35ba9ba801068...
Author: Vitaliy Margolen wine-patches@kievinfo.com Date: Thu Dec 14 15:51:23 2006 -0700
wined3d: When changing display modes clip cursor to the requested display size.
---
dlls/ddraw/tests/ddrawmodes.c | 22 +++++++++++++++++++++- dlls/wined3d/device.c | 5 +++++ 2 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/dlls/ddraw/tests/ddrawmodes.c b/dlls/ddraw/tests/ddrawmodes.c index f11021d..4db0856 100644 --- a/dlls/ddraw/tests/ddrawmodes.c +++ b/dlls/ddraw/tests/ddrawmodes.c @@ -146,7 +146,27 @@ static void setdisplaymode(int i) modes[i].dwWidth, modes[i].dwHeight, U1(modes[i].ddpfPixelFormat).dwRGBBitCount); ok(DD_OK==rc || DDERR_UNSUPPORTED==rc,"SetDisplayMode returned: %x\n",rc); - if (DD_OK==rc) { + if (rc == DD_OK) + { + RECT r, scrn, virt; + + SetRect(&virt, 0, 0, GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN)); + OffsetRect(&virt, GetSystemMetrics(SM_XVIRTUALSCREEN), GetSystemMetrics(SM_YVIRTUALSCREEN)); + SetRect(&scrn, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); + trace("Mode (%dx%d) [%dx%d] (%d %d)x(%d %d)\n", modes[i].dwWidth, modes[i].dwHeight, + scrn.right, scrn.bottom, virt.left, virt.top, virt.right, virt.bottom); + + ok(GetClipCursor(&r), "GetClipCursor() failed\n"); + /* ddraw sets clip rect here to the screen size, even for + multiple monitors */ + ok(EqualRect(&r, &scrn), "Invalid clip rect: (%d %d) x (%d %d)\n", + r.left, r.top, r.right, r.bottom); + + ok(ClipCursor(NULL), "ClipCursor() failed\n"); + ok(GetClipCursor(&r), "GetClipCursor() failed\n"); + ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", + r.left, r.top, r.right, r.bottom); + rc = IDirectDraw_RestoreDisplayMode(lpDD); ok(DD_OK==rc,"RestoreDisplayMode returned: %x\n",rc); } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index a78b005..ff3c987 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2254,6 +2254,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; LONG ret; const PixelFormatDesc *formatDesc = getFormatDescEntry(pMode->Format); + RECT clip_rc;
TRACE("(%p)->(%d,%p) Mode=%dx%dx@%d, %s\n", This, iSwapChain, pMode, pMode->Width, pMode->Height, pMode->RefreshRate, debug_d3dformat(pMode->Format));
@@ -2304,6 +2305,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl if(This->ddraw_window) MoveWindow(This->ddraw_window, 0, 0, pMode->Width, pMode->Height, TRUE);
+ /* And finally clip mouse to our screen */ + SetRect(&clip_rc, 0, 0, pMode->Width, pMode->Height); + ClipCursor(&clip_rc); + return WINED3D_OK; }