static void ShadowPutImage(DrawablePtr pDraw, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pImage) { BoxRec box; Bool boxNotEmpty = FALSE; SHADOW_GC_OP_PROLOGUE(pGC); if (IS_VISIBLE(pDraw)) { box.x1 = x + pDraw->x; box.x2 = box.x1 + w; box.y1 = y + pDraw->y; box.y2 = box.y1 + h; TRIM_BOX(box, pGC); if (BOX_NOT_EMPTY(box)) { if (pPriv->preRefresh) (*pPriv->preRefresh) (pPriv->pScrn, 1, &box); boxNotEmpty = TRUE; } } (*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h, leftPad, format, pImage); if (boxNotEmpty && pPriv->postRefresh) (*pPriv->postRefresh) (pPriv->pScrn, 1, &box); SHADOW_GC_OP_EPILOGUE(pGC); }
static void ShadowSetSpans( DrawablePtr pDraw, GCPtr pGC, char *pcharsrc, DDXPointPtr pptInit, int *pwidthInit, int nspans, int fSorted ){ SHADOW_GC_OP_PROLOGUE(pGC); if(IS_VISIBLE(pDraw) && nspans) { DDXPointPtr ppt = pptInit; int *pwidth = pwidthInit; int i = nspans; BoxRec box; Bool boxNotEmpty = FALSE; box.x1 = ppt->x; box.x2 = box.x1 + *pwidth; box.y2 = box.y1 = ppt->y; while(--i) { ppt++; pwidth++; if(box.x1 > ppt->x) box.x1 = ppt->x; if(box.x2 < (ppt->x + *pwidth)) box.x2 = ppt->x + *pwidth; if(box.y1 > ppt->y) box.y1 = ppt->y; else if(box.y2 < ppt->y) box.y2 = ppt->y; } box.y2++; if(!pGC->miTranslate) { TRANSLATE_BOX(box, pDraw); } TRIM_BOX(box, pGC); if(BOX_NOT_EMPTY(box)) { if(pPriv->preRefresh) (*pPriv->preRefresh)(pPriv->pScrn, 1, &box); boxNotEmpty = TRUE; } (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, pptInit, pwidthInit, nspans, fSorted); if(boxNotEmpty && pPriv->postRefresh) (*pPriv->postRefresh)(pPriv->pScrn, 1, &box); } else (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, pptInit, pwidthInit, nspans, fSorted); SHADOW_GC_OP_EPILOGUE(pGC); }
static void ShadowPolyPoint( DrawablePtr pDraw, GCPtr pGC, int mode, int nptInit, xPoint *pptInit ){ BoxRec box; Bool boxNotEmpty = FALSE; SHADOW_GC_OP_PROLOGUE(pGC); if(IS_VISIBLE(pDraw) && nptInit) { xPoint *ppt = pptInit; int npt = nptInit; box.x2 = box.x1 = pptInit->x; box.y2 = box.y1 = pptInit->y; /* this could be slow if the points were spread out */ while(--npt) { ppt++; if(box.x1 > ppt->x) box.x1 = ppt->x; else if(box.x2 < ppt->x) box.x2 = ppt->x; if(box.y1 > ppt->y) box.y1 = ppt->y; else if(box.y2 < ppt->y) box.y2 = ppt->y; } box.x2++; box.y2++; TRIM_AND_TRANSLATE_BOX(box, pDraw, pGC); if(BOX_NOT_EMPTY(box)) { if(pPriv->preRefresh) (*pPriv->preRefresh)(pPriv->pScrn, 1, &box); boxNotEmpty = TRUE; } } (*pGC->ops->PolyPoint)(pDraw, pGC, mode, nptInit, pptInit); if(boxNotEmpty && pPriv->postRefresh) (*pPriv->postRefresh)(pPriv->pScrn, 1, &box); SHADOW_GC_OP_EPILOGUE(pGC); }
static RegionPtr ShadowCopyPlane( DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane ){ RegionPtr ret; BoxRec box; Bool boxNotEmpty = FALSE; SHADOW_GC_OP_PROLOGUE(pGC); if(IS_VISIBLE(pDst)) { box.x1 = dstx + pDst->x; box.x2 = box.x1 + width; box.y1 = dsty + pDst->y; box.y2 = box.y1 + height; TRIM_BOX(box, pGC); if(BOX_NOT_EMPTY(box)) { if(pPriv->preRefresh) (*pPriv->preRefresh)(pPriv->pScrn, 1, &box); boxNotEmpty = TRUE; } } ret = (*pGC->ops->CopyPlane)(pSrc, pDst, pGC, srcx, srcy, width, height, dstx, dsty, bitPlane); if(boxNotEmpty && pPriv->postRefresh) (*pPriv->postRefresh)(pPriv->pScrn, 1, &box); SHADOW_GC_OP_EPILOGUE(pGC); return ret; }