Stefan Dösinger : ddraw: Send the ddraw output to the clipper window, if any.

Alexandre Julliard julliard at winehq.org
Tue Aug 19 08:46:29 CDT 2008


Module: wine
Branch: master
Commit: c1bbab7c54618935d74b7d2b70421253018f5594
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c1bbab7c54618935d74b7d2b70421253018f5594

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Thu Aug  7 14:09:19 2008 -0500

ddraw: Send the ddraw output to the clipper window, if any.

---

 dlls/ddraw/ddraw.c   |    2 +-
 dlls/ddraw/surface.c |   17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 425503f..31dfd1d 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -3254,12 +3254,12 @@ IDirectDrawImpl_AttachD3DDevice(IDirectDrawImpl *This,
 
         ShowWindow(window, SW_HIDE);   /* Just to be sure */
         WARN("(%p) No window for the Direct3DDevice, created a hidden window. HWND=%p\n", This, window);
-        This->d3d_window = window;
     }
     else
     {
         TRACE("(%p) Using existing window %p for Direct3D rendering\n", This, window);
     }
+    This->d3d_window = window;
 
     /* Store the future Render Target surface */
     This->d3d_target = primary;
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index b4129b3..664229b 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -2210,6 +2210,7 @@ IDirectDrawSurfaceImpl_SetClipper(IDirectDrawSurface7 *iface,
 {
     ICOM_THIS_FROM(IDirectDrawSurfaceImpl, IDirectDrawSurface7, iface);
     IDirectDrawClipperImpl *oldClipper = This->clipper;
+    HWND clipWindow;
     HRESULT hr;
     TRACE("(%p)->(%p)\n",This,Clipper);
 
@@ -2228,6 +2229,22 @@ IDirectDrawSurfaceImpl_SetClipper(IDirectDrawSurface7 *iface,
         IDirectDrawClipper_Release(ICOM_INTERFACE(oldClipper, IDirectDrawClipper));
 
     hr = IWineD3DSurface_SetClipper(This->WineD3DSurface, This->clipper ? This->clipper->wineD3DClipper : NULL);
+
+    if(This->wineD3DSwapChain) {
+        clipWindow = NULL;
+        if(Clipper) {
+            IDirectDrawClipper_GetHWnd(Clipper, &clipWindow);
+        }
+
+        if(clipWindow) {
+            IWineD3DSwapChain_SetDestWindowOverride(This->wineD3DSwapChain,
+                                                    clipWindow);
+        } else {
+            IWineD3DSwapChain_SetDestWindowOverride(This->wineD3DSwapChain,
+                                                    This->ddraw->d3d_window);
+        }
+    }
+
     LeaveCriticalSection(&ddraw_cs);
     return hr;
 }




More information about the wine-cvs mailing list