#ifndef _LAYERSTR_H_
#define _LAYERSTR_H_
#include "X.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "font.h"
#include "dixfontstr.h"
#include "fontstruct.h"
#include "mi.h"
#include "regionstr.h"
#include "globals.h"
#include "gcstruct.h"
#include "layer.h"
#ifdef RENDER
#include "picturestr.h"
#endif
extern int layerScrPrivateIndex;
extern int layerGCPrivateIndex;
extern int layerWinPrivateIndex;
typedef struct _LayerKind {
int kind;
CloseScreenProcPtr CloseScreen;
CreateWindowProcPtr CreateWindow;
DestroyWindowProcPtr DestroyWindow;
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
PaintWindowBackgroundProcPtr PaintWindowBackground;
PaintWindowBorderProcPtr PaintWindowBorder;
CopyWindowProcPtr CopyWindow;
CreatePixmapProcPtr CreatePixmap;
DestroyPixmapProcPtr DestroyPixmap;
CreateGCProcPtr CreateGC;
#ifdef RENDER
CompositeProcPtr Composite;
GlyphsProcPtr Glyphs;
CompositeRectsProcPtr CompositeRects;
#endif
} LayerKindRec;
#define LayerWrap(orig,lay,member,func) \
(((lay)->member = (orig)->member),\
((orig)->member = (func)))
#define LayerUnwrap(orig,lay,member) \
((orig)->member = (lay)->member)
typedef struct _LayerWin {
Bool isList;
union {
LayerPtr pLayer;
LayerListPtr pLayList;
} u;
} LayerWinRec;
typedef struct _LayerList {
LayerListPtr pNext;
LayerPtr pLayer;
Bool inheritClip;
RegionRec clipList;
RegionRec borderClip;
} LayerListRec;
#define layerGetWinPriv(pWin) ((LayerWinPtr) (pWin)->devPrivates[layerWinPrivateIndex].ptr)
#define layerWinPriv(pWin) LayerWinPtr pLayWin = layerGetWinPriv(pWin)
#define layerWinLayer(pLayWin) ((pLayWin)->isList ? (pLayWin)->u.pLayList->pLayer : (pLayWin)->u.pLayer)
typedef struct _LayerWinLoop {
LayerWinPtr pLayWin;
LayerListPtr pLayList;
PixmapPtr pPixmap;
RegionRec clipList;
RegionRec borderClip;
} LayerWinLoopRec, *LayerWinLoopPtr;
#define layerWinFirstLayer(pLayWin,pLayList) ((pLayWin)->isList ? ((pLayList) = (pLayWin)->u.pLayList)->pLayer : pLayWin->u.pLayer)
#define layerWinNextLayer(pLayWin,pLayList) ((pLayWin)->isList ? ((pLayList) = (pLayList)->pNext)->pLayer : 0)
LayerPtr
LayerWindowFirst (WindowPtr pWin, LayerWinLoopPtr pLoop);
LayerPtr
LayerWindowNext (WindowPtr pWin, LayerWinLoopPtr pLoop);
void
LayerWindowDone (WindowPtr pWin, LayerWinLoopPtr pLoop);
typedef struct _LayerGC {
GCFuncs *funcs;
LayerKindPtr pKind;
} LayerGCRec;
#define layerGetGCPriv(pGC) ((LayerGCPtr) (pGC)->devPrivates[layerGCPrivateIndex].ptr)
#define layerGCPriv(pGC) LayerGCPtr pLayGC = layerGetGCPriv(pGC)
typedef struct _LayerScreen {
int nkinds;
LayerKindPtr kinds;
LayerPtr pLayers;
} LayerScreenRec;
#define layerGetScrPriv(pScreen) ((LayerScreenPtr) (pScreen)->devPrivates[layerScrPrivateIndex].ptr)
#define layerScrPriv(pScreen) LayerScreenPtr pLayScr = layerGetScrPriv(pScreen)
Bool
layerCloseScreen (int index, ScreenPtr pScreen);
Bool
layerCreateWindow (WindowPtr pWin);
Bool
layerDestroyWindow (WindowPtr pWin);
Bool
layerChangeWindowAttributes (WindowPtr pWin, unsigned long mask);
void
layerPaintWindowBackground (WindowPtr pWin, RegionPtr pRegion, int what);
void
layerPaintWindowBorder (WindowPtr pWin, RegionPtr pRegion, int what);
void
layerCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
PixmapPtr
layerCreatePixmap (ScreenPtr pScreen, int width, int height, int depth);
Bool
layerDestroyPixmap (PixmapPtr pPixmap);
Bool
layerCreateGC (GCPtr pGC);
#ifdef RENDER
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);
void
layerGlyphs (CARD8 op,
PicturePtr pSrc,
PicturePtr pDst,
PictFormatPtr maskFormat,
INT16 xSrc,
INT16 ySrc,
int nlist,
GlyphListPtr list,
GlyphPtr *glyphs);
void
layerCompositeRects (CARD8 op,
PicturePtr pDst,
xRenderColor *color,
int nRect,
xRectangle *rects);
#endif
void layerValidateGC(GCPtr, unsigned long, DrawablePtr);
void layerChangeGC(GCPtr, unsigned long);
void layerCopyGC(GCPtr, unsigned long, GCPtr);
void layerDestroyGC(GCPtr);
void layerChangeClip(GCPtr, int, pointer, int);
void layerDestroyClip(GCPtr);
void layerCopyClip(GCPtr, GCPtr);
void
layerFillSpans(DrawablePtr pDraw,
GC *pGC,
int nInit,
DDXPointPtr pptInit,
int *pwidthInit,
int fSorted);
void
layerSetSpans(DrawablePtr pDraw,
GCPtr pGC,
char *pcharsrc,
DDXPointPtr pptInit,
int *pwidthInit,
int nspans,
int fSorted);
void
layerPutImage(
DrawablePtr pDraw,
GCPtr pGC,
int depth,
int x, int y, int w, int h,
int leftPad,
int format,
char *pImage
);
RegionPtr
layerCopyArea(
DrawablePtr pSrc,
DrawablePtr pDst,
GC *pGC,
int srcx, int srcy,
int width, int height,
int dstx, int dsty
);
RegionPtr
layerCopyPlane(
DrawablePtr pSrc,
DrawablePtr pDst,
GCPtr pGC,
int srcx, int srcy,
int width, int height,
int dstx, int dsty,
unsigned long bitPlane
);
void
layerPolyPoint(
DrawablePtr pDraw,
GCPtr pGC,
int mode,
int npt,
xPoint *pptInit
);
void
layerPolylines(
DrawablePtr pDraw,
GCPtr pGC,
int mode,
int npt,
DDXPointPtr pptInit
);
void
layerPolySegment(
DrawablePtr pDraw,
GCPtr pGC,
int nseg,
xSegment *pSeg
);
void
layerPolyRectangle(
DrawablePtr pDraw,
GCPtr pGC,
int nRects,
xRectangle *pRects
);
void
layerPolyArc(
DrawablePtr pDraw,
GCPtr pGC,
int narcs,
xArc *parcs
);
void
layerFillPolygon(
DrawablePtr pDraw,
GCPtr pGC,
int shape,
int mode,
int count,
DDXPointPtr pptInit
);
void
layerPolyFillRect(
DrawablePtr pDraw,
GCPtr pGC,
int nRectsInit,
xRectangle *pRectsInit
);
void
layerPolyFillArc(
DrawablePtr pDraw,
GCPtr pGC,
int narcs,
xArc *parcs
);
int
layerPolyText8(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
char *chars
);
int
layerPolyText16(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
unsigned short *chars
);
void
layerImageText8(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
char *chars
);
void
layerImageText16(
DrawablePtr pDraw,
GCPtr pGC,
int x,
int y,
int count,
unsigned short *chars
);
void
layerImageGlyphBlt(
DrawablePtr pDraw,
GCPtr pGC,
int x, int y,
unsigned int nglyph,
CharInfoPtr *ppci,
pointer pglyphBase
);
void
layerPolyGlyphBlt(
DrawablePtr pDraw,
GCPtr pGC,
int x, int y,
unsigned int nglyph,
CharInfoPtr *ppci,
pointer pglyphBase
);
void
layerPushPixels(
GCPtr pGC,
PixmapPtr pBitMap,
DrawablePtr pDraw,
int dx, int dy, int xOrg, int yOrg
);
#endif