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