Henri Verbeet : ddraw: Implement get_window_region() on top of GetRandomRgn ().
Alexandre Julliard
julliard at winehq.org
Mon Feb 6 15:17:57 CST 2012
Module: wine
Branch: master
Commit: 204e53e449474253af6b2d7dc267a5fa37476649
URL: http://source.winehq.org/git/wine.git/?a=commit;h=204e53e449474253af6b2d7dc267a5fa37476649
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Fri Feb 3 22:00:27 2012 +0100
ddraw: Implement get_window_region() on top of GetRandomRgn().
Instead of just GetClientRect(). This fixes a regression introduced by
3e9fe3e938f26a8c831f92367a13776d165cfdf8. We also need to clip against e.g.
the screen edges instead of just the client rect.
---
dlls/ddraw/clipper.c | 29 +++++++++++++++++++----------
1 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/dlls/ddraw/clipper.c b/dlls/ddraw/clipper.c
index 81e9e8b..89a3bf3 100644
--- a/dlls/ddraw/clipper.c
+++ b/dlls/ddraw/clipper.c
@@ -99,29 +99,38 @@ static HRESULT WINAPI ddraw_clipper_SetHWnd(IDirectDrawClipper *iface, DWORD fla
static HRGN get_window_region(HWND window)
{
- POINT origin = {0, 0};
- RECT client_rect;
+ POINT origin;
+ HRGN rgn;
+ HDC dc;
- if (!GetClientRect(window, &client_rect))
+ if (!(dc = GetDC(window)))
{
- /* This can happen if the window is destroyed, for example. */
- WARN("Failed to get client rect.\n");
+ WARN("Failed to get dc.\n");
return NULL;
}
- if (!ClientToScreen(window, &origin))
+ if (!(rgn = CreateRectRgn(0, 0, 0, 0)))
{
- ERR("Failed to translate origin.\n");
+ ERR("Failed to create region.\n");
+ ReleaseDC(window, dc);
return NULL;
}
- if (!OffsetRect(&client_rect, origin.x, origin.y))
+ if (GetRandomRgn(dc, rgn, SYSRGN) != 1)
{
- ERR("Failed to translate client rect.\n");
+ ERR("Failed to get window region.\n");
+ DeleteObject(rgn);
+ ReleaseDC(window, dc);
return NULL;
}
- return CreateRectRgnIndirect(&client_rect);
+ if (GetVersion() & 0x80000000)
+ {
+ GetDCOrgEx(dc, &origin);
+ OffsetRgn(rgn, origin.x, origin.y);
+ }
+
+ return rgn;
}
/*****************************************************************************
More information about the wine-cvs
mailing list