[PATCH resend 2/3] Make GC clientClip always be a region.

Aaron Plattner aplattner at nvidia.com
Wed Sep 28 11:48:38 PDT 2011


On 09/26/2011 10:53 PM, Jamey Sharp wrote:
> Nothing ever set clientClip to anything but a region or NULL, so delete
> the clientClipType field and change clientClip from (pointer) to
> (RegionPtr).
>
> Signed-off-by: Jamey Sharp<jamey at minilop.net>
> ---
>   dix/gc.c                   |   51 +++++++++----------------------------------
>   exa/exa_accel.c            |   18 +++++++-------
>   exa/exa_priv.h             |    6 ++--
>   exa/exa_unaccel.c          |    6 ++--
>   hw/dmx/dmxgc.c             |   50 ++++++++++++++++++-------------------------
>   hw/kdrive/src/kxv.c        |    2 +-
>   hw/xfree86/common/xf86xv.c |    2 +-
>   hw/xfree86/xaa/xaaBitBlt.c |    4 +-
>   hw/xnest/GC.c              |   44 ++++++++++++-------------------------
>   include/gcstruct.h         |    5 +--
>   mi/micopy.c                |    4 +-
>   mi/miexpose.c              |    2 +-
>   mi/migc.c                  |    4 +-
>   mi/mioverlay.c             |    2 +-
>   xfixes/region.c            |   25 +++++++--------------
>   15 files changed, 81 insertions(+), 144 deletions(-)
>
> diff --git a/dix/gc.c b/dix/gc.c
> index e7568fc..d33f934 100644
> --- a/dix/gc.c
> +++ b/dix/gc.c
> @@ -523,8 +523,7 @@ CreateGC(DrawablePtr pDrawable, BITS32 mask, XID *pval, int *pStatus,
>       pGC->graphicsExposures = TRUE;
>       pGC->clipOrg.x = 0;
>       pGC->clipOrg.y = 0;
> -    pGC->clientClipType = CT_NONE;
> -    pGC->clientClip = (pointer)NULL;
> +    pGC->clientClip = NULL;
>       pGC->numInDashList = 2;
>       pGC->dash = DefaultDash;
>       pGC->dashOffset = 0;
> @@ -836,7 +835,6 @@ CreateScratchGC(ScreenPtr pScreen, unsigned depth)
>       pGC->graphicsExposures = TRUE;
>       pGC->clipOrg.x = 0;
>       pGC->clipOrg.y = 0;
> -    pGC->clientClipType = CT_NONE;
>       pGC->dashOffset = 0;
>       pGC->numInDashList = 2;
>       pGC->dash = DefaultDash;
> @@ -1087,22 +1085,10 @@ SetClipRects(GCPtr pGC, int xOrigin, int yOrigin, int nrects,
>   static void
>   DestroyClip(GCPtr pGC)
>   {
> -    if (pGC->clientClipType == CT_NONE)
> +    if (!pGC->clientClip)
>          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);
> -    }
> +    RegionDestroy(pGC->clientClip);
>       pGC->clientClip = NULL;
> -    pGC->clientClipType = CT_NONE;
>   }
>
>   void
> @@ -1112,8 +1098,7 @@ ChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
>       if (type == CT_PIXMAP)
>       {
>          /* convert the pixmap to a region */
> -       pGC->clientClip = (pointer) BitmapToRegion(pGC->pScreen,
> -                                                       (PixmapPtr) pvalue);
> +       pGC->clientClip = BitmapToRegion(pGC->pScreen, (PixmapPtr) pvalue);
>          (*pGC->pScreen->DestroyPixmap) (pvalue);
>       }
>       else if (type == CT_REGION)
> @@ -1123,35 +1108,21 @@ ChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
>       }
>       else if (type != CT_NONE)
>       {
> -       pGC->clientClip = (pointer) RegionFromRects(nrects,
> -                                                     (xRectangle *) pvalue,
> -                                                                   type);
> +       pGC->clientClip = 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;
> -    }
> +    if (pgcSrc->clientClip) {
> +       RegionPtr prgnNew = RegionCreate(NULL, 1);
> +       RegionCopy(prgnNew, pgcSrc->clientClip);
> +       ChangeClip(pgcDst, CT_REGION, prgnNew, 0);
> +    } else
> +       ChangeClip(pgcDst, CT_NONE, NULL, 0);
>   }
>
>   /*
> diff --git a/exa/exa_accel.c b/exa/exa_accel.c
> index 5600539..21e8741 100644
> --- a/exa/exa_accel.c
> +++ b/exa/exa_accel.c
> @@ -421,7 +421,7 @@ exaHWCopyNtoN (DrawablePtr    pSrcDrawable,
>
>          if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,
>                                             pGC->fillStyle, pGC->alu,
> -                                          pGC->clientClipType)) {
> +                                          pGC->clientClip)) {
>              dstregion = RegionCreate(NullBox, 0);
>              RegionCopy(dstregion, srcregion);
>              RegionTranslate(dstregion, dst_off_x - dx - src_off_x,
> @@ -768,7 +768,7 @@ exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg,
>
>   static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion,
>                                  Pixel pixel, CARD32 planemask, CARD32 alu,
> -                               unsigned int clientClipType);
> +                               RegionPtr clientClip);
>
>   static void
>   exaPolyFillRect(DrawablePtr pDrawable,
> @@ -816,11 +816,11 @@ exaPolyFillRect(DrawablePtr pDrawable,
>          if (((pGC->fillStyle == FillSolid || pGC->tileIsPixel)&&
>               exaFillRegionSolid(pDrawable, pReg, pGC->fillStyle == FillSolid ?
>                                  pGC->fgPixel : pGC->tile.pixel, pGC->planemask,
> -                               pGC->alu, pGC->clientClipType)) ||
> +                               pGC->alu, pGC->clientClip)) ||
>              (pGC->fillStyle == FillTiled&&  !pGC->tileIsPixel&&
>               exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap,&pGC->patOrg,
>                                  pGC->planemask, pGC->alu,
> -                               pGC->clientClipType))) {
> +                               pGC->clientClip))) {
>              goto out;
>          }
>       }
> @@ -998,7 +998,7 @@ fallback:
>
>   static Bool
>   exaFillRegionSolid (DrawablePtr        pDrawable, RegionPtr pRegion, Pixel pixel,
> -                   CARD32 planemask, CARD32 alu, unsigned int clientClipType)
> +                   CARD32 planemask, CARD32 alu, RegionPtr clientClip)
>   {
>       ExaScreenPriv(pDrawable->pScreen);
>       PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable);
> @@ -1019,7 +1019,7 @@ exaFillRegionSolid (DrawablePtr   pDrawable, RegionPtr pRegion, Pixel pixel,
>          pixmaps[0].as_src = FALSE;
>          pixmaps[0].pPix = pPixmap;
>          pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid,
> -                                               alu, clientClipType) ? NULL : pRegion;
> +                                               alu, clientClip) ? NULL : pRegion;
>
>          exaDoMigration (pixmaps, 1, TRUE);
>       }
> @@ -1084,7 +1084,7 @@ out:
>   Bool
>   exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
>                      DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
> -                   unsigned int clientClipType)
> +                   RegionPtr clientClip)
>   {
>       ExaScreenPriv(pDrawable->pScreen);
>       PixmapPtr pPixmap;
> @@ -1106,7 +1106,7 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
>       if (tileWidth == 1&&  tileHeight == 1)
>          return exaFillRegionSolid(pDrawable, pRegion,
>                                    exaGetPixmapFirstPixel (pTile), planemask,
> -                                 alu, clientClipType);
> +                                 alu, clientClip);
>
>       pPixmap = exaGetDrawablePixmap (pDrawable);
>       pExaPixmap = ExaGetPixmapPriv (pPixmap);
> @@ -1122,7 +1122,7 @@ exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile,
>          pixmaps[0].as_src = FALSE;
>          pixmaps[0].pPix = pPixmap;
>          pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled,
> -                                               alu, clientClipType) ? NULL : pRegion;
> +                                               alu, clientClip) ? NULL : pRegion;
>          pixmaps[1].as_dst = FALSE;
>          pixmaps[1].as_src = TRUE;
>          pixmaps[1].pPix = pTile;
> diff --git a/exa/exa_priv.h b/exa/exa_priv.h
> index 70de4bd..64b2671 100644
> --- a/exa/exa_priv.h
> +++ b/exa/exa_priv.h
> @@ -449,11 +449,11 @@ ExaCheckAddTraps (PicturePtr      pPicture,
>   static _X_INLINE Bool
>   exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask,
>                        unsigned int fillStyle, unsigned char alu,
> -                     unsigned int clientClipType)
> +                     RegionPtr clientClip)
>   {
>       return ((alu != GXcopy&&  alu != GXclear&&  alu != GXset&&
>               alu != GXcopyInverted) || fillStyle == FillStippled ||
> -           clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask));
> +           clientClip != NullRegion || !EXA_PM_IS_SOLID(pDrawable, planemask));
>   }
>
>   void
> @@ -462,7 +462,7 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
>   Bool
>   exaFillRegionTiled (DrawablePtr        pDrawable, RegionPtr pRegion, PixmapPtr pTile,
>                      DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu,
> -                   unsigned int clientClipType);
> +                   RegionPtr clientClip);
>
>   void
>   exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h,
> diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
> index 219f903..9f237e9 100644
> --- a/exa/exa_unaccel.c
> +++ b/exa/exa_unaccel.c
> @@ -106,7 +106,7 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth,
>       EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable)));
>       if (!pExaScr->prepare_access_reg || !pExaPixmap->pDamage ||
>          exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle,
> -                             pGC->alu, pGC->clientClipType))
> +                             pGC->alu, pGC->clientClip))
>          exaPrepareAccess (pDrawable, EXA_PREPARE_DEST);
>       else
>          pExaScr->prepare_access_reg(pPixmap, EXA_PREPARE_DEST,
> @@ -139,7 +139,7 @@ ExaCheckCopyNtoN (DrawablePtr pSrc, DrawablePtr pDst,  GCPtr pGC,
>
>       if (pExaScr->prepare_access_reg&&
>          !exaGCReadsDestination(pDst, pGC->planemask, pGC->fillStyle,
> -                              pGC->alu, pGC->clientClipType)&&
> +                              pGC->alu, pGC->clientClip)&&
>          RegionInitBoxes (&reg, pbox, nbox)) {
>          PixmapPtr pPixmap = exaGetDrawablePixmap(pDst);
>
> @@ -175,7 +175,7 @@ ExaFallbackPrepareReg(DrawablePtr pDrawable,
>                                                pGC->planemask,
>                                                pGC->fillStyle,
>                                                pGC->alu,
> -                                             pGC->clientClipType))) {
> +                                             pGC->clientClip))) {
>          BoxRec box;
>          RegionRec reg;
>          int xoff, yoff;
> diff --git a/hw/dmx/dmxgc.c b/hw/dmx/dmxgc.c
> index b1347c1..8ec9b22 100644
> --- a/hw/dmx/dmxgc.c
> +++ b/hw/dmx/dmxgc.c
> @@ -188,38 +188,30 @@ 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;
> +    if (!dmxScreen->beDisplay)
> +       return;
>
> -    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);
> +    /* Set the client clip on the back-end server */
> +    if (pGC->clientClip) {
> +       int i, nRects = RegionNumRects(pGC->clientClip);
> +       XRectangle *pRects = malloc(nRects * sizeof(*pRects));
> +       BoxPtr pBox = RegionRects(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;
>          }
> -       break;
> -    }
> +
> +       XSetClipRectangles(dmxScreen->beDisplay, pGCPriv->gc,
> +                          pGC->clipOrg.x, pGC->clipOrg.y,
> +                          pRects, nRects, Unsorted);
> +
> +       free(pRects);
> +    } else
> +       XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
>   }
>
>   /** Set the values in the graphics context on the back-end server
> diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c
> index 50dc235..fcd2ebb 100644
> --- a/hw/kdrive/src/kxv.c
> +++ b/hw/kdrive/src/kxv.c
> @@ -630,7 +630,7 @@ KdXVCopyClip(
>      GCPtr pGC
>   ){
>       /* copy the new clip if it exists */
> -    if((pGC->clientClipType == CT_REGION)&&  pGC->clientClip) {
> +    if(pGC->clientClip) {
>          if(!portPriv->clientClip)
>              portPriv->clientClip = RegionCreate(NullBox, 1);
>          /* Note: this is in window coordinates */
> diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
> index b46dfef..c5ac9f5 100644
> --- a/hw/xfree86/common/xf86xv.c
> +++ b/hw/xfree86/common/xf86xv.c
> @@ -695,7 +695,7 @@ xf86XVCopyClip(
>      GCPtr pGC
>   ){
>       /* copy the new clip if it exists */
> -    if((pGC->clientClipType == CT_REGION)&&  pGC->clientClip) {
> +    if(pGC->clientClip) {
>          if(!portPriv->clientClip)
>              portPriv->clientClip = RegionCreate(NullBox, 1);
>          /* Note: this is in window coordinates */
> diff --git a/hw/xfree86/xaa/xaaBitBlt.c b/hw/xfree86/xaa/xaaBitBlt.c
> index 049dbfb..3d50b90 100644
> --- a/hw/xfree86/xaa/xaaBitBlt.c
> +++ b/hw/xfree86/xaa/xaaBitBlt.c
> @@ -65,7 +65,7 @@ XAABitBlt(
>
>       /* clip the source */
>       if (pSrcDrawable->type == DRAWABLE_PIXMAP) {
> -       if ((pSrcDrawable == pDstDrawable)&&  (pGC->clientClipType == CT_NONE))
> +       if ((pSrcDrawable == pDstDrawable)&&  !pGC->clientClip)
>              prgnSrcClip = pGC->pCompositeClip;
>          else
>              fastClip = 1;
> @@ -78,7 +78,7 @@ XAABitBlt(
>                   */
>                  fastClip = 1;
>              } else if ((pSrcDrawable == pDstDrawable)&&
> -               (pGC->clientClipType == CT_NONE)) {
> +               !pGC->clientClip) {
>                  prgnSrcClip = pGC->pCompositeClip;
>              } else {
>                  prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable);
> diff --git a/hw/xnest/GC.c b/hw/xnest/GC.c
> index 579350b..ac99ffd 100644
> --- a/hw/xnest/GC.c
> +++ b/hw/xnest/GC.c
> @@ -90,37 +90,21 @@ 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;
> +  if (pGC->clientClip) {
> +    int i, nRects = RegionNumRects((RegionPtr) pGC->clientClip);
> +    XRectangle *pRects = malloc(nRects * sizeof(*pRects));
> +    BoxPtr pBox = RegionRects((RegionPtr) pGC->clientClip);
> +    for (i = nRects; i-->  0; ) {

Whitespace error: "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);

While you're at it, could you remove this cast please?

> +  } else
> +    XSetClipMask(xnestDisplay, xnestGC(pGC), None);

I'm wavering between asking you to fix the indentation since you're 
replacing the whole function anyway, but it would make the file 
inconsistent.  Better to change it all at one go, I guess.

>   }
>
>   void
> diff --git a/include/gcstruct.h b/include/gcstruct.h
> index fb9ee0d..ed598fc 100644
> --- a/include/gcstruct.h
> +++ b/include/gcstruct.h
> @@ -278,13 +278,12 @@ typedef struct _GC {
>       unsigned int       arcMode : 1;
>       unsigned int       subWindowMode : 1;
>       unsigned int       graphicsExposures : 1;
> -    unsigned int       clientClipType : 2; /* CT_<kind>  */

This leaves a misleading comment in gc.h:

/* clientClipType field in GC */
#define CT_NONE                 0
#define CT_PIXMAP               1
#define CT_REGION               2
[...]

>       unsigned int       miTranslate:1; /* should mi things translate? */
>       unsigned int       tileIsPixel:1; /* tile is solid pixel */
>       unsigned int       fExpose:1;     /* Call exposure handling */
>       unsigned int       freeCompClip:1;  /* Free composite clip */
>       unsigned int       scratch_inuse:1; /* is this GC in a pool for reuse? */
> -    unsigned int       unused:13; /* see comment above */
> +    unsigned int       unused:15; /* see comment above */
>       unsigned long      planemask;
>       unsigned long      fgPixel;
>       unsigned long      bgPixel;
> @@ -297,7 +296,7 @@ typedef struct _GC {
>       DDXPointRec                patOrg;         /* origin for (tile, stipple) */
>       struct _Font       *font;
>       DDXPointRec                clipOrg;
> -    pointer            clientClip;
> +    RegionPtr          clientClip;
>       unsigned long      stateChanges;   /* masked with GC_<kind>  */
>       unsigned long       serialNumber;
>       GCFuncs            *funcs;
> diff --git a/mi/micopy.c b/mi/micopy.c
> index 652c620..2fb40f5 100644
> --- a/mi/micopy.c
> +++ b/mi/micopy.c
> @@ -192,7 +192,7 @@ miDoCopy (DrawablePtr       pSrcDrawable,
>       /* Compute source clip region */
>       if (pSrcDrawable->type == DRAWABLE_PIXMAP)
>       {
> -       if ((pSrcDrawable == pDstDrawable)&&  (pGC->clientClipType == CT_NONE))
> +       if ((pSrcDrawable == pDstDrawable)&&  !pGC->clientClip)
>              prgnSrcClip = miGetCompositeClip(pGC);
>          else
>              fastSrc = TRUE;
> @@ -215,7 +215,7 @@ miDoCopy (DrawablePtr       pSrcDrawable,
>                  fastSrc = TRUE;
>              }
>              else if ((pSrcDrawable == pDstDrawable)&&
> -                    (pGC->clientClipType == CT_NONE))
> +                    !pGC->clientClip)
>              {
>                  prgnSrcClip = miGetCompositeClip(pGC);
>              }
> diff --git a/mi/miexpose.c b/mi/miexpose.c
> index 0f1ebe5..ce02b13 100644
> --- a/mi/miexpose.c
> +++ b/mi/miexpose.c
> @@ -251,7 +251,7 @@ miHandleExposures(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
>       RegionIntersect(&rgnExposed,&rgnExposed, prgnDstClip);
>
>       /* intersect with client clip region. */
> -    if (pGC->clientClipType == CT_REGION)
> +    if (pGC->clientClip)
>          RegionIntersect(&rgnExposed,&rgnExposed, pGC->clientClip);
>
>       /*
> diff --git a/mi/migc.c b/mi/migc.c
> index dce1f30..bf9cf5a 100644
> --- a/mi/migc.c
> +++ b/mi/migc.c
> @@ -88,7 +88,7 @@ miComputeCompositeClip( GCPtr pGC, DrawablePtr pDrawable)
>           * regions.  (this wins especially if many clients clip by children
>           * and have no client clip.)
>           */
> -       if (pGC->clientClipType == CT_NONE)
> +       if (!pGC->clientClip)
>          {
>              if (freeCompClip)
>                  RegionDestroy(pGC->pCompositeClip);
> @@ -155,7 +155,7 @@ miComputeCompositeClip( GCPtr pGC, DrawablePtr pDrawable)
>              pGC->pCompositeClip = RegionCreate(&pixbounds, 1);
>          }
>
> -       if (pGC->clientClipType == CT_REGION)
> +       if (pGC->clientClip)
>          {
>              if(pDrawable->x || pDrawable->y) {
>                  RegionTranslate(pGC->clientClip,
> diff --git a/mi/mioverlay.c b/mi/mioverlay.c
> index 766c5e7..fe2063d 100644
> --- a/mi/mioverlay.c
> +++ b/mi/mioverlay.c
> @@ -1745,7 +1745,7 @@ miOverlayComputeCompositeClip(GCPtr pGC, WindowPtr pWin)
>          freeTmpClip = FALSE;
>       }
>       freeCompClip = pGC->freeCompClip;
> -    if (pGC->clientClipType == CT_NONE) {
> +    if (!pGC->clientClip) {
>          if (freeCompClip)
>              RegionDestroy(pGC->pCompositeClip);
>          pGC->pCompositeClip = pregWin;
> diff --git a/xfixes/region.c b/xfixes/region.c
> index 606bf7a..7017334 100644
> --- a/xfixes/region.c
> +++ b/xfixes/region.c
> @@ -210,7 +210,7 @@ SProcXFixesCreateRegionFromWindow (ClientPtr client)
>   int
>   ProcXFixesCreateRegionFromGC (ClientPtr client)
>   {
> -    RegionPtr  pRegion, pClip;
> +    RegionPtr  pRegion;
>       GCPtr      pGC;
>       int        rc;
>       REQUEST (xXFixesCreateRegionFromGCReq);
> @@ -221,23 +221,14 @@ ProcXFixesCreateRegionFromGC (ClientPtr client)
>       rc = dixLookupGC(&pGC, stuff->gc, client, DixGetAttrAccess);
>       if (rc != Success)
>          return rc;
> -
> -    switch (pGC->clientClipType) {
> -    case CT_PIXMAP:
> -       pRegion = BitmapToRegion(pGC->pScreen, (PixmapPtr) pGC->clientClip);
> -       if (!pRegion)
> -           return BadAlloc;
> -       break;
> -    case CT_REGION:
> -       pClip = (RegionPtr) pGC->clientClip;
> -       pRegion = XFixesRegionCopy (pClip);
> -       if (!pRegion)
> -           return BadAlloc;
> -       break;
> -    default:
> +
> +    if (!pGC->clientClip)
>          return BadImplementation;   /* assume sane server bits */
> -    }
> -
> +
> +    pRegion = XFixesRegionCopy (pGC->clientClip);
> +    if (!pRegion)
> +       return BadAlloc;
> +
>       if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
>          return BadAlloc;
>
> --
> 1.7.5.4



More information about the xorg-devel mailing list