forked from Mirrors/wine-wine
- implementation of SetWindowsRgn and GetWindowRgn
- X11DRV and TTYDRV updated with new API SetWindowRgnoldstable
parent
7b49914afc
commit
5b6879c5c0
10
configure.in
10
configure.in
|
@ -177,6 +177,16 @@ then
|
||||||
AC_MSG_WARN([Xshm extension not found!!])
|
AC_MSG_WARN([Xshm extension not found!!])
|
||||||
)
|
)
|
||||||
|
|
||||||
|
dnl *** Check for X shape extension
|
||||||
|
AC_CHECK_HEADERS(X11/Xlib.h X11/extensions/shape.h,
|
||||||
|
[ dnl *** If X11/extensions/shape.h exists...
|
||||||
|
AC_CHECK_LIB(Xext,XShapeQueryExtension,
|
||||||
|
AC_DEFINE(HAVE_LIBXSHAPE),,
|
||||||
|
$X_LIBS -lXext -lX11 $X_EXTRA_LIBS)
|
||||||
|
],
|
||||||
|
AC_MSG_WARN([XShape extension found!!])
|
||||||
|
)
|
||||||
|
|
||||||
dnl *** Check for XFree86 DGA / DGA 2.0 extension
|
dnl *** Check for XFree86 DGA / DGA 2.0 extension
|
||||||
AC_CHECK_HEADERS(X11/extensions/xf86dga.h,
|
AC_CHECK_HEADERS(X11/extensions/xf86dga.h,
|
||||||
[ dnl *** If X11/extensions/xf86dga.h exists, check
|
[ dnl *** If X11/extensions/xf86dga.h exists, check
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <X11/cursorfont.h>
|
#include <X11/cursorfont.h>
|
||||||
#include "ts_xlib.h"
|
#include "ts_xlib.h"
|
||||||
#include "ts_xutil.h"
|
#include "ts_xutil.h"
|
||||||
|
#include "ts_shape.h"
|
||||||
|
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "wine/winbase16.h"
|
#include "wine/winbase16.h"
|
||||||
|
|
|
@ -24,6 +24,9 @@
|
||||||
/* Define if you have the X Shm extension */
|
/* Define if you have the X Shm extension */
|
||||||
#undef HAVE_LIBXXSHM
|
#undef HAVE_LIBXXSHM
|
||||||
|
|
||||||
|
/* Define if you have the X Shape extension */
|
||||||
|
#undef HAVE_LIBXSHAPE
|
||||||
|
|
||||||
/* Define if you have the Xxf86vm library */
|
/* Define if you have the Xxf86vm library */
|
||||||
#undef HAVE_LIBXXF86VM
|
#undef HAVE_LIBXXF86VM
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,9 @@
|
||||||
/* Define if you have the X Shm extension */
|
/* Define if you have the X Shm extension */
|
||||||
#undef HAVE_LIBXXSHM
|
#undef HAVE_LIBXXSHM
|
||||||
|
|
||||||
|
/* Define if you have the X Shape extension */
|
||||||
|
#undef HAVE_LIBXSHAPE
|
||||||
|
|
||||||
/* Define if you have the Xxf86vm library */
|
/* Define if you have the Xxf86vm library */
|
||||||
#undef HAVE_LIBXXF86VM
|
#undef HAVE_LIBXXF86VM
|
||||||
|
|
||||||
|
@ -257,6 +260,9 @@
|
||||||
/* Define if you have the <X11/extensions/XShm.h> header file. */
|
/* Define if you have the <X11/extensions/XShm.h> header file. */
|
||||||
#undef HAVE_X11_EXTENSIONS_XSHM_H
|
#undef HAVE_X11_EXTENSIONS_XSHM_H
|
||||||
|
|
||||||
|
/* Define if you have the <X11/extensions/shape.h> header file. */
|
||||||
|
#undef HAVE_X11_EXTENSIONS_SHAPE_H
|
||||||
|
|
||||||
/* Define if you have the <X11/extensions/xf86dga.h> header file. */
|
/* Define if you have the <X11/extensions/xf86dga.h> header file. */
|
||||||
#undef HAVE_X11_EXTENSIONS_XF86DGA_H
|
#undef HAVE_X11_EXTENSIONS_XF86DGA_H
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Thread safe wrappers around shape calls.
|
||||||
|
* Always include this file instead of <X11/shape.h>.
|
||||||
|
* This file was generated automatically by tools/make_X11wrappers
|
||||||
|
*
|
||||||
|
* Copyright 1998 Kristian Nielsen
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WINE_TS_SHAPE_H
|
||||||
|
#define __WINE_TS_SHAPE_H
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBXSHAPE
|
||||||
|
#include <X11/IntrinsicP.h>
|
||||||
|
|
||||||
|
#include <X11/extensions/shape.h>
|
||||||
|
|
||||||
|
extern void TSXShapeCombineRectangles(Display*, Window, int, int, int, XRectangle*, int, int, int);
|
||||||
|
extern void TSXShapeCombineMask(Display*, Window, int, int, int, Pixmap, int);
|
||||||
|
|
||||||
|
#endif /* defined(HAVE_LIBXSHAPE) */
|
||||||
|
|
||||||
|
#endif /* __WINE_TS_SHAPE_H */
|
|
@ -201,5 +201,6 @@ extern void TTYDRV_WND_ScrollWindow(struct tagWND *wndPtr, struct tagDC *dcPtr,
|
||||||
extern void TTYDRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD flags, BOOL bSetClipOrigin);
|
extern void TTYDRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD flags, BOOL bSetClipOrigin);
|
||||||
extern BOOL TTYDRV_WND_SetHostAttr(struct tagWND *wndPtr, INT haKey, INT value);
|
extern BOOL TTYDRV_WND_SetHostAttr(struct tagWND *wndPtr, INT haKey, INT value);
|
||||||
extern BOOL TTYDRV_WND_IsSelfClipping(struct tagWND *wndPtr);
|
extern BOOL TTYDRV_WND_IsSelfClipping(struct tagWND *wndPtr);
|
||||||
|
extern void TTYDRV_WND_SetWindowRgn(struct tagWND *wndPtr, HRGN hrgnWnd);
|
||||||
|
|
||||||
#endif /* !defined(__WINE_TTYDRV_H) */
|
#endif /* !defined(__WINE_TTYDRV_H) */
|
||||||
|
|
|
@ -78,6 +78,7 @@ typedef struct tagWND
|
||||||
struct tagDCE *dce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
|
struct tagDCE *dce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
|
||||||
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
|
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
|
||||||
HRGN16 hrgnUpdate; /* Update region */
|
HRGN16 hrgnUpdate; /* Update region */
|
||||||
|
HRGN hrgnWnd; /* window's region */
|
||||||
HWND hwndLastActive;/* Last active popup hwnd */
|
HWND hwndLastActive;/* Last active popup hwnd */
|
||||||
DWORD dwStyle; /* Window style (from CreateWindow) */
|
DWORD dwStyle; /* Window style (from CreateWindow) */
|
||||||
DWORD dwExStyle; /* Extended style (from CreateWindowEx) */
|
DWORD dwExStyle; /* Extended style (from CreateWindowEx) */
|
||||||
|
@ -131,6 +132,7 @@ typedef struct tagWND_DRIVER
|
||||||
void (*pSetDrawable)(WND *, struct tagDC *, WORD, BOOL);
|
void (*pSetDrawable)(WND *, struct tagDC *, WORD, BOOL);
|
||||||
BOOL (*pSetHostAttr)(WND *, INT haKey, INT value);
|
BOOL (*pSetHostAttr)(WND *, INT haKey, INT value);
|
||||||
BOOL (*pIsSelfClipping)(WND *);
|
BOOL (*pIsSelfClipping)(WND *);
|
||||||
|
void (*pSetWindowRgn)(WND *, const HRGN);
|
||||||
} WND_DRIVER;
|
} WND_DRIVER;
|
||||||
|
|
||||||
extern WND_DRIVER *WND_Driver;
|
extern WND_DRIVER *WND_Driver;
|
||||||
|
|
|
@ -431,6 +431,7 @@ extern void X11DRV_WND_SetDrawable(struct tagWND *wndPtr, struct tagDC *dc, WORD
|
||||||
extern BOOL X11DRV_WND_SetHostAttr(struct tagWND *wndPtr, INT haKey, INT value);
|
extern BOOL X11DRV_WND_SetHostAttr(struct tagWND *wndPtr, INT haKey, INT value);
|
||||||
extern BOOL X11DRV_WND_IsSelfClipping(struct tagWND *wndPtr);
|
extern BOOL X11DRV_WND_IsSelfClipping(struct tagWND *wndPtr);
|
||||||
extern void X11DRV_WND_DockWindow(struct tagWND *wndPtr);
|
extern void X11DRV_WND_DockWindow(struct tagWND *wndPtr);
|
||||||
|
extern void X11DRV_WND_SetWindowRgn(struct tagWND *wndPtr, HRGN hrgnWnd);
|
||||||
|
|
||||||
extern int X11DRV_EVENT_PrepareShmCompletion( Drawable dw );
|
extern int X11DRV_EVENT_PrepareShmCompletion( Drawable dw );
|
||||||
extern void X11DRV_EVENT_WaitShmCompletion( int compl );
|
extern void X11DRV_EVENT_WaitShmCompletion( int compl );
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
$X11_include_dir = "/usr/X11/include";
|
$X11_include_dir = "/usr/X11/include";
|
||||||
$outdir = "tsx11";
|
$outdir = "tsx11";
|
||||||
$wantfile = "$outdir/X11_calls";
|
$wantfile = "$outdir/X11_calls";
|
||||||
@dolist = ("Xlib", "Xresource", "Xutil", "xpm", "XShm", "xf86dga", "xf86dga2", "xf86vmode");
|
@dolist = ("Xlib", "Xresource", "Xutil", "xpm", "XShm", "xf86dga", "xf86dga2", "xf86vmode", "shape");
|
||||||
|
|
||||||
# First read list of wanted function names.
|
# First read list of wanted function names.
|
||||||
|
|
||||||
|
@ -80,6 +80,14 @@ foreach $name (@dolist) {
|
||||||
$pre_file = "#include \"windef.h\"\n#ifdef HAVE_LIBXXF86VM\n#define XMD_H\n#include \"basetsd.h\"\n";
|
$pre_file = "#include \"windef.h\"\n#ifdef HAVE_LIBXXF86VM\n#define XMD_H\n#include \"basetsd.h\"\n";
|
||||||
$post_file = "#endif /* defined(HAVE_LIBXXF86VM) */\n";
|
$post_file = "#endif /* defined(HAVE_LIBXXF86VM) */\n";
|
||||||
}
|
}
|
||||||
|
if($name eq "shape") {
|
||||||
|
$extensions_dir = "extensions/";
|
||||||
|
$pre_file = "#ifdef HAVE_LIBXSHAPE\n#include <X11/IntrinsicP.h>\n";
|
||||||
|
$post_file = "#endif /* defined(HAVE_LIBXSHAPE) */\n";
|
||||||
|
$inc_name = "shape";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print OUTH <<END;
|
print OUTH <<END;
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -13,6 +13,7 @@ C_SRCS = \
|
||||||
ts_xlib.c \
|
ts_xlib.c \
|
||||||
ts_xresource.c \
|
ts_xresource.c \
|
||||||
ts_xutil.c \
|
ts_xutil.c \
|
||||||
|
ts_shape.c \
|
||||||
ts_xpm.c
|
ts_xpm.c
|
||||||
|
|
||||||
all: $(MODULE).o
|
all: $(MODULE).o
|
||||||
|
|
|
@ -143,6 +143,8 @@ XSetWMHints
|
||||||
XSetWMProperties
|
XSetWMProperties
|
||||||
XSetWMProtocols
|
XSetWMProtocols
|
||||||
XSetWMSizeHints
|
XSetWMSizeHints
|
||||||
|
XShapeCombineMask
|
||||||
|
XShapeCombineRectangles
|
||||||
XShmAttach
|
XShmAttach
|
||||||
XShmCreateImage
|
XShmCreateImage
|
||||||
XShmCreatePixmap
|
XShmCreatePixmap
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Thread safe wrappers around shape calls.
|
||||||
|
* This file was generated automatically by tools/make_X11wrappers
|
||||||
|
* DO NOT EDIT!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBXSHAPE
|
||||||
|
#include <X11/IntrinsicP.h>
|
||||||
|
|
||||||
|
#include <X11/extensions/shape.h>
|
||||||
|
|
||||||
|
#include "debugtools.h"
|
||||||
|
#include "ts_shape.h"
|
||||||
|
#include "x11drv.h"
|
||||||
|
|
||||||
|
DEFAULT_DEBUG_CHANNEL(x11)
|
||||||
|
|
||||||
|
void TSXShapeCombineRectangles(Display* a0, Window a1, int a2, int a3, int a4, XRectangle* a5, int a6, int a7, int a8)
|
||||||
|
{
|
||||||
|
TRACE("Call XShapeCombineRectangles\n");
|
||||||
|
EnterCriticalSection( &X11DRV_CritSection );
|
||||||
|
XShapeCombineRectangles(a0, a1, a2, a3, a4, a5, a6, a7, a8);
|
||||||
|
LeaveCriticalSection( &X11DRV_CritSection );
|
||||||
|
TRACE("Ret XShapeCombineRectangles\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSXShapeCombineMask(Display* a0, Window a1, int a2, int a3, int a4, Pixmap a5, int a6)
|
||||||
|
{
|
||||||
|
TRACE("Call XShapeCombineMask\n");
|
||||||
|
EnterCriticalSection( &X11DRV_CritSection );
|
||||||
|
XShapeCombineMask(a0, a1, a2, a3, a4, a5, a6);
|
||||||
|
LeaveCriticalSection( &X11DRV_CritSection );
|
||||||
|
TRACE("Ret XShapeCombineMask\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* defined(HAVE_LIBXSHAPE) */
|
||||||
|
|
|
@ -39,7 +39,8 @@ WND_DRIVER TTYDRV_WND_Driver =
|
||||||
TTYDRV_WND_ScrollWindow,
|
TTYDRV_WND_ScrollWindow,
|
||||||
TTYDRV_WND_SetDrawable,
|
TTYDRV_WND_SetDrawable,
|
||||||
TTYDRV_WND_SetHostAttr,
|
TTYDRV_WND_SetHostAttr,
|
||||||
TTYDRV_WND_IsSelfClipping
|
TTYDRV_WND_IsSelfClipping,
|
||||||
|
TTYDRV_WND_SetWindowRgn
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -241,3 +241,11 @@ BOOL TTYDRV_WND_IsSelfClipping(WND *wndPtr)
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* TTYDRV_WND_SetWindowRgn
|
||||||
|
*/
|
||||||
|
void TTYDRV_WND_SetWindowRgn(struct tagWND *wndPtr, HRGN hrgnWnd)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "winerror.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
|
@ -271,38 +272,74 @@ BOOL WINAPI GetWindowRect( HWND hwnd, LPRECT rect )
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetWindowRgn
|
* GetWindowRgn (USER32)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI GetWindowRgn ( HWND hwnd, HRGN hrgn )
|
int WINAPI GetWindowRgn ( HWND hwnd, HRGN hrgn )
|
||||||
|
|
||||||
{
|
{
|
||||||
RECT rect;
|
int nRet = ERROR;
|
||||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
if (!wndPtr) return (ERROR);
|
if (wndPtr)
|
||||||
|
{
|
||||||
FIXME("GetWindowRgn: doesn't really do regions\n");
|
if (wndPtr->hrgnWnd) nRet = CombineRgn( hrgn, wndPtr->hrgnWnd, 0, RGN_COPY );
|
||||||
|
WIN_ReleaseWndPtr(wndPtr);
|
||||||
memset (&rect, 0, sizeof(rect));
|
}
|
||||||
|
return nRet;
|
||||||
GetWindowRect ( hwnd, &rect );
|
|
||||||
|
|
||||||
FIXME("Check whether a valid region here\n");
|
|
||||||
|
|
||||||
SetRectRgn ( hrgn, rect.left, rect.top, rect.right, rect.bottom );
|
|
||||||
|
|
||||||
WIN_ReleaseWndPtr(wndPtr);
|
|
||||||
return (SIMPLEREGION);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetWindowRgn
|
* SetWindowRgn (USER32)
|
||||||
*/
|
*/
|
||||||
INT WINAPI SetWindowRgn( HWND hwnd, HRGN hrgn,BOOL bRedraw)
|
int WINAPI SetWindowRgn( HWND hwnd, HRGN hrgn, BOOL bRedraw )
|
||||||
|
|
||||||
{
|
{
|
||||||
|
int ret = FALSE;
|
||||||
|
RECT tempRect;
|
||||||
|
|
||||||
FIXME("SetWindowRgn: stub\n");
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
return TRUE;
|
|
||||||
|
if (!wndPtr) return FALSE;
|
||||||
|
|
||||||
|
/* a region exists for this window */
|
||||||
|
if (hrgn != 0 && hrgn == wndPtr->hrgnWnd)
|
||||||
|
{
|
||||||
|
/* can't replace actual region with same region
|
||||||
|
since we're now owner of that region
|
||||||
|
*/
|
||||||
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wndPtr->hrgnWnd)
|
||||||
|
{
|
||||||
|
/* delete previous region */
|
||||||
|
DeleteObject(wndPtr->hrgnWnd);
|
||||||
|
wndPtr->hrgnWnd = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we'd like to set it back to 0 */
|
||||||
|
if (hrgn == 0)
|
||||||
|
{
|
||||||
|
GetWindowRect(hwnd, &tempRect);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* verify that region really exists */
|
||||||
|
if (GetRgnBox(hrgn, &tempRect) == ERROR) goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* valid region handle */
|
||||||
|
wndPtr->hrgnWnd = hrgn;
|
||||||
|
SetWindowPos( hwnd, NULL, tempRect.left, tempRect.top,
|
||||||
|
tempRect.right - tempRect.left, tempRect.bottom - tempRect.top,
|
||||||
|
SWP_NOSIZE | SWP_FRAMECHANGED | SWP_NOMOVE |
|
||||||
|
SWP_NOZORDER | (bRedraw ? 0 : SWP_NOREDRAW) );
|
||||||
|
|
||||||
|
wndPtr->pDriver->pSetWindowRgn(wndPtr, hrgn);
|
||||||
|
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
done:
|
||||||
|
WIN_ReleaseWndPtr(wndPtr);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -39,7 +39,8 @@ WND_DRIVER X11DRV_WND_Driver =
|
||||||
X11DRV_WND_SurfaceCopy,
|
X11DRV_WND_SurfaceCopy,
|
||||||
X11DRV_WND_SetDrawable,
|
X11DRV_WND_SetDrawable,
|
||||||
X11DRV_WND_SetHostAttr,
|
X11DRV_WND_SetHostAttr,
|
||||||
X11DRV_WND_IsSelfClipping
|
X11DRV_WND_IsSelfClipping,
|
||||||
|
X11DRV_WND_SetWindowRgn
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "ts_xlib.h"
|
#include "ts_xlib.h"
|
||||||
#include "ts_xutil.h"
|
#include "ts_xutil.h"
|
||||||
|
#include "ts_shape.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -1010,3 +1011,62 @@ void X11DRV_WND_DockWindow(WND *wndPtr)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* X11DRV_WND_SetWindowRgn
|
||||||
|
*
|
||||||
|
* Assign specified region to window (for non-rectangular windows)
|
||||||
|
*/
|
||||||
|
void X11DRV_WND_SetWindowRgn(WND *wndPtr, HRGN hrgnWnd)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_LIBXSHAPE
|
||||||
|
Window win = X11DRV_WND_GetXWindow(wndPtr);
|
||||||
|
|
||||||
|
if (!win) return;
|
||||||
|
|
||||||
|
if (!hrgnWnd)
|
||||||
|
{
|
||||||
|
TSXShapeCombineMask( display, win, ShapeBounding, 0, 0, None, ShapeSet );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XRectangle *aXRect;
|
||||||
|
DWORD size;
|
||||||
|
DWORD dwBufferSize = GetRegionData(hrgnWnd, 0, NULL);
|
||||||
|
PRGNDATA pRegionData = HeapAlloc(GetProcessHeap(), 0, dwBufferSize);
|
||||||
|
if (!pRegionData) return;
|
||||||
|
|
||||||
|
GetRegionData(hrgnWnd, dwBufferSize, pRegionData);
|
||||||
|
size = pRegionData->rdh.nCount;
|
||||||
|
/* convert region's "Windows rectangles" to XRectangles */
|
||||||
|
aXRect = HeapAlloc(GetProcessHeap(), 0, size * sizeof(*aXRect) );
|
||||||
|
if (aXRect)
|
||||||
|
{
|
||||||
|
XRectangle* pCurrRect = aXRect;
|
||||||
|
RECT *pRect = (RECT*) pRegionData->Buffer;
|
||||||
|
for (; pRect < ((RECT*) pRegionData->Buffer) + size ; ++pRect, ++pCurrRect)
|
||||||
|
{
|
||||||
|
pCurrRect->x = pRect->left;
|
||||||
|
pCurrRect->y = pRect->top;
|
||||||
|
pCurrRect->height = pRect->bottom - pRect->top;
|
||||||
|
pCurrRect->width = pRect->right - pRect->left;
|
||||||
|
|
||||||
|
TRACE("Rectangle %04d of %04ld data: X=%04d, Y=%04d, Height=%04d, Width=%04d.\n",
|
||||||
|
pRect - (RECT*) pRegionData->Buffer,
|
||||||
|
size,
|
||||||
|
pCurrRect->x,
|
||||||
|
pCurrRect->y,
|
||||||
|
pCurrRect->height,
|
||||||
|
pCurrRect->width);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* shape = non-rectangular windows (X11/extensions) */
|
||||||
|
TSXShapeCombineRectangles( display, win, ShapeBounding,
|
||||||
|
0, 0, aXRect,
|
||||||
|
pCurrRect - aXRect, ShapeSet, YXBanded );
|
||||||
|
HeapFree(GetProcessHeap(), 0, aXRect );
|
||||||
|
}
|
||||||
|
HeapFree(GetProcessHeap(), 0, pRegionData);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_LIBXSHAPE */
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue