diff options
Diffstat (limited to 'render/mirect.c')
-rw-r--r-- | render/mirect.c | 237 |
1 files changed, 110 insertions, 127 deletions
diff --git a/render/mirect.c b/render/mirect.c index 4fb347a93..357d52860 100644 --- a/render/mirect.c +++ b/render/mirect.c @@ -34,152 +34,135 @@ #include "mipict.h" static void -miColorRects (PicturePtr pDst, - PicturePtr pClipPict, - xRenderColor *color, - int nRect, - xRectangle *rects, - int xoff, - int yoff) +miColorRects(PicturePtr pDst, + PicturePtr pClipPict, + xRenderColor * color, + int nRect, xRectangle *rects, int xoff, int yoff) { - CARD32 pixel; - GCPtr pGC; - ChangeGCVal tmpval[5]; - RegionPtr pClip; - unsigned long mask; + CARD32 pixel; + GCPtr pGC; + ChangeGCVal tmpval[5]; + RegionPtr pClip; + unsigned long mask; - miRenderColorToPixel (pDst->pFormat, color, &pixel); + miRenderColorToPixel(pDst->pFormat, color, &pixel); - pGC = GetScratchGC (pDst->pDrawable->depth, pDst->pDrawable->pScreen); + pGC = GetScratchGC(pDst->pDrawable->depth, pDst->pDrawable->pScreen); if (!pGC) - return; + return; tmpval[0].val = GXcopy; tmpval[1].val = pixel; tmpval[2].val = pDst->subWindowMode; mask = GCFunction | GCForeground | GCSubwindowMode; - if (pClipPict->clientClipType == CT_REGION) - { - tmpval[3].val = pDst->clipOrigin.x - xoff; - tmpval[4].val = pDst->clipOrigin.y - yoff; - mask |= GCClipXOrigin|GCClipYOrigin; - - pClip = RegionCreate(NULL, 1); - RegionCopy(pClip, - (RegionPtr) pClipPict->clientClip); - (*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0); + if (pClipPict->clientClipType == CT_REGION) { + tmpval[3].val = pDst->clipOrigin.x - xoff; + tmpval[4].val = pDst->clipOrigin.y - yoff; + mask |= GCClipXOrigin | GCClipYOrigin; + + pClip = RegionCreate(NULL, 1); + RegionCopy(pClip, (RegionPtr) pClipPict->clientClip); + (*pGC->funcs->ChangeClip) (pGC, CT_REGION, pClip, 0); } - ChangeGC (NullClient, pGC, mask, tmpval); - ValidateGC (pDst->pDrawable, pGC); - if (xoff || yoff) - { - int i; - for (i = 0; i < nRect; i++) - { - rects[i].x -= xoff; - rects[i].y -= yoff; - } + ChangeGC(NullClient, pGC, mask, tmpval); + ValidateGC(pDst->pDrawable, pGC); + if (xoff || yoff) { + int i; + + for (i = 0; i < nRect; i++) { + rects[i].x -= xoff; + rects[i].y -= yoff; + } } (*pGC->ops->PolyFillRect) (pDst->pDrawable, pGC, nRect, rects); - if (xoff || yoff) - { - int i; - for (i = 0; i < nRect; i++) - { - rects[i].x += xoff; - rects[i].y += yoff; - } + if (xoff || yoff) { + int i; + + for (i = 0; i < nRect; i++) { + rects[i].x += xoff; + rects[i].y += yoff; + } } - FreeScratchGC (pGC); + FreeScratchGC(pGC); } void -miCompositeRects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects) +miCompositeRects(CARD8 op, + PicturePtr pDst, + xRenderColor * color, int nRect, xRectangle *rects) { - ScreenPtr pScreen = pDst->pDrawable->pScreen; - - if (color->alpha == 0xffff) - { - if (op == PictOpOver) - op = PictOpSrc; + ScreenPtr pScreen = pDst->pDrawable->pScreen; + + if (color->alpha == 0xffff) { + if (op == PictOpOver) + op = PictOpSrc; } if (op == PictOpClear) - color->red = color->green = color->blue = color->alpha = 0; - - if (op == PictOpSrc || op == PictOpClear) - { - miColorRects (pDst, pDst, color, nRect, rects, 0, 0); - if (pDst->alphaMap) - miColorRects (pDst->alphaMap, pDst, - color, nRect, rects, - pDst->alphaOrigin.x, - pDst->alphaOrigin.y); + color->red = color->green = color->blue = color->alpha = 0; + + if (op == PictOpSrc || op == PictOpClear) { + miColorRects(pDst, pDst, color, nRect, rects, 0, 0); + if (pDst->alphaMap) + miColorRects(pDst->alphaMap, pDst, + color, nRect, rects, + pDst->alphaOrigin.x, pDst->alphaOrigin.y); } - else - { - PictFormatPtr rgbaFormat; - PixmapPtr pPixmap; - PicturePtr pSrc; - xRectangle one; - int error; - Pixel pixel; - GCPtr pGC; - ChangeGCVal gcvals[2]; - XID tmpval[1]; - - rgbaFormat = PictureMatchFormat (pScreen, 32, PICT_a8r8g8b8); - if (!rgbaFormat) - goto bail1; - - pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, rgbaFormat->depth, - CREATE_PIXMAP_USAGE_SCRATCH); - if (!pPixmap) - goto bail2; - - miRenderColorToPixel (rgbaFormat, color, &pixel); - - pGC = GetScratchGC (rgbaFormat->depth, pScreen); - if (!pGC) - goto bail3; - gcvals[0].val = GXcopy; - gcvals[1].val = pixel; - - ChangeGC (NullClient, pGC, GCFunction | GCForeground, gcvals); - ValidateGC (&pPixmap->drawable, pGC); - one.x = 0; - one.y = 0; - one.width = 1; - one.height = 1; - (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one); - - tmpval[0] = xTrue; - pSrc = CreatePicture (0, &pPixmap->drawable, rgbaFormat, - CPRepeat, tmpval, serverClient, &error); - - if (!pSrc) - goto bail4; - - while (nRect--) - { - CompositePicture (op, pSrc, 0, pDst, 0, 0, 0, 0, - rects->x, - rects->y, - rects->width, - rects->height); - rects++; - } - - FreePicture ((pointer) pSrc, 0); -bail4: - FreeScratchGC (pGC); -bail3: - (*pScreen->DestroyPixmap) (pPixmap); -bail2: -bail1: - ; + else { + PictFormatPtr rgbaFormat; + PixmapPtr pPixmap; + PicturePtr pSrc; + xRectangle one; + int error; + Pixel pixel; + GCPtr pGC; + ChangeGCVal gcvals[2]; + XID tmpval[1]; + + rgbaFormat = PictureMatchFormat(pScreen, 32, PICT_a8r8g8b8); + if (!rgbaFormat) + goto bail1; + + pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, rgbaFormat->depth, + CREATE_PIXMAP_USAGE_SCRATCH); + if (!pPixmap) + goto bail2; + + miRenderColorToPixel(rgbaFormat, color, &pixel); + + pGC = GetScratchGC(rgbaFormat->depth, pScreen); + if (!pGC) + goto bail3; + gcvals[0].val = GXcopy; + gcvals[1].val = pixel; + + ChangeGC(NullClient, pGC, GCFunction | GCForeground, gcvals); + ValidateGC(&pPixmap->drawable, pGC); + one.x = 0; + one.y = 0; + one.width = 1; + one.height = 1; + (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one); + + tmpval[0] = xTrue; + pSrc = CreatePicture(0, &pPixmap->drawable, rgbaFormat, + CPRepeat, tmpval, serverClient, &error); + + if (!pSrc) + goto bail4; + + while (nRect--) { + CompositePicture(op, pSrc, 0, pDst, 0, 0, 0, 0, + rects->x, rects->y, rects->width, rects->height); + rects++; + } + + FreePicture((pointer) pSrc, 0); + bail4: + FreeScratchGC(pGC); + bail3: + (*pScreen->DestroyPixmap) (pPixmap); + bail2: + bail1: + ; } } |