shadow.h revision 6747b715
105b261ecSmrg/*
205b261ecSmrg *
305b261ecSmrg * Copyright © 2000 Keith Packard
405b261ecSmrg *
505b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
605b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
705b261ecSmrg * the above copyright notice appear in all copies and that both that
805b261ecSmrg * copyright notice and this permission notice appear in supporting
905b261ecSmrg * documentation, and that the name of Keith Packard not be used in
1005b261ecSmrg * advertising or publicity pertaining to distribution of the software without
1105b261ecSmrg * specific, written prior permission.  Keith Packard makes no
1205b261ecSmrg * representations about the suitability of this software for any purpose.  It
1305b261ecSmrg * is provided "as is" without express or implied warranty.
1405b261ecSmrg *
1505b261ecSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1605b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1705b261ecSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1805b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1905b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
2005b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2105b261ecSmrg * PERFORMANCE OF THIS SOFTWARE.
2205b261ecSmrg */
2305b261ecSmrg
2405b261ecSmrg#ifndef _SHADOW_H_
2505b261ecSmrg#define _SHADOW_H_
2605b261ecSmrg
2705b261ecSmrg#include "scrnintstr.h"
2805b261ecSmrg
2905b261ecSmrg#include "picturestr.h"
3005b261ecSmrg
3105b261ecSmrg#include "damage.h"
3205b261ecSmrg#include "damagestr.h"
3305b261ecSmrgtypedef struct _shadowBuf   *shadowBufPtr;
3405b261ecSmrg
3505b261ecSmrgtypedef void (*ShadowUpdateProc) (ScreenPtr pScreen,
3605b261ecSmrg				  shadowBufPtr pBuf);
3705b261ecSmrg
3805b261ecSmrg#define SHADOW_WINDOW_RELOCATE 1
3905b261ecSmrg#define SHADOW_WINDOW_READ 2
4005b261ecSmrg#define SHADOW_WINDOW_WRITE 4
4105b261ecSmrg
4205b261ecSmrgtypedef void *(*ShadowWindowProc) (ScreenPtr	pScreen,
4305b261ecSmrg				   CARD32	row,
4405b261ecSmrg				   CARD32	offset,
4505b261ecSmrg				   int		mode,
4605b261ecSmrg				   CARD32	*size,
4705b261ecSmrg				   void		*closure);
4805b261ecSmrg
4905b261ecSmrg/* BC hack: do not move the damage member.  see shadow.c for explanation. */
5005b261ecSmrgtypedef struct _shadowBuf {
5105b261ecSmrg    DamagePtr           pDamage;
5205b261ecSmrg    ShadowUpdateProc	update;
5305b261ecSmrg    ShadowWindowProc	window;
5405b261ecSmrg    RegionRec		damage;
5505b261ecSmrg    PixmapPtr		pPixmap;
5605b261ecSmrg    void		*closure;
5705b261ecSmrg    int			randr;
5805b261ecSmrg
5905b261ecSmrg    /* screen wrappers */
6005b261ecSmrg    GetImageProcPtr     GetImage;
6105b261ecSmrg    CloseScreenProcPtr  CloseScreen;
6205b261ecSmrg} shadowBufRec;
6305b261ecSmrg
6405b261ecSmrg/* Match defines from randr extension */
6505b261ecSmrg#define SHADOW_ROTATE_0	    1
6605b261ecSmrg#define SHADOW_ROTATE_90    2
6705b261ecSmrg#define SHADOW_ROTATE_180   4
6805b261ecSmrg#define SHADOW_ROTATE_270   8
6905b261ecSmrg#define SHADOW_ROTATE_ALL   (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\
7005b261ecSmrg			     SHADOW_ROTATE_180|SHADOW_ROTATE_270)
7105b261ecSmrg#define SHADOW_REFLECT_X    16
7205b261ecSmrg#define SHADOW_REFLECT_Y    32
7305b261ecSmrg#define SHADOW_REFLECT_ALL  (SHADOW_REFLECT_X|SHADOW_REFLECT_Y)
7405b261ecSmrg
756747b715Smrgextern _X_EXPORT DevPrivateKey shadowScrPrivateKey;
7605b261ecSmrg
774642e01fSmrg#define shadowGetBuf(pScr) ((shadowBufPtr) \
784642e01fSmrg    dixLookupPrivate(&(pScr)->devPrivates, shadowScrPrivateKey))
7905b261ecSmrg#define shadowBuf(pScr)            shadowBufPtr pBuf = shadowGetBuf(pScr)
8005b261ecSmrg#define shadowDamage(pBuf)  DamageRegion(pBuf->pDamage)
8105b261ecSmrg
826747b715Smrgextern _X_EXPORT Bool
8305b261ecSmrgshadowSetup (ScreenPtr pScreen);
8405b261ecSmrg
856747b715Smrgextern _X_EXPORT Bool
8605b261ecSmrgshadowAdd (ScreenPtr	    pScreen,
8705b261ecSmrg	   PixmapPtr	    pPixmap,
8805b261ecSmrg	   ShadowUpdateProc update,
8905b261ecSmrg	   ShadowWindowProc window,
9005b261ecSmrg	   int		    randr,
9105b261ecSmrg	   void		    *closure);
9205b261ecSmrg
936747b715Smrgextern _X_EXPORT void
9405b261ecSmrgshadowRemove (ScreenPtr pScreen, PixmapPtr pPixmap);
9505b261ecSmrg
966747b715Smrgextern _X_EXPORT Bool
9705b261ecSmrgshadowInit (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
9805b261ecSmrg
996747b715Smrgextern _X_EXPORT void *
10005b261ecSmrgshadowAlloc (int width, int height, int bpp);
10105b261ecSmrg
1026747b715Smrgextern _X_EXPORT void
10305b261ecSmrgshadowUpdatePacked (ScreenPtr	    pScreen,
10405b261ecSmrg		    shadowBufPtr    pBuf);
10505b261ecSmrg
1066747b715Smrgextern _X_EXPORT void
10705b261ecSmrgshadowUpdatePlanar4 (ScreenPtr	    pScreen,
10805b261ecSmrg		     shadowBufPtr   pBuf);
10905b261ecSmrg
1106747b715Smrgextern _X_EXPORT void
11105b261ecSmrgshadowUpdatePlanar4x8 (ScreenPtr    pScreen,
11205b261ecSmrg		       shadowBufPtr pBuf);
11305b261ecSmrg
1146747b715Smrgextern _X_EXPORT void
11505b261ecSmrgshadowUpdateRotatePacked (ScreenPtr    pScreen,
11605b261ecSmrg			  shadowBufPtr pBuf);
11705b261ecSmrg
1186747b715Smrgextern _X_EXPORT void
11905b261ecSmrgshadowUpdateRotate8_90 (ScreenPtr    pScreen,
12005b261ecSmrg			shadowBufPtr pBuf);
12105b261ecSmrg
1226747b715Smrgextern _X_EXPORT void
12305b261ecSmrgshadowUpdateRotate16_90 (ScreenPtr    pScreen,
12405b261ecSmrg			 shadowBufPtr pBuf);
12505b261ecSmrg
1266747b715Smrgextern _X_EXPORT void
12705b261ecSmrgshadowUpdateRotate16_90YX (ScreenPtr    pScreen,
12805b261ecSmrg			   shadowBufPtr pBuf);
12905b261ecSmrg
1306747b715Smrgextern _X_EXPORT void
13105b261ecSmrgshadowUpdateRotate32_90 (ScreenPtr    pScreen,
13205b261ecSmrg			 shadowBufPtr pBuf);
13305b261ecSmrg
1346747b715Smrgextern _X_EXPORT void
13505b261ecSmrgshadowUpdateRotate8_180 (ScreenPtr    pScreen,
13605b261ecSmrg			 shadowBufPtr pBuf);
13705b261ecSmrg
1386747b715Smrgextern _X_EXPORT void
13905b261ecSmrgshadowUpdateRotate16_180 (ScreenPtr    pScreen,
14005b261ecSmrg			  shadowBufPtr pBuf);
14105b261ecSmrg
1426747b715Smrgextern _X_EXPORT void
14305b261ecSmrgshadowUpdateRotate32_180 (ScreenPtr    pScreen,
14405b261ecSmrg			  shadowBufPtr pBuf);
14505b261ecSmrg
1466747b715Smrgextern _X_EXPORT void
14705b261ecSmrgshadowUpdateRotate8_270 (ScreenPtr    pScreen,
14805b261ecSmrg			 shadowBufPtr pBuf);
14905b261ecSmrg
1506747b715Smrgextern _X_EXPORT void
15105b261ecSmrgshadowUpdateRotate16_270 (ScreenPtr    pScreen,
15205b261ecSmrg			  shadowBufPtr pBuf);
15305b261ecSmrg
1546747b715Smrgextern _X_EXPORT void
15505b261ecSmrgshadowUpdateRotate16_270YX (ScreenPtr    pScreen,
15605b261ecSmrg			    shadowBufPtr pBuf);
15705b261ecSmrg
1586747b715Smrgextern _X_EXPORT void
15905b261ecSmrgshadowUpdateRotate32_270 (ScreenPtr    pScreen,
16005b261ecSmrg			  shadowBufPtr pBuf);
16105b261ecSmrg
1626747b715Smrgextern _X_EXPORT void
16305b261ecSmrgshadowUpdateRotate8 (ScreenPtr    pScreen,
16405b261ecSmrg		     shadowBufPtr pBuf);
16505b261ecSmrg
1666747b715Smrgextern _X_EXPORT void
16705b261ecSmrgshadowUpdateRotate16 (ScreenPtr    pScreen,
16805b261ecSmrg		      shadowBufPtr pBuf);
16905b261ecSmrg
1706747b715Smrgextern _X_EXPORT void
17105b261ecSmrgshadowUpdateRotate32 (ScreenPtr    pScreen,
17205b261ecSmrg		      shadowBufPtr pBuf);
17305b261ecSmrg
17405b261ecSmrgtypedef void (* shadowUpdateProc)(ScreenPtr, shadowBufPtr);
17505b261ecSmrg
1766747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePackedWeak(void);
1776747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4Weak(void);
1786747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4x8Weak(void);
1796747b715Smrgextern _X_EXPORT shadowUpdateProc shadowUpdateRotatePackedWeak(void);
18005b261ecSmrg
18105b261ecSmrg#endif /* _SHADOW_H_ */
182