#include "layerstr.h"
void
layerComposite (CARD8 op,
PicturePtr pSrc,
PicturePtr pMask,
PicturePtr pDst,
INT16 xSrc,
INT16 ySrc,
INT16 xMask,
INT16 yMask,
INT16 xDst,
INT16 yDst,
CARD16 width,
CARD16 height)
{
LayerPtr pLayer;
LayerWinLoopRec loop;
DrawablePtr pDstDrawable = pDst->pDrawable;
ScreenPtr pScreen = pDstDrawable->pScreen;
PictureScreenPtr ps = GetPictureScreen (pScreen);
if (pDstDrawable->type == DRAWABLE_WINDOW)
{
WindowPtr pWin = (WindowPtr) pDstDrawable;
for (pLayer = LayerWindowFirst (pWin, &loop);
pLayer;
pLayer = LayerWindowNext (pWin, &loop))
{
LayerUnwrap (ps, pLayer->pKind, Composite);
(*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc,
xMask, yMask, xDst, yDst, width, height);
LayerWrap (ps, pLayer->pKind, Composite, layerComposite);
}
LayerWindowDone (pWin, &loop);
}
else
{
layerScrPriv (pScreen);
LayerUnwrap (ps, &pLayScr->kinds[LAYER_FB], Composite);
(*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc,
xMask, yMask, xDst, yDst, width, height);
LayerWrap (ps, &pLayScr->kinds[LAYER_FB], Composite, layerComposite);
}
}
void
layerGlyphs (CARD8 op,
PicturePtr pSrc,
PicturePtr pDst,
PictFormatPtr maskFormat,
INT16 xSrc,
INT16 ySrc,
int nlist,
GlyphListPtr list,
GlyphPtr *glyphs)
{
LayerPtr pLayer;
LayerWinLoopRec loop;
DrawablePtr pDstDrawable = pDst->pDrawable;
ScreenPtr pScreen = pDstDrawable->pScreen;
PictureScreenPtr ps = GetPictureScreen (pScreen);
if (pDstDrawable->type == DRAWABLE_WINDOW)
{
WindowPtr pWin = (WindowPtr) pDstDrawable;
for (pLayer = LayerWindowFirst (pWin, &loop);
pLayer;
pLayer = LayerWindowNext (pWin, &loop))
{
LayerUnwrap (ps, pLayer->pKind, Glyphs);
(*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc,
nlist, list, glyphs);
LayerWrap (ps, pLayer->pKind, Glyphs, layerGlyphs);
}
LayerWindowDone (pWin, &loop);
}
else
{
layerScrPriv (pScreen);
LayerUnwrap (ps, &pLayScr->kinds[LAYER_FB], Glyphs);
(*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc,
nlist, list, glyphs);
LayerWrap (ps, &pLayScr->kinds[LAYER_FB], Glyphs, layerGlyphs);
}
}
void
layerCompositeRects (CARD8 op,
PicturePtr pDst,
xRenderColor *color,
int nRect,
xRectangle *rects)
{
LayerPtr pLayer;
LayerWinLoopRec loop;
DrawablePtr pDstDrawable = pDst->pDrawable;
ScreenPtr pScreen = pDstDrawable->pScreen;
PictureScreenPtr ps = GetPictureScreen (pScreen);
if (pDstDrawable->type == DRAWABLE_WINDOW)
{
WindowPtr pWin = (WindowPtr) pDstDrawable;
for (pLayer = LayerWindowFirst (pWin, &loop);
pLayer;
pLayer = LayerWindowNext (pWin, &loop))
{
LayerUnwrap (ps, pLayer->pKind, CompositeRects);
(*ps->CompositeRects) (op, pDst, color, nRect, rects);
LayerWrap (ps, pLayer->pKind, CompositeRects, layerCompositeRects);
}
LayerWindowDone (pWin, &loop);
}
else
{
layerScrPriv (pScreen);
LayerUnwrap (ps, &pLayScr->kinds[LAYER_FB], CompositeRects);
(*ps->CompositeRects) (op, pDst, color, nRect, rects);
LayerWrap (ps, &pLayScr->kinds[LAYER_FB], CompositeRects, layerCompositeRects);
}
}