426 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			426 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * $XFree86: xc/programs/Xserver/miext/layer/layerstr.h,v 1.2 2001/06/04 09:45:41 keithp Exp $
 | 
						|
 *
 | 
						|
 * Copyright © 2001 Keith Packard, member of The XFree86 Project, Inc.
 | 
						|
 *
 | 
						|
 * Permission to use, copy, modify, distribute, and sell this software and its
 | 
						|
 * documentation for any purpose is hereby granted without fee, provided that
 | 
						|
 * the above copyright notice appear in all copies and that both that
 | 
						|
 * copyright notice and this permission notice appear in supporting
 | 
						|
 * documentation, and that the name of Keith Packard not be used in
 | 
						|
 * advertising or publicity pertaining to distribution of the software without
 | 
						|
 * specific, written prior permission.  Keith Packard makes no
 | 
						|
 * representations about the suitability of this software for any purpose.  It
 | 
						|
 * is provided "as is" without express or implied warranty.
 | 
						|
 *
 | 
						|
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 | 
						|
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 | 
						|
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 | 
						|
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 | 
						|
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 | 
						|
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | 
						|
 * PERFORMANCE OF THIS SOFTWARE.
 | 
						|
 */
 | 
						|
 | 
						|
#ifdef HAVE_DIX_CONFIG_H
 | 
						|
#include <dix-config.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef _LAYERSTR_H_
 | 
						|
#define _LAYERSTR_H_
 | 
						|
 | 
						|
#include    <X11/X.h>
 | 
						|
#include    "scrnintstr.h"
 | 
						|
#include    "windowstr.h"
 | 
						|
#include    <X11/fonts/font.h>
 | 
						|
#include    "dixfontstr.h"
 | 
						|
#include    <X11/fonts/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;
 | 
						|
 | 
						|
/*
 | 
						|
 * One of these for each possible set of underlying
 | 
						|
 * rendering code.  The first kind always points at the
 | 
						|
 * underlying frame buffer code and is created in LayerStartInit
 | 
						|
 * so that LayerNewKind can unwrap the screen and prepare it
 | 
						|
 * for another wrapping sequence.
 | 
						|
 *
 | 
						|
 * The set of functions wrapped here must be at least the union
 | 
						|
 * of all functions wrapped by any rendering layer in use; they're
 | 
						|
 * easy to add, so don't be shy
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct _LayerKind {
 | 
						|
    int				kind;			/* kind index */
 | 
						|
 | 
						|
    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)
 | 
						|
 | 
						|
/*
 | 
						|
 * This is the window private structure allocated for
 | 
						|
 * all windows.  There are two possible alternatives here,
 | 
						|
 * either the window belongs to a single layer and uses its
 | 
						|
 * internal clip/borderClip lists or the window belongs to one
 | 
						|
 * or more layers and uses a separate clip/borderclip for each
 | 
						|
 * layer.  When this is integrated into the core window struct,
 | 
						|
 * the LayerWinKind can become a single bit saving 8 bytes per
 | 
						|
 * window.
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct _LayerWin {
 | 
						|
    Bool		isList;
 | 
						|
    union {
 | 
						|
	LayerPtr	pLayer;
 | 
						|
	LayerListPtr	pLayList;
 | 
						|
    } u;
 | 
						|
} LayerWinRec;
 | 
						|
 | 
						|
typedef struct _LayerList {
 | 
						|
    LayerListPtr    pNext;	    /* list of layers for this window */
 | 
						|
    LayerPtr	    pLayer;	    /* the layer */
 | 
						|
    Bool	    inheritClip;    /* use the window clipList/borderClip */
 | 
						|
    RegionRec	    clipList;	    /* per-layer clip/border clip lists */
 | 
						|
    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;	    /* original window pixmap */
 | 
						|
    RegionRec	    clipList;	    /* saved original clipList contents */
 | 
						|
    RegionRec	    borderClip;	    /* saved original borderClip contents */
 | 
						|
} 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);
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 * This is the GC private structure allocated for all GCs.
 | 
						|
 * XXX this is really messed up; I'm not sure how to fix it yet
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct _LayerGC {
 | 
						|
    GCFuncs	    *funcs;
 | 
						|
    LayerKindPtr    pKind;
 | 
						|
} LayerGCRec;
 | 
						|
 | 
						|
#define layerGetGCPriv(pGC)	    ((LayerGCPtr) (pGC)->devPrivates[layerGCPrivateIndex].ptr)
 | 
						|
#define layerGCPriv(pGC)	    LayerGCPtr pLayGC = layerGetGCPriv(pGC)
 | 
						|
 | 
						|
/*
 | 
						|
 * This is the screen private, it contains
 | 
						|
 * the layer kinds and the layers themselves
 | 
						|
 */
 | 
						|
typedef struct _LayerScreen {
 | 
						|
    int		    nkinds;	    /* number of elements in kinds array */
 | 
						|
    LayerKindPtr    kinds;	    /* created kinds; reallocated when new ones added */
 | 
						|
    LayerPtr	    pLayers;	    /* list of layers for this screen */
 | 
						|
} 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 /* _LAYERSTR_H_ */
 |