shadow.h revision 4642e01f
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#ifdef RENDER
3005b261ecSmrg#include "picturestr.h"
3105b261ecSmrg#endif
3205b261ecSmrg
3305b261ecSmrg#include "damage.h"
3405b261ecSmrg#include "damagestr.h"
3505b261ecSmrgtypedef struct _shadowBuf   *shadowBufPtr;
3605b261ecSmrg
3705b261ecSmrgtypedef void (*ShadowUpdateProc) (ScreenPtr pScreen,
3805b261ecSmrg				  shadowBufPtr pBuf);
3905b261ecSmrg
4005b261ecSmrg#define SHADOW_WINDOW_RELOCATE 1
4105b261ecSmrg#define SHADOW_WINDOW_READ 2
4205b261ecSmrg#define SHADOW_WINDOW_WRITE 4
4305b261ecSmrg
4405b261ecSmrgtypedef void *(*ShadowWindowProc) (ScreenPtr	pScreen,
4505b261ecSmrg				   CARD32	row,
4605b261ecSmrg				   CARD32	offset,
4705b261ecSmrg				   int		mode,
4805b261ecSmrg				   CARD32	*size,
4905b261ecSmrg				   void		*closure);
5005b261ecSmrg
5105b261ecSmrg/* BC hack: do not move the damage member.  see shadow.c for explanation. */
5205b261ecSmrgtypedef struct _shadowBuf {
5305b261ecSmrg    DamagePtr           pDamage;
5405b261ecSmrg    ShadowUpdateProc	update;
5505b261ecSmrg    ShadowWindowProc	window;
5605b261ecSmrg    RegionRec		damage;
5705b261ecSmrg    PixmapPtr		pPixmap;
5805b261ecSmrg    void		*closure;
5905b261ecSmrg    int			randr;
6005b261ecSmrg
6105b261ecSmrg    /* screen wrappers */
6205b261ecSmrg    GetImageProcPtr     GetImage;
6305b261ecSmrg    CloseScreenProcPtr  CloseScreen;
6405b261ecSmrg} shadowBufRec;
6505b261ecSmrg
6605b261ecSmrg/* Match defines from randr extension */
6705b261ecSmrg#define SHADOW_ROTATE_0	    1
6805b261ecSmrg#define SHADOW_ROTATE_90    2
6905b261ecSmrg#define SHADOW_ROTATE_180   4
7005b261ecSmrg#define SHADOW_ROTATE_270   8
7105b261ecSmrg#define SHADOW_ROTATE_ALL   (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\
7205b261ecSmrg			     SHADOW_ROTATE_180|SHADOW_ROTATE_270)
7305b261ecSmrg#define SHADOW_REFLECT_X    16
7405b261ecSmrg#define SHADOW_REFLECT_Y    32
7505b261ecSmrg#define SHADOW_REFLECT_ALL  (SHADOW_REFLECT_X|SHADOW_REFLECT_Y)
7605b261ecSmrg
774642e01fSmrgextern DevPrivateKey shadowScrPrivateKey;
7805b261ecSmrg
794642e01fSmrg#define shadowGetBuf(pScr) ((shadowBufPtr) \
804642e01fSmrg    dixLookupPrivate(&(pScr)->devPrivates, shadowScrPrivateKey))
8105b261ecSmrg#define shadowBuf(pScr)            shadowBufPtr pBuf = shadowGetBuf(pScr)
8205b261ecSmrg#define shadowDamage(pBuf)  DamageRegion(pBuf->pDamage)
8305b261ecSmrg
8405b261ecSmrgBool
8505b261ecSmrgshadowSetup (ScreenPtr pScreen);
8605b261ecSmrg
8705b261ecSmrgBool
8805b261ecSmrgshadowAdd (ScreenPtr	    pScreen,
8905b261ecSmrg	   PixmapPtr	    pPixmap,
9005b261ecSmrg	   ShadowUpdateProc update,
9105b261ecSmrg	   ShadowWindowProc window,
9205b261ecSmrg	   int		    randr,
9305b261ecSmrg	   void		    *closure);
9405b261ecSmrg
9505b261ecSmrgvoid
9605b261ecSmrgshadowRemove (ScreenPtr pScreen, PixmapPtr pPixmap);
9705b261ecSmrg
9805b261ecSmrgshadowBufPtr
9905b261ecSmrgshadowFindBuf (WindowPtr pWindow);
10005b261ecSmrg
10105b261ecSmrgBool
10205b261ecSmrgshadowInit (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window);
10305b261ecSmrg
10405b261ecSmrgvoid *
10505b261ecSmrgshadowAlloc (int width, int height, int bpp);
10605b261ecSmrg
10705b261ecSmrgvoid
10805b261ecSmrgshadowUpdatePacked (ScreenPtr	    pScreen,
10905b261ecSmrg		    shadowBufPtr    pBuf);
11005b261ecSmrg
11105b261ecSmrgvoid
11205b261ecSmrgshadowUpdatePlanar4 (ScreenPtr	    pScreen,
11305b261ecSmrg		     shadowBufPtr   pBuf);
11405b261ecSmrg
11505b261ecSmrgvoid
11605b261ecSmrgshadowUpdatePlanar4x8 (ScreenPtr    pScreen,
11705b261ecSmrg		       shadowBufPtr pBuf);
11805b261ecSmrg
11905b261ecSmrgvoid
12005b261ecSmrgshadowUpdateRotatePacked (ScreenPtr    pScreen,
12105b261ecSmrg			  shadowBufPtr pBuf);
12205b261ecSmrg
12305b261ecSmrgvoid
12405b261ecSmrgshadowUpdateRotate8_90 (ScreenPtr    pScreen,
12505b261ecSmrg			shadowBufPtr pBuf);
12605b261ecSmrg
12705b261ecSmrgvoid
12805b261ecSmrgshadowUpdateRotate16_90 (ScreenPtr    pScreen,
12905b261ecSmrg			 shadowBufPtr pBuf);
13005b261ecSmrg
13105b261ecSmrgvoid
13205b261ecSmrgshadowUpdateRotate16_90YX (ScreenPtr    pScreen,
13305b261ecSmrg			   shadowBufPtr pBuf);
13405b261ecSmrg
13505b261ecSmrgvoid
13605b261ecSmrgshadowUpdateRotate32_90 (ScreenPtr    pScreen,
13705b261ecSmrg			 shadowBufPtr pBuf);
13805b261ecSmrg
13905b261ecSmrgvoid
14005b261ecSmrgshadowUpdateRotate8_180 (ScreenPtr    pScreen,
14105b261ecSmrg			 shadowBufPtr pBuf);
14205b261ecSmrg
14305b261ecSmrgvoid
14405b261ecSmrgshadowUpdateRotate16_180 (ScreenPtr    pScreen,
14505b261ecSmrg			  shadowBufPtr pBuf);
14605b261ecSmrg
14705b261ecSmrgvoid
14805b261ecSmrgshadowUpdateRotate32_180 (ScreenPtr    pScreen,
14905b261ecSmrg			  shadowBufPtr pBuf);
15005b261ecSmrg
15105b261ecSmrgvoid
15205b261ecSmrgshadowUpdateRotate8_270 (ScreenPtr    pScreen,
15305b261ecSmrg			 shadowBufPtr pBuf);
15405b261ecSmrg
15505b261ecSmrgvoid
15605b261ecSmrgshadowUpdateRotate16_270 (ScreenPtr    pScreen,
15705b261ecSmrg			  shadowBufPtr pBuf);
15805b261ecSmrg
15905b261ecSmrgvoid
16005b261ecSmrgshadowUpdateRotate16_270YX (ScreenPtr    pScreen,
16105b261ecSmrg			    shadowBufPtr pBuf);
16205b261ecSmrg
16305b261ecSmrgvoid
16405b261ecSmrgshadowUpdateRotate32_270 (ScreenPtr    pScreen,
16505b261ecSmrg			  shadowBufPtr pBuf);
16605b261ecSmrg
16705b261ecSmrgvoid
16805b261ecSmrgshadowUpdateRotate8 (ScreenPtr    pScreen,
16905b261ecSmrg		     shadowBufPtr pBuf);
17005b261ecSmrg
17105b261ecSmrgvoid
17205b261ecSmrgshadowUpdateRotate16 (ScreenPtr    pScreen,
17305b261ecSmrg		      shadowBufPtr pBuf);
17405b261ecSmrg
17505b261ecSmrgvoid
17605b261ecSmrgshadowUpdateRotate32 (ScreenPtr    pScreen,
17705b261ecSmrg		      shadowBufPtr pBuf);
17805b261ecSmrg
17905b261ecSmrgtypedef void (* shadowUpdateProc)(ScreenPtr, shadowBufPtr);
18005b261ecSmrg
18105b261ecSmrgshadowUpdateProc shadowUpdatePackedWeak(void);
18205b261ecSmrgshadowUpdateProc shadowUpdatePlanar4Weak(void);
18305b261ecSmrgshadowUpdateProc shadowUpdatePlanar4x8Weak(void);
18405b261ecSmrgshadowUpdateProc shadowUpdateRotatePackedWeak(void);
18505b261ecSmrg
18605b261ecSmrg#endif /* _SHADOW_H_ */
187