1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright © 2000 Keith Packard 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Permission to use, copy, modify, distribute, and sell this software and its 6*4882a593Smuzhiyun * documentation for any purpose is hereby granted without fee, provided that 7*4882a593Smuzhiyun * the above copyright notice appear in all copies and that both that 8*4882a593Smuzhiyun * copyright notice and this permission notice appear in supporting 9*4882a593Smuzhiyun * documentation, and that the name of Keith Packard not be used in 10*4882a593Smuzhiyun * advertising or publicity pertaining to distribution of the software without 11*4882a593Smuzhiyun * specific, written prior permission. Keith Packard makes no 12*4882a593Smuzhiyun * representations about the suitability of this software for any purpose. It 13*4882a593Smuzhiyun * is provided "as is" without express or implied warranty. 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 16*4882a593Smuzhiyun * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 17*4882a593Smuzhiyun * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 18*4882a593Smuzhiyun * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 19*4882a593Smuzhiyun * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 20*4882a593Smuzhiyun * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 21*4882a593Smuzhiyun * PERFORMANCE OF THIS SOFTWARE. 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #ifndef _SHADOW_H_ 25*4882a593Smuzhiyun #define _SHADOW_H_ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #include "scrnintstr.h" 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #include "picturestr.h" 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #include "damage.h" 32*4882a593Smuzhiyun #include "damagestr.h" 33*4882a593Smuzhiyun typedef struct _shadowBuf *shadowBufPtr; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun typedef void (*ShadowUpdateProc) (ScreenPtr pScreen, shadowBufPtr pBuf); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define SHADOW_WINDOW_RELOCATE 1 38*4882a593Smuzhiyun #define SHADOW_WINDOW_READ 2 39*4882a593Smuzhiyun #define SHADOW_WINDOW_WRITE 4 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun typedef void *(*ShadowWindowProc) (ScreenPtr pScreen, 42*4882a593Smuzhiyun CARD32 row, 43*4882a593Smuzhiyun CARD32 offset, 44*4882a593Smuzhiyun int mode, CARD32 *size, void *closure); 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun typedef struct _shadowBuf { 47*4882a593Smuzhiyun DamagePtr pDamage; 48*4882a593Smuzhiyun ShadowUpdateProc update; 49*4882a593Smuzhiyun ShadowWindowProc window; 50*4882a593Smuzhiyun PixmapPtr pPixmap; 51*4882a593Smuzhiyun void *closure; 52*4882a593Smuzhiyun int randr; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* screen wrappers */ 55*4882a593Smuzhiyun GetImageProcPtr GetImage; 56*4882a593Smuzhiyun CloseScreenProcPtr CloseScreen; 57*4882a593Smuzhiyun ScreenBlockHandlerProcPtr BlockHandler; 58*4882a593Smuzhiyun } shadowBufRec; 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* Match defines from randr extension */ 61*4882a593Smuzhiyun #define SHADOW_ROTATE_0 1 62*4882a593Smuzhiyun #define SHADOW_ROTATE_90 2 63*4882a593Smuzhiyun #define SHADOW_ROTATE_180 4 64*4882a593Smuzhiyun #define SHADOW_ROTATE_270 8 65*4882a593Smuzhiyun #define SHADOW_ROTATE_ALL (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\ 66*4882a593Smuzhiyun SHADOW_ROTATE_180|SHADOW_ROTATE_270) 67*4882a593Smuzhiyun #define SHADOW_REFLECT_X 16 68*4882a593Smuzhiyun #define SHADOW_REFLECT_Y 32 69*4882a593Smuzhiyun #define SHADOW_REFLECT_ALL (SHADOW_REFLECT_X|SHADOW_REFLECT_Y) 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun extern _X_EXPORT Bool 72*4882a593Smuzhiyun shadowSetup(ScreenPtr pScreen); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun extern _X_EXPORT Bool 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun shadowAdd(ScreenPtr pScreen, 77*4882a593Smuzhiyun PixmapPtr pPixmap, 78*4882a593Smuzhiyun ShadowUpdateProc update, 79*4882a593Smuzhiyun ShadowWindowProc window, int randr, void *closure); 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun extern _X_EXPORT void 82*4882a593Smuzhiyun shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap); 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun extern _X_EXPORT void 85*4882a593Smuzhiyun shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf); 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun extern _X_EXPORT void 88*4882a593Smuzhiyun shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf); 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun extern _X_EXPORT void 91*4882a593Smuzhiyun shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf); 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun extern _X_EXPORT void 94*4882a593Smuzhiyun shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf); 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun extern _X_EXPORT void 97*4882a593Smuzhiyun shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf); 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun extern _X_EXPORT void 100*4882a593Smuzhiyun shadowUpdatePlanar4(ScreenPtr pScreen, shadowBufPtr pBuf); 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun extern _X_EXPORT void 103*4882a593Smuzhiyun shadowUpdatePlanar4x8(ScreenPtr pScreen, shadowBufPtr pBuf); 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun extern _X_EXPORT void 106*4882a593Smuzhiyun shadowUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf); 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun extern _X_EXPORT void 109*4882a593Smuzhiyun shadowUpdateRotate8_90(ScreenPtr pScreen, shadowBufPtr pBuf); 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun extern _X_EXPORT void 112*4882a593Smuzhiyun shadowUpdateRotate16_90(ScreenPtr pScreen, shadowBufPtr pBuf); 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun extern _X_EXPORT void 115*4882a593Smuzhiyun shadowUpdateRotate16_90YX(ScreenPtr pScreen, shadowBufPtr pBuf); 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun extern _X_EXPORT void 118*4882a593Smuzhiyun shadowUpdateRotate32_90(ScreenPtr pScreen, shadowBufPtr pBuf); 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun extern _X_EXPORT void 121*4882a593Smuzhiyun shadowUpdateRotate8_180(ScreenPtr pScreen, shadowBufPtr pBuf); 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun extern _X_EXPORT void 124*4882a593Smuzhiyun shadowUpdateRotate16_180(ScreenPtr pScreen, shadowBufPtr pBuf); 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun extern _X_EXPORT void 127*4882a593Smuzhiyun shadowUpdateRotate32_180(ScreenPtr pScreen, shadowBufPtr pBuf); 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun extern _X_EXPORT void 130*4882a593Smuzhiyun shadowUpdateRotate8_270(ScreenPtr pScreen, shadowBufPtr pBuf); 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun extern _X_EXPORT void 133*4882a593Smuzhiyun shadowUpdateRotate16_270(ScreenPtr pScreen, shadowBufPtr pBuf); 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun extern _X_EXPORT void 136*4882a593Smuzhiyun shadowUpdateRotate16_270YX(ScreenPtr pScreen, shadowBufPtr pBuf); 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun extern _X_EXPORT void 139*4882a593Smuzhiyun shadowUpdateRotate32_270(ScreenPtr pScreen, shadowBufPtr pBuf); 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun extern _X_EXPORT void 142*4882a593Smuzhiyun shadowUpdateRotate8(ScreenPtr pScreen, shadowBufPtr pBuf); 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun extern _X_EXPORT void 145*4882a593Smuzhiyun shadowUpdateRotate16(ScreenPtr pScreen, shadowBufPtr pBuf); 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun extern _X_EXPORT void 148*4882a593Smuzhiyun shadowUpdateRotate32(ScreenPtr pScreen, shadowBufPtr pBuf); 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun extern _X_EXPORT void 151*4882a593Smuzhiyun shadowUpdate32to24(ScreenPtr pScreen, shadowBufPtr pBuf); 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun typedef void (*shadowUpdateProc) (ScreenPtr, shadowBufPtr); 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun #endif /* _SHADOW_H_ */ 156