Vitaliy Margolen : wined3d:
When changing display modes clip cursor to the requested display size.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Dec 15 07:21:42 CST 2006
Module: wine
Branch: master
Commit: 2a63a03eb1d8c35ba9ba801068e2e5f860e67f5a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2a63a03eb1d8c35ba9ba801068e2e5f860e67f5a
Author: Vitaliy Margolen <wine-patches at 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;
}
More information about the wine-cvs
mailing list