summaryrefslogtreecommitdiff
path: root/xc/programs/Xserver/miext/layer/layerwin.c
diff options
context:
space:
mode:
Diffstat (limited to 'xc/programs/Xserver/miext/layer/layerwin.c')
-rw-r--r--xc/programs/Xserver/miext/layer/layerwin.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/xc/programs/Xserver/miext/layer/layerwin.c b/xc/programs/Xserver/miext/layer/layerwin.c
index 8e5615a77..8160000c8 100644
--- a/xc/programs/Xserver/miext/layer/layerwin.c
+++ b/xc/programs/Xserver/miext/layer/layerwin.c
@@ -1,5 +1,5 @@
/*
- * $XFree86: xc/programs/Xserver/miext/layer/layerwin.c,v 1.6 2002/10/03 22:50:21 keithp Exp $
+ * $XFree86: xc/programs/Xserver/miext/layer/layerwin.c,v 1.7 2002/11/08 22:19:42 keithp Exp $
*
* Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
*
@@ -55,9 +55,13 @@ FreeLayerList (ScreenPtr pScreen, LayerListPtr pLayList)
Bool
LayerCreatePixmap (ScreenPtr pScreen, LayerPtr pLayer)
{
+ LayerKindPtr pKind = pLayer->pKind;
+
+ LayerUnwrap (pScreen, pKind, CreatePixmap);
/* XXX create full-screen sized layers all around */
pLayer->pPixmap = (*pScreen->CreatePixmap) (pScreen, pScreen->width,
pScreen->height, pLayer->depth);
+ LayerWrap (pScreen, pKind, CreatePixmap, layerCreatePixmap);
if (!pLayer->pPixmap)
return FALSE;
if (pLayer->pKind->kind == LAYER_SHADOW)
@@ -82,9 +86,15 @@ LayerDestroyPixmap (ScreenPtr pScreen, LayerPtr pLayer)
if (pLayer->pKind->kind == LAYER_SHADOW)
shadowRemove (pScreen, pLayer->pPixmap);
if (pLayer->freePixmap)
+ {
+ LayerKindPtr pKind = pLayer->pKind;
+
+ LayerUnwrap (pScreen, pKind, DestroyPixmap);
(*pScreen->DestroyPixmap) (pLayer->pPixmap);
+ LayerWrap (pScreen, pKind, DestroyPixmap, layerDestroyPixmap);
+ }
+ pLayer->pPixmap = 0;
}
- pLayer->pPixmap = 0;
}
/*
@@ -436,3 +446,38 @@ layerCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
LayerWindowDone (pWin, &loop);
}
+PixmapPtr
+layerCreatePixmap (ScreenPtr pScreen, int width, int height, int depth)
+{
+ /* XXX assume the first layer can handle all pixmaps */
+ layerScrPriv (pScreen);
+ LayerKindPtr pKind;
+ PixmapPtr pPixmap;
+
+ pKind = &pLayScr->kinds[0];
+ if (pLayScr->pLayers)
+ pKind = pLayScr->pLayers->pKind;
+ LayerUnwrap (pScreen, pKind, CreatePixmap);
+ pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, depth);
+ LayerWrap (pScreen,pKind,CreatePixmap,layerCreatePixmap);
+ return pPixmap;
+}
+
+Bool
+layerDestroyPixmap (PixmapPtr pPixmap)
+{
+ /* XXX assume the first layer can handle all pixmaps */
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ layerScrPriv (pScreen);
+ LayerKindPtr pKind;
+ Bool ret;
+
+ pKind = &pLayScr->kinds[0];
+ if (pLayScr->pLayers)
+ pKind = pLayScr->pLayers->pKind;
+ LayerUnwrap (pScreen, pKind, DestroyPixmap);
+ ret = (*pScreen->DestroyPixmap) (pPixmap);
+ LayerWrap (pScreen,pKind,DestroyPixmap,layerDestroyPixmap);
+ return ret;
+}
+