2 * X11DRV clipping functions
4 * Copyright 1998 Huw Davies
14 /***********************************************************************
15 * X11DRV_SetDeviceClipping
16 * Copy RECT32s to a temporary buffer of XRectangles and call
17 * TSXSetClipRectangles().
19 * Could write using GetRegionData but this would be slower.
21 void X11DRV_SetDeviceClipping( DC
* dc
)
24 X11DRV_PDEVICE
*physDev
= (X11DRV_PDEVICE
*)dc
->physDev
;
26 RGNOBJ
*obj
= (RGNOBJ
*) GDI_GetObjPtr(dc
->w
.hGCClipRgn
, REGION_MAGIC
);
29 ERR(x11drv
, "Rgn is 0. Please report this.\n");
33 if (obj
->rgn
->numRects
> 0)
36 RECT32
*pRect
= obj
->rgn
->rects
;
37 RECT32
*pEndRect
= obj
->rgn
->rects
+ obj
->rgn
->numRects
;
39 pXrect
= HeapAlloc( GetProcessHeap(), 0,
40 sizeof(*pXrect
) * obj
->rgn
->numRects
);
43 WARN(x11drv
, "Can't alloc buffer\n");
47 for(pXr
= pXrect
; pRect
< pEndRect
; pRect
++, pXr
++)
51 pXr
->width
= pRect
->right
- pRect
->left
;
52 pXr
->height
= pRect
->bottom
- pRect
->top
;
58 TSXSetClipRectangles( display
, physDev
->gc
, 0, 0,
59 pXrect
, obj
->rgn
->numRects
, YXBanded
);
62 HeapFree( GetProcessHeap(), 0, pXrect
);
64 GDI_HEAP_UNLOCK( dc
->w
.hGCClipRgn
);