[PATCH resend 1/3] Quit wrapping ChangeClip, CopyClip, and DestroyClip in GCFuncs.
Aaron Plattner
aplattner at nvidia.com
Wed Sep 28 11:02:42 PDT 2011
Xserer-spec.xml still lists ChangeClip in the "mi" section in the list
of server routines for porting, and DestroyClip in the "ddx" section.
Can't you drop the CT_PIXMAP case in xnestChangeClip? I guess it
doesn't actually matter since it's just dead code and it gets removed in
patch 2/3 anyway...
Other than that,
Reviewed-by: Aaron Plattner <aplattner at nvidia.com>
On 09/26/2011 10:53 PM, Jamey Sharp wrote:
> Use the mi implementation of these functions instead, moving them to
> dix/gc.c.
>
> Signed-off-by: Jamey Sharp<jamey at minilop.net>
> ---
> Xext/panoramiX.c | 32 ------
> dix/gc.c | 87 +++++++++++++--
> doc/Xserver-spec.xml | 74 +-------------
> exa/exa.c | 48 --------
> fb/fbgc.c | 3 -
> hw/dmx/dmxgc.c | 123 ++++++++-------------
> hw/dmx/dmxgc.h | 3 -
> hw/xfree86/common/xf86VGAarbiter.c | 31 +-----
> hw/xfree86/common/xf86VGAarbiterPriv.h | 4 -
> hw/xfree86/shadowfb/shadow.c | 35 ------
> hw/xfree86/xaa/xaaGC.c | 31 ------
> hw/xnest/GC.c | 186 +++++++-------------------------
> hw/xnest/XNGC.h | 4 -
> hw/xwin/wingc.c | 42 -------
> include/gcstruct.h | 20 ++---
> mi/mibitblt.c | 4 +-
> mi/migc.c | 70 ------------
> mi/migc.h | 16 ---
> miext/cw/cw.c | 52 +---------
> miext/damage/damage.c | 31 ------
> miext/rootless/rootlessGC.c | 29 -----
> render/mirect.c | 2 +-
> xfixes/region.c | 2 +-
> 23 files changed, 177 insertions(+), 752 deletions(-)
>
> diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
> index fae7c81..668831f 100644
> --- a/Xext/panoramiX.c
> +++ b/Xext/panoramiX.c
> @@ -129,13 +129,9 @@ static void XineramaValidateGC(GCPtr, unsigned long, DrawablePtr);
> static void XineramaChangeGC(GCPtr, unsigned long);
> static void XineramaCopyGC(GCPtr, unsigned long, GCPtr);
> static void XineramaDestroyGC(GCPtr);
> -static void XineramaChangeClip(GCPtr, int, pointer, int);
> -static void XineramaDestroyClip(GCPtr);
> -static void XineramaCopyClip(GCPtr, GCPtr);
>
> static GCFuncs XineramaGCFuncs = {
> XineramaValidateGC, XineramaChangeGC, XineramaCopyGC, XineramaDestroyGC,
> - XineramaChangeClip, XineramaDestroyClip, XineramaCopyClip
> };
>
> #define Xinerama_GC_FUNC_PROLOGUE(pGC)\
> @@ -299,34 +295,6 @@ XineramaCopyGC (
> Xinerama_GC_FUNC_EPILOGUE (pGCDst);
> }
>
> -static void
> -XineramaChangeClip (
> - GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects
> -){
> - Xinerama_GC_FUNC_PROLOGUE (pGC);
> - (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
> - Xinerama_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -static void
> -XineramaCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - Xinerama_GC_FUNC_PROLOGUE (pgcDst);
> - (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> - Xinerama_GC_FUNC_EPILOGUE (pgcDst);
> -}
> -
> -static void
> -XineramaDestroyClip(GCPtr pGC)
> -{
> - Xinerama_GC_FUNC_PROLOGUE (pGC);
> - (* pGC->funcs->DestroyClip)(pGC);
> - Xinerama_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> int
> XineramaDeleteResource(pointer data, XID id)
> {
> diff --git a/dix/gc.c b/dix/gc.c
> index fc251dd..e7568fc 100644
> --- a/dix/gc.c
> +++ b/dix/gc.c
> @@ -70,6 +70,8 @@ SOFTWARE.
> extern FontPtr defaultFont;
>
> static Bool CreateDefaultTile(GCPtr pGC);
> +static void DestroyClip(GCPtr pGC);
> +static void CopyClip(GCPtr pgcDst, GCPtr pgcSrc);
>
> static unsigned char DefaultDash[2] = {4, 4};
>
> @@ -338,8 +340,7 @@ ChangeGC(ClientPtr client, GC *pGC, BITS32 mask, ChangeGCValPtr pUnion)
> }
> pPixmap->refcnt++;
> }
> - (*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
> - (pointer)pPixmap, 0);
> + ChangeClip(pGC, pPixmap ? CT_PIXMAP : CT_NONE, pPixmap, 0);
> break;
> case GCDashOffset:
> NEXTVAL(INT16, pGC->dashOffset);
> @@ -708,7 +709,7 @@ CopyGC(GC *pgcSrc, GC *pgcDst, BITS32 mask)
> pgcDst->clipOrg.y = pgcSrc->clipOrg.y;
> break;
> case GCClipMask:
> - (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> + CopyClip(pgcDst, pgcSrc);
> break;
> case GCDashOffset:
> pgcDst->dashOffset = pgcSrc->dashOffset;
> @@ -772,7 +773,7 @@ FreeGC(pointer value, XID gid)
> GCPtr pGC = (GCPtr)value;
>
> CloseFont(pGC->font, (Font)0);
> - (* pGC->funcs->DestroyClip)(pGC);
> + DestroyClip(pGC);
>
> if (!pGC->tileIsPixel)
> (* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
> @@ -1077,12 +1078,81 @@ SetClipRects(GCPtr pGC, int xOrigin, int yOrigin, int nrects,
>
> if (size)
> memmove((char *)prectsNew, (char *)prects, size);
> - (*pGC->funcs->ChangeClip)(pGC, newct, (pointer)prectsNew, nrects);
> + ChangeClip(pGC, newct, prectsNew, nrects);
> if (pGC->funcs->ChangeGC)
> (*pGC->funcs->ChangeGC) (pGC, GCClipXOrigin|GCClipYOrigin|GCClipMask);
> return Success;
> }
>
> +static void
> +DestroyClip(GCPtr pGC)
> +{
> + if (pGC->clientClipType == CT_NONE)
> + return;
> + else if (pGC->clientClipType == CT_PIXMAP)
> + {
> + (*pGC->pScreen->DestroyPixmap) ((PixmapPtr) (pGC->clientClip));
> + }
> + else
> + {
> + /*
> + * we know we'll never have a list of rectangles, since ChangeClip
> + * immediately turns them into a region
> + */
> + RegionDestroy(pGC->clientClip);
> + }
> + pGC->clientClip = NULL;
> + pGC->clientClipType = CT_NONE;
> +}
> +
> +void
> +ChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
> +{
> + DestroyClip(pGC);
> + if (type == CT_PIXMAP)
> + {
> + /* convert the pixmap to a region */
> + pGC->clientClip = (pointer) BitmapToRegion(pGC->pScreen,
> + (PixmapPtr) pvalue);
> + (*pGC->pScreen->DestroyPixmap) (pvalue);
> + }
> + else if (type == CT_REGION)
> + {
> + /* stuff the region in the GC */
> + pGC->clientClip = pvalue;
> + }
> + else if (type != CT_NONE)
> + {
> + pGC->clientClip = (pointer) RegionFromRects(nrects,
> + (xRectangle *) pvalue,
> + type);
> + free(pvalue);
> + }
> + pGC->clientClipType = (type != CT_NONE&& pGC->clientClip) ? CT_REGION : CT_NONE;
> + pGC->stateChanges |= GCClipMask;
> +}
> +
> +static void
> +CopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> +{
> + RegionPtr prgnNew;
> +
> + switch (pgcSrc->clientClipType)
> + {
> + case CT_PIXMAP:
> + ((PixmapPtr) pgcSrc->clientClip)->refcnt++;
> + /* Fall through !! */
> + case CT_NONE:
> + ChangeClip(pgcDst, (int) pgcSrc->clientClipType,
> + pgcSrc->clientClip, 0);
> + break;
> + case CT_REGION:
> + prgnNew = RegionCreate(NULL, 1);
> + RegionCopy(prgnNew, (RegionPtr) (pgcSrc->clientClip));
> + ChangeClip(pgcDst, CT_REGION, prgnNew, 0);
> + break;
> + }
> +}
>
> /*
> sets reasonable defaults
> @@ -1121,8 +1191,6 @@ GetScratchGC(unsigned depth, ScreenPtr pScreen)
> pGC->graphicsExposures = FALSE;
> pGC->clipOrg.x = 0;
> pGC->clipOrg.y = 0;
> - if (pGC->clientClipType != CT_NONE)
> - (*pGC->funcs->ChangeClip) (pGC, CT_NONE, NULL, 0);
> pGC->stateChanges = GCAllBits;
> return pGC;
> }
> @@ -1142,8 +1210,9 @@ mark it as available.
> void
> FreeScratchGC(GCPtr pGC)
> {
> - if (pGC->scratch_inuse)
> + if (pGC->scratch_inuse) {
> + DestroyClip(pGC);
> pGC->scratch_inuse = FALSE;
> - else
> + } else
> FreeGC(pGC, (GContext)0);
> }
> diff --git a/doc/Xserver-spec.xml b/doc/Xserver-spec.xml
> index b14e489..22406ad 100644
> --- a/doc/Xserver-spec.xml
> +++ b/doc/Xserver-spec.xml
> @@ -3799,7 +3799,7 @@ functions will be called before the GC has been validated,
> but the others (dealing with allocating of clip regions,
> changing and destroying the GC, etc.) might be.</para>
> <para>
> -The GC funcs vector contains pointers to 7
> +The GC funcs vector contains pointers to 4
> routines and a devPrivate field:
> <blockquote><programlisting>
>
> @@ -3870,78 +3870,6 @@ This routine is called before the GC is destroyed for the
> entity interested in this GC to clean up after itself.
> This routine is responsible for freeing any auxiliary storage allocated.</para>
> </section>
> -<section>
> -<title>GC Clip Region Routines</title>
> -<para>
> -The GC clientClip field requires three procedures to manage it. These
> -procedures are in the GC funcs vector. The underlying principle is that dix
> -knows nothing about the internals of the clipping information, (except when
> -it has come from the client), and so calls ddX whenever it needs to copy,
> -set, or destroy such information. It could have been possible for dix not
> -to allow ddX to touch the field in the GC, and require it to keep its own
> -copy in devPriv, but since clip masks can be very large, this seems like a
> -bad idea. Thus, the server allows ddX to do whatever it wants to the
> -clientClip field of the GC, but requires it to do all manipulation itself.</para>
> -<para>
> -<blockquote><programlisting>
> -
> - void pGC->funcs->ChangeClip(pGC, type, pValue, nrects)
> - GCPtr pGC;
> - int type;
> - char *pValue;
> - int nrects;
> -
> -</programlisting></blockquote>
> -This routine is called whenever the client changes the client clip
> -region. The pGC points to the GC involved, the type tells what form
> -the region has been sent in. If type is CT_NONE, then there is no
> -client clip. If type is CT_UNSORTED, CT_YBANDED or CT_YXBANDED, then
> -pValue pointer to a list of rectangles, nrects long. If type is
> -CT_REGION, then pValue pointer to a RegionRec from the mi region code.
> -If type is CT_PIXMAP pValue is a pointer to a pixmap. (The defines
> -for CT_NONE, etc. are in Xserver/include/gc.h.) This routine is
> -responsible for incrementing any necessary reference counts (e.g. for
> -a pixmap clip mask) for the new clipmask and freeing anything that
> -used to be in the GC's clipMask field. The lists of rectangles passed
> -in can be freed with Xfree(), the regions can be destroyed with the
> -RegionDestroy field in the screen, and pixmaps can be destroyed by
> -calling the screen's DestroyPixmap function. DIX and MI code expect
> -what they pass in to this to be freed or otherwise inaccessible, and
> -will never look inside what's been put in the GC. This is a good
> -place to be wary of storage leaks.</para>
> -<para>
> -In the sample server, this routine transforms either the bitmap or the
> -rectangle list into a region, so that future routines will have a more
> -predictable starting point to work from. (The validate routine must
> -take this client clip region and merge it with other regions to arrive
> -at a composite clip region before any drawing is done.)</para>
> -<para>
> -<blockquote><programlisting>
> -
> - void pGC->funcs->DestroyClip(pGC)
> - GCPtr pGC;
> -
> -</programlisting></blockquote>
> -This routine is called whenever the client clip region must be destroyed.
> -The pGC points to the GC involved. This call should set the clipType
> -field of the GC to CT_NONE.
> -In the sample server, the pointer to the client clip region is set to NULL
> -by this routine after destroying the region, so that other software
> -(including ChangeClip() above) will recognize that there is no client clip region.</para>
> -<para>
> -<blockquote><programlisting>
> -
> - void pGC->funcs->CopyClip(pgcDst, pgcSrc)
> - GCPtr pgcDst, pgcSrc;
> -
> -</programlisting></blockquote>
> -This routine makes a copy of the clipMask and clipType from pgcSrc
> -into pgcDst. It is responsible for destroying any previous clipMask
> -in pgcDst. The clip mask in the source can be the same as the
> -clip mask in the dst (clients do the strangest things), so care must
> -be taken when destroying things. This call is required because dix
> -does not know how to copy the clip mask from pgcSrc.</para>
> -</section>
> </section>
> <section>
> <title>Drawing Primitives</title>
> diff --git a/exa/exa.c b/exa/exa.c
> index 4ce983b..17cded0 100644
> --- a/exa/exa.c
> +++ b/exa/exa.c
> @@ -480,29 +480,11 @@ exaCopyGC (GCPtr pGCSrc,
> unsigned long mask,
> GCPtr pGCDst);
>
> -static void
> -exaChangeClip (GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects);
> -
> -static void
> -exaCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
> -
> -static void
> -exaCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
> -
> -static void
> -exaDestroyClip(GCPtr pGC);
> -
> const GCFuncs exaGCFuncs = {
> exaValidateGC,
> exaChangeGC,
> exaCopyGC,
> exaDestroyGC,
> - exaChangeClip,
> - exaDestroyClip,
> - exaCopyClip
> };
>
> static void
> @@ -590,36 +572,6 @@ exaCopyGC (GCPtr pGCSrc,
> swap(pExaGC, pGCDst, funcs);
> }
>
> -static void
> -exaChangeClip (GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects)
> -{
> - ExaGCPriv(pGC);
> - swap(pExaGC, pGC, funcs);
> - (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
> - swap(pExaGC, pGC, funcs);
> -}
> -
> -static void
> -exaCopyClip(GCPtr pGCDst, GCPtr pGCSrc)
> -{
> - ExaGCPriv(pGCDst);
> - swap(pExaGC, pGCDst, funcs);
> - (*pGCDst->funcs->CopyClip)(pGCDst, pGCSrc);
> - swap(pExaGC, pGCDst, funcs);
> -}
> -
> -static void
> -exaDestroyClip(GCPtr pGC)
> -{
> - ExaGCPriv(pGC);
> - swap(pExaGC, pGC, funcs);
> - (*pGC->funcs->DestroyClip)(pGC);
> - swap(pExaGC, pGC, funcs);
> -}
> -
> /**
> * exaCreateGC makes a new GC and hooks up its funcs handler, so that
> * exaValidateGC() will get called.
> diff --git a/fb/fbgc.c b/fb/fbgc.c
> index 8108c3a..aa75d7a 100644
> --- a/fb/fbgc.c
> +++ b/fb/fbgc.c
> @@ -33,9 +33,6 @@ const GCFuncs fbGCFuncs = {
> miChangeGC,
> miCopyGC,
> miDestroyGC,
> - miChangeClip,
> - miDestroyClip,
> - miCopyClip,
> };
>
> const GCOps fbGCOps = {
> diff --git a/hw/dmx/dmxgc.c b/hw/dmx/dmxgc.c
> index f10f9a0..b1347c1 100644
> --- a/hw/dmx/dmxgc.c
> +++ b/hw/dmx/dmxgc.c
> @@ -54,9 +54,6 @@ static GCFuncs dmxGCFuncs = {
> dmxChangeGC,
> dmxCopyGC,
> dmxDestroyGC,
> - dmxChangeClip,
> - dmxDestroyClip,
> - dmxCopyClip,
> };
>
> static GCOps dmxGCOps = {
> @@ -185,6 +182,46 @@ void dmxValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
> DMX_GC_FUNC_EPILOGUE(pGC);
> }
>
> +/** Change the clip rects for a GC. */
> +static void dmxBEChangeClip(GCPtr pGC)
> +{
> + ScreenPtr pScreen = pGC->pScreen;
> + DMXScreenInfo *dmxScreen =&dmxScreens[pScreen->myNum];
> + dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
> + XRectangle *pRects;
> + BoxPtr pBox;
> + int i, nRects;
> +
> + /* Set the client clip on the back-end server */
> + switch (pGC->clientClipType) {
> + case CT_NONE:
> + if (dmxScreen->beDisplay)
> + XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
> + break;
> +
> + case CT_REGION:
> + if (dmxScreen->beDisplay) {
> + nRects = RegionNumRects((RegionPtr)pGC->clientClip);
> + pRects = malloc(nRects * sizeof(*pRects));
> + pBox = RegionRects((RegionPtr)pGC->clientClip);
> +
> + for (i = 0; i< nRects; i++) {
> + pRects[i].x = pBox[i].x1;
> + pRects[i].y = pBox[i].y1;
> + pRects[i].width = pBox[i].x2 - pBox[i].x1;
> + pRects[i].height = pBox[i].y2 - pBox[i].y1;
> + }
> +
> + XSetClipRectangles(dmxScreen->beDisplay, pGCPriv->gc,
> + pGC->clipOrg.x, pGC->clipOrg.y,
> + pRects, nRects, Unsorted);
> +
> + free(pRects);
> + }
> + break;
> + }
> +}
> +
> /** Set the values in the graphics context on the back-end server
> * associated with \a pGC's screen. */
> void dmxChangeGC(GCPtr pGC, unsigned long mask)
> @@ -270,7 +307,11 @@ void dmxChangeGC(GCPtr pGC, unsigned long mask)
>
> if (mask& GCClipXOrigin) v.clip_x_origin = pGC->clipOrg.x;
> if (mask& GCClipYOrigin) v.clip_y_origin = pGC->clipOrg.y;
> - if (mask& GCClipMask) mask&= ~GCClipMask; /* See ChangeClip */
> + if (mask& GCClipMask) {
> + mask&= ~GCClipMask;
> + if (dmxScreen->beDisplay)
> + dmxBEChangeClip(pGC);
> + }
> if (mask& GCDashOffset) v.dash_offset = pGC->dashOffset;
> if (mask& GCDashList) {
> mask&= ~GCDashList;
> @@ -340,77 +381,3 @@ void dmxDestroyGC(GCPtr pGC)
> pGC->funcs->DestroyGC(pGC);
> DMX_GC_FUNC_EPILOGUE(pGC);
> }
> -
> -/** Change the clip rects for a GC. */
> -void dmxChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
> -{
> - ScreenPtr pScreen = pGC->pScreen;
> - DMXScreenInfo *dmxScreen =&dmxScreens[pScreen->myNum];
> - dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
> - XRectangle *pRects;
> - BoxPtr pBox;
> - int i, nRects;
> -
> - DMX_GC_FUNC_PROLOGUE(pGC);
> - pGC->funcs->ChangeClip(pGC, type, pvalue, nrects);
> -
> - /* Set the client clip on the back-end server */
> - switch (pGC->clientClipType) {
> - case CT_NONE:
> - if (dmxScreen->beDisplay)
> - XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
> - break;
> -
> - case CT_REGION:
> - if (dmxScreen->beDisplay) {
> - nRects = RegionNumRects((RegionPtr)pGC->clientClip);
> - pRects = malloc(nRects * sizeof(*pRects));
> - pBox = RegionRects((RegionPtr)pGC->clientClip);
> -
> - for (i = 0; i< nRects; i++) {
> - pRects[i].x = pBox[i].x1;
> - pRects[i].y = pBox[i].y1;
> - pRects[i].width = pBox[i].x2 - pBox[i].x1;
> - pRects[i].height = pBox[i].y2 - pBox[i].y1;
> - }
> -
> - XSetClipRectangles(dmxScreen->beDisplay, pGCPriv->gc,
> - pGC->clipOrg.x, pGC->clipOrg.y,
> - pRects, nRects, Unsorted);
> -
> - free(pRects);
> - }
> - break;
> -
> - case CT_PIXMAP:
> - /* Condensed down to REGION in the mi code */
> - break;
> - }
> -
> - DMX_GC_FUNC_EPILOGUE(pGC);
> -}
> -
> -/** Destroy a GC's clip rects. */
> -void dmxDestroyClip(GCPtr pGC)
> -{
> - ScreenPtr pScreen = pGC->pScreen;
> - DMXScreenInfo *dmxScreen =&dmxScreens[pScreen->myNum];
> - dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
> -
> - DMX_GC_FUNC_PROLOGUE(pGC);
> - pGC->funcs->DestroyClip(pGC);
> -
> - /* Set the client clip on the back-end server to None */
> - if (dmxScreen->beDisplay)
> - XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
> -
> - DMX_GC_FUNC_EPILOGUE(pGC);
> -}
> -
> -/** Copy a GC's clip rects. */
> -void dmxCopyClip(GCPtr pGCDst, GCPtr pGCSrc)
> -{
> - DMX_GC_FUNC_PROLOGUE(pGCDst);
> - pGCDst->funcs->CopyClip(pGCDst, pGCSrc);
> - DMX_GC_FUNC_EPILOGUE(pGCDst);
> -}
> diff --git a/hw/dmx/dmxgc.h b/hw/dmx/dmxgc.h
> index 4ff3cd8..7b2b435 100644
> --- a/hw/dmx/dmxgc.h
> +++ b/hw/dmx/dmxgc.h
> @@ -56,9 +56,6 @@ extern void dmxValidateGC(GCPtr pGC, unsigned long changes,
> extern void dmxChangeGC(GCPtr pGC, unsigned long mask);
> extern void dmxCopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst);
> extern void dmxDestroyGC(GCPtr pGC);
> -extern void dmxChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
> -extern void dmxDestroyClip(GCPtr pGC);
> -extern void dmxCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
>
> extern void dmxBECreateGC(ScreenPtr pScreen, GCPtr pGC);
> extern Bool dmxBEFreeGC(GCPtr pGC);
> diff --git a/hw/xfree86/common/xf86VGAarbiter.c b/hw/xfree86/common/xf86VGAarbiter.c
> index 215e845..658cf4e 100644
> --- a/hw/xfree86/common/xf86VGAarbiter.c
> +++ b/hw/xfree86/common/xf86VGAarbiter.c
> @@ -41,8 +41,7 @@
>
> static GCFuncs VGAarbiterGCFuncs = {
> VGAarbiterValidateGC, VGAarbiterChangeGC, VGAarbiterCopyGC,
> - VGAarbiterDestroyGC, VGAarbiterChangeClip, VGAarbiterDestroyClip,
> - VGAarbiterCopyClip
> + VGAarbiterDestroyGC,
> };
>
> static GCOps VGAarbiterGCOps = {
> @@ -623,34 +622,6 @@ VGAarbiterCopyGC (
> GC_WRAP (pGCDst);
> }
>
> -static void
> -VGAarbiterChangeClip (
> - GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects )
> -{
> - GC_UNWRAP (pGC);
> - (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
> - GC_WRAP (pGC);
> -}
> -
> -static void
> -VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - GC_UNWRAP (pgcDst);
> - (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> - GC_WRAP (pgcDst);
> -}
> -
> -static void
> -VGAarbiterDestroyClip(GCPtr pGC)
> -{
> - GC_UNWRAP (pGC);
> - (* pGC->funcs->DestroyClip)(pGC);
> - GC_WRAP (pGC);
> -}
> -
> /* GC Ops */
> static void
> VGAarbiterFillSpans(
> diff --git a/hw/xfree86/common/xf86VGAarbiterPriv.h b/hw/xfree86/common/xf86VGAarbiterPriv.h
> index 848e45d..2db2045 100644
> --- a/hw/xfree86/common/xf86VGAarbiterPriv.h
> +++ b/hw/xfree86/common/xf86VGAarbiterPriv.h
> @@ -182,10 +182,6 @@ static void VGAarbiterValidateGC(GCPtr pGC, unsigned long changes,
> static void VGAarbiterChangeGC(GCPtr pGC, unsigned long mask);
> static void VGAarbiterCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
> static void VGAarbiterDestroyGC(GCPtr pGC);
> -static void VGAarbiterChangeClip(GCPtr pGC, int type, pointer pvalue,
> - int nrects);
> -static void VGAarbiterDestroyClip(GCPtr pGC);
> -static void VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
>
> /* GC ops */
> static void VGAarbiterFillSpans( DrawablePtr pDraw, GC *pGC, int nInit,
> diff --git a/hw/xfree86/shadowfb/shadow.c b/hw/xfree86/shadowfb/shadow.c
> index 5cc476a..499bbc3 100644
> --- a/hw/xfree86/shadowfb/shadow.c
> +++ b/hw/xfree86/shadowfb/shadow.c
> @@ -359,13 +359,9 @@ static void ShadowValidateGC(GCPtr, unsigned long, DrawablePtr);
> static void ShadowChangeGC(GCPtr, unsigned long);
> static void ShadowCopyGC(GCPtr, unsigned long, GCPtr);
> static void ShadowDestroyGC(GCPtr);
> -static void ShadowChangeClip(GCPtr, int, pointer, int);
> -static void ShadowDestroyClip(GCPtr);
> -static void ShadowCopyClip(GCPtr, GCPtr);
>
> GCFuncs ShadowGCFuncs = {
> ShadowValidateGC, ShadowChangeGC, ShadowCopyGC, ShadowDestroyGC,
> - ShadowChangeClip, ShadowDestroyClip, ShadowCopyClip
> };
>
>
> @@ -436,37 +432,6 @@ ShadowCopyGC (
> SHADOW_GC_FUNC_EPILOGUE (pGCDst);
> }
>
> -static void
> -ShadowChangeClip (
> - GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects
> -){
> - SHADOW_GC_FUNC_PROLOGUE (pGC);
> - (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
> - SHADOW_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -static void
> -ShadowCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - SHADOW_GC_FUNC_PROLOGUE (pgcDst);
> - (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> - SHADOW_GC_FUNC_EPILOGUE (pgcDst);
> -}
> -
> -static void
> -ShadowDestroyClip(GCPtr pGC)
> -{
> - SHADOW_GC_FUNC_PROLOGUE (pGC);
> - (* pGC->funcs->DestroyClip)(pGC);
> - SHADOW_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -
> -
> -
> /**********************************************************/
>
>
> diff --git a/hw/xfree86/xaa/xaaGC.c b/hw/xfree86/xaa/xaaGC.c
> index 44d50e6..34e0119 100644
> --- a/hw/xfree86/xaa/xaaGC.c
> +++ b/hw/xfree86/xaa/xaaGC.c
> @@ -23,13 +23,9 @@ static void XAAValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw);
> static void XAAChangeGC(GCPtr pGC, unsigned long mask);
> static void XAACopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
> static void XAADestroyGC(GCPtr pGC);
> -static void XAAChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
> -static void XAADestroyClip(GCPtr pGC);
> -static void XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc);
>
> GCFuncs XAAGCFuncs = {
> XAAValidateGC, XAAChangeGC, XAACopyGC, XAADestroyGC,
> - XAAChangeClip, XAADestroyClip, XAACopyClip
> };
>
> extern GCOps XAAPixmapOps;
> @@ -280,34 +276,7 @@ XAACopyGC (
> (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
> XAA_GC_FUNC_EPILOGUE (pGCDst);
> }
> -static void
> -XAAChangeClip (
> - GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects )
> -{
> - XAA_GC_FUNC_PROLOGUE (pGC);
> - (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
> - XAA_GC_FUNC_EPILOGUE (pGC);
> -}
>
> -static void
> -XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - XAA_GC_FUNC_PROLOGUE (pgcDst);
> - (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> - XAA_GC_FUNC_EPILOGUE (pgcDst);
> -}
> -
> -static void
> -XAADestroyClip(GCPtr pGC)
> -{
> - XAA_GC_FUNC_PROLOGUE (pGC);
> - (* pGC->funcs->DestroyClip)(pGC);
> - XAA_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> /**** Pixmap Wrappers ****/
>
>
> diff --git a/hw/xnest/GC.c b/hw/xnest/GC.c
> index 48fe4dc..579350b 100644
> --- a/hw/xnest/GC.c
> +++ b/hw/xnest/GC.c
> @@ -42,9 +42,6 @@ static GCFuncs xnestFuncs = {
> xnestChangeGC,
> xnestCopyGC,
> xnestDestroyGC,
> - xnestChangeClip,
> - xnestDestroyClip,
> - xnestCopyClip,
> };
>
> static GCOps xnestOps = {
> @@ -90,6 +87,42 @@ xnestValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
> {
> }
>
> +static void
> +xnestChangeClip(GCPtr pGC)
> +{
> + int i, size, nRects;
> + BoxPtr pBox;
> + XRectangle *pRects;
> +
> + switch(pGC->clientClipType)
> + {
> + case CT_NONE:
> + XSetClipMask(xnestDisplay, xnestGC(pGC), None);
> + break;
> +
> + case CT_REGION:
> + nRects = RegionNumRects((RegionPtr) pGC->clientClip);
> + size = nRects * sizeof(*pRects);
> + pRects = (XRectangle *) malloc(size);
> + pBox = RegionRects((RegionPtr) pGC->clientClip);
> + for (i = nRects; i--> 0; ) {
> + pRects[i].x = pBox[i].x1;
> + pRects[i].y = pBox[i].y1;
> + pRects[i].width = pBox[i].x2 - pBox[i].x1;
> + pRects[i].height = pBox[i].y2 - pBox[i].y1;
> + }
> + XSetClipRectangles(xnestDisplay, xnestGC(pGC), 0, 0,
> + pRects, nRects, Unsorted);
> + free((char *) pRects);
> + break;
> +
> + case CT_PIXMAP:
> + XSetClipMask(xnestDisplay, xnestGC(pGC),
> + xnestPixmap((PixmapPtr) pGC->clientClip));
> + break;
> + }
> +}
> +
> void
> xnestChangeGC(GCPtr pGC, unsigned long mask)
> {
> @@ -156,8 +189,10 @@ xnestChangeGC(GCPtr pGC, unsigned long mask)
> if (mask& GCClipYOrigin)
> values.clip_y_origin = pGC->clipOrg.y;
>
> - if (mask& GCClipMask) /* this is handled in change clip */
> + if (mask& GCClipMask) {
> mask&= ~GCClipMask;
> + xnestChangeClip(pGC);
> + }
>
> if (mask& GCDashOffset)
> values.dash_offset = pGC->dashOffset;
> @@ -179,6 +214,7 @@ void
> xnestCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst)
> {
> XCopyGC(xnestDisplay, xnestGC(pGCSrc), mask, xnestGC(pGCDst));
> + pGCDst->stateChanges&= ~mask;
> }
>
> void
> @@ -186,145 +222,3 @@ xnestDestroyGC(GCPtr pGC)
> {
> XFreeGC(xnestDisplay, xnestGC(pGC));
> }
> -
> -void
> -xnestChangeClip(GCPtr pGC, int type, pointer pValue, int nRects)
> -{
> - int i, size;
> - BoxPtr pBox;
> - XRectangle *pRects;
> -
> - xnestDestroyClipHelper(pGC);
> -
> - switch(type)
> - {
> - case CT_NONE:
> - XSetClipMask(xnestDisplay, xnestGC(pGC), None);
> - break;
> -
> - case CT_REGION:
> - nRects = RegionNumRects((RegionPtr)pValue);
> - size = nRects * sizeof(*pRects);
> - pRects = (XRectangle *) malloc(size);
> - pBox = RegionRects((RegionPtr)pValue);
> - for (i = nRects; i--> 0; ) {
> - pRects[i].x = pBox[i].x1;
> - pRects[i].y = pBox[i].y1;
> - pRects[i].width = pBox[i].x2 - pBox[i].x1;
> - pRects[i].height = pBox[i].y2 - pBox[i].y1;
> - }
> - XSetClipRectangles(xnestDisplay, xnestGC(pGC), 0, 0,
> - pRects, nRects, Unsorted);
> - free((char *) pRects);
> - break;
> -
> - case CT_PIXMAP:
> - XSetClipMask(xnestDisplay, xnestGC(pGC),
> - xnestPixmap((PixmapPtr)pValue));
> - /*
> - * Need to change into region, so subsequent uses are with
> - * current pixmap contents.
> - */
> - pGC->clientClip = (pointer) (*pGC->pScreen->BitmapToRegion)((PixmapPtr)pValue);
> - (*pGC->pScreen->DestroyPixmap)((PixmapPtr)pValue);
> - pValue = pGC->clientClip;
> - type = CT_REGION;
> - break;
> -
> - case CT_UNSORTED:
> - XSetClipRectangles(xnestDisplay, xnestGC(pGC),
> - pGC->clipOrg.x, pGC->clipOrg.y,
> - (XRectangle *)pValue, nRects, Unsorted);
> - break;
> -
> - case CT_YSORTED:
> - XSetClipRectangles(xnestDisplay, xnestGC(pGC),
> - pGC->clipOrg.x, pGC->clipOrg.y,
> - (XRectangle *)pValue, nRects, YSorted);
> - break;
> -
> - case CT_YXSORTED:
> - XSetClipRectangles(xnestDisplay, xnestGC(pGC),
> - pGC->clipOrg.x, pGC->clipOrg.y,
> - (XRectangle *)pValue, nRects, YXSorted);
> - break;
> -
> - case CT_YXBANDED:
> - XSetClipRectangles(xnestDisplay, xnestGC(pGC),
> - pGC->clipOrg.x, pGC->clipOrg.y,
> - (XRectangle *)pValue, nRects, YXBanded);
> - break;
> - }
> -
> - switch(type)
> - {
> - default:
> - break;
> -
> - case CT_UNSORTED:
> - case CT_YSORTED:
> - case CT_YXSORTED:
> - case CT_YXBANDED:
> -
> - /*
> - * other parts of server can only deal with CT_NONE,
> - * CT_PIXMAP and CT_REGION client clips.
> - */
> - pGC->clientClip = (pointer) RegionFromRects(nRects,
> - (xRectangle *)pValue, type);
> - free(pValue);
> - pValue = pGC->clientClip;
> - type = CT_REGION;
> -
> - break;
> - }
> -
> - pGC->clientClipType = type;
> - pGC->clientClip = pValue;
> -}
> -
> -void
> -xnestDestroyClip(GCPtr pGC)
> -{
> - xnestDestroyClipHelper(pGC);
> -
> - XSetClipMask(xnestDisplay, xnestGC(pGC), None);
> -
> - pGC->clientClipType = CT_NONE;
> - pGC->clientClip = NULL;
> -}
> -
> -void
> -xnestDestroyClipHelper(GCPtr pGC)
> -{
> - switch (pGC->clientClipType)
> - {
> - default:
> - case CT_NONE:
> - break;
> -
> - case CT_REGION:
> - RegionDestroy(pGC->clientClip);
> - break;
> - }
> -}
> -
> -void
> -xnestCopyClip(GCPtr pGCDst, GCPtr pGCSrc)
> -{
> - RegionPtr pRgn;
> -
> - switch (pGCSrc->clientClipType)
> - {
> - default:
> - case CT_NONE:
> - xnestDestroyClip(pGCDst);
> - break;
> -
> - case CT_REGION:
> - pRgn = RegionCreate(NULL, 1);
> - RegionCopy(pRgn, pGCSrc->clientClip);
> - xnestChangeClip(pGCDst, CT_REGION, pRgn, 0);
> - break;
> - }
> -}
> diff --git a/hw/xnest/XNGC.h b/hw/xnest/XNGC.h
> index c4a6cef..ec115d7 100644
> --- a/hw/xnest/XNGC.h
> +++ b/hw/xnest/XNGC.h
> @@ -34,9 +34,5 @@ void xnestValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
> void xnestChangeGC(GCPtr pGC, unsigned long mask);
> void xnestCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
> void xnestDestroyGC(GCPtr pGC);
> -void xnestChangeClip(GCPtr pGC, int type, pointer pValue, int nRects);
> -void xnestDestroyClip(GCPtr pGC);
> -void xnestDestroyClipHelper(GCPtr pGC);
> -void xnestCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
>
> #endif /* XNESTGC_H */
> diff --git a/hw/xwin/wingc.c b/hw/xwin/wingc.c
> index e351c50..09e9968 100644
> --- a/hw/xwin/wingc.c
> +++ b/hw/xwin/wingc.c
> @@ -60,26 +60,12 @@ static void
> winDestroyGCNativeGDI (GCPtr pGC);
>
> #if 0
> -static void
> -winChangeClipNativeGDI (GCPtr pGC, int nType, pointer pValue, int nRects);
> -
> -static void
> -winDestroyClipNativeGDI (GCPtr pGC);
> -
> -static void
> -winCopyClipNativeGDI (GCPtr pGCdst, GCPtr pGCsrc);
> -#endif
> -
> -#if 0
> /* GC Handling Routines */
> const GCFuncs winGCFuncs = {
> winValidateGCNativeGDI,
> winChangeGCNativeGDI,
> winCopyGCNativeGDI,
> winDestroyGCNativeGDI,
> - winChangeClipNativeGDI,
> - winDestroyClipNativeGDI,
> - winCopyClipNativeGDI,
> };
> #else
> const GCFuncs winGCFuncs = {
> @@ -87,9 +73,6 @@ const GCFuncs winGCFuncs = {
> miChangeGC,
> miCopyGC,
> winDestroyGCNativeGDI,
> - miChangeClip,
> - miDestroyClip,
> - miCopyClip,
> };
> #endif
>
> @@ -224,28 +207,3 @@ winDestroyGCNativeGDI (GCPtr pGC)
> /* Invalidate the GC privates pointer */
> winSetGCPriv (pGC, NULL);
> }
> -
> -#if 0
> -/* See Porting Layer Definition - p. 46 */
> -static void
> -winChangeClipNativeGDI (GCPtr pGC, int nType, pointer pValue, int nRects)
> -{
> -
> -}
> -
> -
> -/* See Porting Layer Definition - p. 47 */
> -static void
> -winDestroyClipNativeGDI (GCPtr pGC)
> -{
> -
> -}
> -
> -
> -/* See Porting Layer Definition - p. 47 */
> -static void
> -winCopyClipNativeGDI (GCPtr pGCdst, GCPtr pGCsrc)
> -{
> -
> -}
> -#endif
> diff --git a/include/gcstruct.h b/include/gcstruct.h
> index 4fea02c..fb9ee0d 100644
> --- a/include/gcstruct.h
> +++ b/include/gcstruct.h
> @@ -65,6 +65,13 @@ SOFTWARE.
> * functions which modify the state of the GC
> */
>
> +extern _X_EXPORT void ChangeClip(
> + GCPtr /*pGC*/,
> + int /*type*/,
> + pointer /*pvalue*/,
> + int /*nrects*/
> +);
> +
> typedef struct _GCFuncs {
> void (* ValidateGC)(
> GCPtr /*pGC*/,
> @@ -82,19 +89,6 @@ typedef struct _GCFuncs {
>
> void (* DestroyGC)(
> GCPtr /*pGC*/);
> -
> - void (* ChangeClip)(
> - GCPtr /*pGC*/,
> - int /*type*/,
> - pointer /*pvalue*/,
> - int /*nrects*/);
> -
> - void (* DestroyClip)(
> - GCPtr /*pGC*/);
> -
> - void (* CopyClip)(
> - GCPtr /*pgcDst*/,
> - GCPtr /*pgcSrc*/);
> } GCFuncs;
>
> /*
> diff --git a/mi/mibitblt.c b/mi/mibitblt.c
> index 49e17bd..e302960 100644
> --- a/mi/mibitblt.c
> +++ b/mi/mibitblt.c
> @@ -443,7 +443,7 @@ miOpqStipDrawable(DrawablePtr pDraw, GCPtr pGC, RegionPtr prgnSrc,
> prgnSrcClip = RegionCreate(NULL, 0);
> RegionCopy(prgnSrcClip, prgnSrc);
> RegionTranslate(prgnSrcClip, srcx, 0);
> - (*pGCT->funcs->ChangeClip)(pGCT, CT_REGION, prgnSrcClip, 0);
> + ChangeClip(pGCT, CT_REGION, prgnSrcClip, 0);
> ValidateGC((DrawablePtr)pPixmap, pGCT);
>
> /* Since we know pDraw is always a pixmap, we never need to think
> @@ -527,8 +527,6 @@ miOpqStipDrawable(DrawablePtr pDraw, GCPtr pGC, RegionPtr prgnSrc,
> GCTileStipXOrigin | GCTileStipYOrigin, gcv);
>
> ValidateGC(pDraw, pGC);
> - /* put what we hope is a smaller clip region back in the scratch gc */
> - (*pGCT->funcs->ChangeClip)(pGCT, CT_NONE, NULL, 0);
> FreeScratchGC(pGCT);
> (*pDraw->pScreen->DestroyPixmap)(pPixmap);
>
> diff --git a/mi/migc.c b/mi/migc.c
> index 6d734e1..dce1f30 100644
> --- a/mi/migc.c
> +++ b/mi/migc.c
> @@ -53,76 +53,6 @@ miDestroyGC(GCPtr pGC)
> RegionDestroy(pGC->pCompositeClip);
> }
>
> -void
> -miDestroyClip(GCPtr pGC)
> -{
> - if (pGC->clientClipType == CT_NONE)
> - return;
> - else if (pGC->clientClipType == CT_PIXMAP)
> - {
> - (*pGC->pScreen->DestroyPixmap) ((PixmapPtr) (pGC->clientClip));
> - }
> - else
> - {
> - /*
> - * we know we'll never have a list of rectangles, since ChangeClip
> - * immediately turns them into a region
> - */
> - RegionDestroy(pGC->clientClip);
> - }
> - pGC->clientClip = NULL;
> - pGC->clientClipType = CT_NONE;
> -}
> -
> -void
> -miChangeClip( GCPtr pGC, int type, pointer pvalue, int nrects)
> -{
> - (*pGC->funcs->DestroyClip) (pGC);
> - if (type == CT_PIXMAP)
> - {
> - /* convert the pixmap to a region */
> - pGC->clientClip = (pointer) BitmapToRegion(pGC->pScreen,
> - (PixmapPtr) pvalue);
> - (*pGC->pScreen->DestroyPixmap) (pvalue);
> - }
> - else if (type == CT_REGION)
> - {
> - /* stuff the region in the GC */
> - pGC->clientClip = pvalue;
> - }
> - else if (type != CT_NONE)
> - {
> - pGC->clientClip = (pointer) RegionFromRects(nrects,
> - (xRectangle *) pvalue,
> - type);
> - free(pvalue);
> - }
> - pGC->clientClipType = (type != CT_NONE&& pGC->clientClip) ? CT_REGION : CT_NONE;
> - pGC->stateChanges |= GCClipMask;
> -}
> -
> -void
> -miCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - RegionPtr prgnNew;
> -
> - switch (pgcSrc->clientClipType)
> - {
> - case CT_PIXMAP:
> - ((PixmapPtr) pgcSrc->clientClip)->refcnt++;
> - /* Fall through !! */
> - case CT_NONE:
> - (*pgcDst->funcs->ChangeClip) (pgcDst, (int) pgcSrc->clientClipType,
> - pgcSrc->clientClip, 0);
> - break;
> - case CT_REGION:
> - prgnNew = RegionCreate(NULL, 1);
> - RegionCopy(prgnNew, (RegionPtr) (pgcSrc->clientClip));
> - (*pgcDst->funcs->ChangeClip) (pgcDst, CT_REGION, (pointer) prgnNew, 0);
> - break;
> - }
> -}
> -
> /* ARGSUSED */
> void
> miCopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)
> diff --git a/mi/migc.h b/mi/migc.h
> index df5805f..1762f0d 100644
> --- a/mi/migc.h
> +++ b/mi/migc.h
> @@ -36,22 +36,6 @@ extern _X_EXPORT void miDestroyGC(
> GCPtr /*pGC*/
> );
>
> -extern _X_EXPORT void miDestroyClip(
> - GCPtr /*pGC*/
> -);
> -
> -extern _X_EXPORT void miChangeClip(
> - GCPtr /*pGC*/,
> - int /*type*/,
> - pointer /*pvalue*/,
> - int /*nrects*/
> -);
> -
> -extern _X_EXPORT void miCopyClip(
> - GCPtr /*pgcDst*/,
> - GCPtr /*pgcSrc*/
> -);
> -
> extern _X_EXPORT void miCopyGC(
> GCPtr /*pGCSrc*/,
> unsigned long /*changes*/,
> diff --git a/miext/cw/cw.c b/miext/cw/cw.c
> index 3da3bc3..6402f1b 100644
> --- a/miext/cw/cw.c
> +++ b/miext/cw/cw.c
> @@ -61,21 +61,12 @@ static void
> cwCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
> static void
> cwDestroyGC(GCPtr pGC);
> -static void
> -cwChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
> -static void
> -cwCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
> -static void
> -cwDestroyClip(GCPtr pGC);
>
> GCFuncs cwGCFuncs = {
> cwValidateGC,
> cwChangeGC,
> cwCopyGC,
> cwDestroyGC,
> - cwChangeClip,
> - cwDestroyClip,
> - cwCopyClip,
> };
>
> /* Find the real drawable to draw to, and provide offsets that will translate
> @@ -196,8 +187,7 @@ cwValidateGC(GCPtr pGC, unsigned long stateChanges, DrawablePtr pDrawable)
> * offset for it.
> */
>
> - (*pBackingGC->funcs->ChangeClip) (pBackingGC, CT_REGION,
> - (pointer) pCompositeClip, 0);
> + ChangeClip(pBackingGC, CT_REGION, pCompositeClip, 0);
>
> vals[0].val = x_off - pDrawable->x;
> vals[1].val = y_off - pDrawable->y;
> @@ -270,42 +260,6 @@ cwDestroyGC(GCPtr pGC)
> /* leave it unwrapped */
> }
>
> -static void
> -cwChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
> -{
> - cwGCPtr pPriv = (cwGCPtr)dixLookupPrivate(&pGC->devPrivates, cwGCKey);
> -
> - FUNC_PROLOGUE(pGC, pPriv);
> -
> - (*pGC->funcs->ChangeClip)(pGC, type, pvalue, nrects);
> -
> - FUNC_EPILOGUE(pGC, pPriv);
> -}
> -
> -static void
> -cwCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - cwGCPtr pPriv = (cwGCPtr)dixLookupPrivate(&pgcDst->devPrivates, cwGCKey);
> -
> - FUNC_PROLOGUE(pgcDst, pPriv);
> -
> - (*pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> -
> - FUNC_EPILOGUE(pgcDst, pPriv);
> -}
> -
> -static void
> -cwDestroyClip(GCPtr pGC)
> -{
> - cwGCPtr pPriv = (cwGCPtr)dixLookupPrivate(&pGC->devPrivates, cwGCKey);
> -
> - FUNC_PROLOGUE(pGC, pPriv);
> -
> - (*pGC->funcs->DestroyClip)(pGC);
> -
> - FUNC_EPILOGUE(pGC, pPriv);
> -}
> -
> /*
> * Screen wrappers.
> */
> @@ -424,7 +378,7 @@ cwCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
> -pBackingPixmap->screen_x,
> -pBackingPixmap->screen_y);
>
> - (*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0);
> + ChangeClip(pGC, CT_REGION, pClip, 0);
>
> ValidateGC(&pBackingPixmap->drawable, pGC);
>
> @@ -432,8 +386,6 @@ cwCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
> &pBackingPixmap->drawable, pGC,
> src_x, src_y, w, h, dst_x, dst_y);
>
> - (*pGC->funcs->DestroyClip) (pGC);
> -
> FreeScratchGC(pGC);
> }
>
> diff --git a/miext/damage/damage.c b/miext/damage/damage.c
> index d791211..a24b6cc 100644
> --- a/miext/damage/damage.c
> +++ b/miext/damage/damage.c
> @@ -383,13 +383,9 @@ static void damageValidateGC(GCPtr, unsigned long, DrawablePtr);
> static void damageChangeGC(GCPtr, unsigned long);
> static void damageCopyGC(GCPtr, unsigned long, GCPtr);
> static void damageDestroyGC(GCPtr);
> -static void damageChangeClip(GCPtr, int, pointer, int);
> -static void damageDestroyClip(GCPtr);
> -static void damageCopyClip(GCPtr, GCPtr);
>
> static GCFuncs damageGCFuncs = {
> damageValidateGC, damageChangeGC, damageCopyGC, damageDestroyGC,
> - damageChangeClip, damageDestroyClip, damageCopyClip
> };
>
> static GCOps damageGCOps;
> @@ -470,33 +466,6 @@ damageCopyGC (GCPtr pGCSrc,
> DAMAGE_GC_FUNC_EPILOGUE (pGCDst);
> }
>
> -static void
> -damageChangeClip (GCPtr pGC,
> - int type,
> - pointer pvalue,
> - int nrects)
> -{
> - DAMAGE_GC_FUNC_PROLOGUE (pGC);
> - (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
> - DAMAGE_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> -static void
> -damageCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - DAMAGE_GC_FUNC_PROLOGUE (pgcDst);
> - (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
> - DAMAGE_GC_FUNC_EPILOGUE (pgcDst);
> -}
> -
> -static void
> -damageDestroyClip(GCPtr pGC)
> -{
> - DAMAGE_GC_FUNC_PROLOGUE (pGC);
> - (* pGC->funcs->DestroyClip)(pGC);
> - DAMAGE_GC_FUNC_EPILOGUE (pGC);
> -}
> -
> #define TRIM_BOX(box, pGC) if (pGC->pCompositeClip) { \
> BoxPtr extents =&pGC->pCompositeClip->extents;\
> if(box.x1< extents->x1) box.x1 = extents->x1; \
> diff --git a/miext/rootless/rootlessGC.c b/miext/rootless/rootlessGC.c
> index 68a9dc7..93080c7 100644
> --- a/miext/rootless/rootlessGC.c
> +++ b/miext/rootless/rootlessGC.c
> @@ -56,10 +56,6 @@ static void RootlessValidateGC(GCPtr pGC, unsigned long changes,
> static void RootlessChangeGC(GCPtr pGC, unsigned long mask);
> static void RootlessCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst);
> static void RootlessDestroyGC(GCPtr pGC);
> -static void RootlessChangeClip(GCPtr pGC, int type, pointer pvalue,
> - int nrects);
> -static void RootlessDestroyClip(GCPtr pGC);
> -static void RootlessCopyClip(GCPtr pgcDst, GCPtr pgcSrc);
>
> Bool RootlessCreateGC(GCPtr pGC);
>
> @@ -68,9 +64,6 @@ GCFuncs rootlessGCFuncs = {
> RootlessChangeGC,
> RootlessCopyGC,
> RootlessDestroyGC,
> - RootlessChangeClip,
> - RootlessDestroyClip,
> - RootlessCopyClip,
> };
>
> // GC operations
> @@ -371,28 +364,6 @@ static void RootlessDestroyGC(GCPtr pGC)
> GCFUNC_WRAP(pGC);
> }
>
> -static void RootlessChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
> -{
> - GCFUNC_UNWRAP(pGC);
> - pGC->funcs->ChangeClip(pGC, type, pvalue, nrects);
> - GCFUNC_WRAP(pGC);
> -}
> -
> -static void RootlessDestroyClip(GCPtr pGC)
> -{
> - GCFUNC_UNWRAP(pGC);
> - pGC->funcs->DestroyClip(pGC);
> - GCFUNC_WRAP(pGC);
> -}
> -
> -static void RootlessCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
> -{
> - GCFUNC_UNWRAP(pgcDst);
> - pgcDst->funcs->CopyClip(pgcDst, pgcSrc);
> - GCFUNC_WRAP(pgcDst);
> -}
> -
> -
> /*
> * GC ops
> *
> diff --git a/render/mirect.c b/render/mirect.c
> index 4fb347a..73a1651 100644
> --- a/render/mirect.c
> +++ b/render/mirect.c
> @@ -66,7 +66,7 @@ miColorRects (PicturePtr pDst,
> pClip = RegionCreate(NULL, 1);
> RegionCopy(pClip,
> (RegionPtr) pClipPict->clientClip);
> - (*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0);
> + ChangeClip(pGC, CT_REGION, pClip, 0);
> }
>
> ChangeGC (NullClient, pGC, mask, tmpval);
> diff --git a/xfixes/region.c b/xfixes/region.c
> index 4c22637..606bf7a 100644
> --- a/xfixes/region.c
> +++ b/xfixes/region.c
> @@ -623,7 +623,7 @@ ProcXFixesSetGCClipRegion (ClientPtr client)
> vals[0].val = stuff->xOrigin;
> vals[1].val = stuff->yOrigin;
> ChangeGC (NullClient, pGC, GCClipXOrigin|GCClipYOrigin, vals);
> - (*pGC->funcs->ChangeClip)(pGC, pRegion ? CT_REGION : CT_NONE, (pointer)pRegion, 0);
> + ChangeClip(pGC, pRegion ? CT_REGION : CT_NONE, pRegion, 0);
>
> return Success;
> }
> --
> 1.7.5.4
More information about the xorg-devel
mailing list