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#include "picturestr.h" 30 31#include "damage.h" 32#include "damagestr.h" 33typedef struct _shadowBuf *shadowBufPtr; 34 35typedef void (*ShadowUpdateProc) (ScreenPtr pScreen, 36 shadowBufPtr pBuf); 37 38#define SHADOW_WINDOW_RELOCATE 1 39#define SHADOW_WINDOW_READ 2 40#define SHADOW_WINDOW_WRITE 4 41 42typedef void *(*ShadowWindowProc) (ScreenPtr pScreen, 43 CARD32 row, 44 CARD32 offset, 45 int mode, 46 CARD32 *size, 47 void *closure); 48 49/* BC hack: do not move the damage member. see shadow.c for explanation. */ 50typedef struct _shadowBuf { 51 DamagePtr pDamage; 52 ShadowUpdateProc update; 53 ShadowWindowProc window; 54 RegionRec damage; 55 PixmapPtr pPixmap; 56 void *closure; 57 int randr; 58 59 /* screen wrappers */ 60 GetImageProcPtr GetImage; 61 CloseScreenProcPtr CloseScreen; 62} shadowBufRec; 63 64/* Match defines from randr extension */ 65#define SHADOW_ROTATE_0 1 66#define SHADOW_ROTATE_90 2 67#define SHADOW_ROTATE_180 4 68#define SHADOW_ROTATE_270 8 69#define SHADOW_ROTATE_ALL (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\ 70 SHADOW_ROTATE_180|SHADOW_ROTATE_270) 71#define SHADOW_REFLECT_X 16 72#define SHADOW_REFLECT_Y 32 73#define SHADOW_REFLECT_ALL (SHADOW_REFLECT_X|SHADOW_REFLECT_Y) 74 75extern _X_EXPORT DevPrivateKey shadowScrPrivateKey; 76 77#define shadowGetBuf(pScr) ((shadowBufPtr) \ 78 dixLookupPrivate(&(pScr)->devPrivates, shadowScrPrivateKey)) 79#define shadowBuf(pScr) shadowBufPtr pBuf = shadowGetBuf(pScr) 80#define shadowDamage(pBuf) DamageRegion(pBuf->pDamage) 81 82extern _X_EXPORT Bool 83shadowSetup (ScreenPtr pScreen); 84 85extern _X_EXPORT Bool 86shadowAdd (ScreenPtr pScreen, 87 PixmapPtr pPixmap, 88 ShadowUpdateProc update, 89 ShadowWindowProc window, 90 int randr, 91 void *closure); 92 93extern _X_EXPORT void 94shadowRemove (ScreenPtr pScreen, PixmapPtr pPixmap); 95 96extern _X_EXPORT Bool 97shadowInit (ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window); 98 99extern _X_EXPORT void * 100shadowAlloc (int width, int height, int bpp); 101 102extern _X_EXPORT void 103shadowUpdatePacked (ScreenPtr pScreen, 104 shadowBufPtr pBuf); 105 106extern _X_EXPORT void 107shadowUpdatePlanar4 (ScreenPtr pScreen, 108 shadowBufPtr pBuf); 109 110extern _X_EXPORT void 111shadowUpdatePlanar4x8 (ScreenPtr pScreen, 112 shadowBufPtr pBuf); 113 114extern _X_EXPORT void 115shadowUpdateRotatePacked (ScreenPtr pScreen, 116 shadowBufPtr pBuf); 117 118extern _X_EXPORT void 119shadowUpdateRotate8_90 (ScreenPtr pScreen, 120 shadowBufPtr pBuf); 121 122extern _X_EXPORT void 123shadowUpdateRotate16_90 (ScreenPtr pScreen, 124 shadowBufPtr pBuf); 125 126extern _X_EXPORT void 127shadowUpdateRotate16_90YX (ScreenPtr pScreen, 128 shadowBufPtr pBuf); 129 130extern _X_EXPORT void 131shadowUpdateRotate32_90 (ScreenPtr pScreen, 132 shadowBufPtr pBuf); 133 134extern _X_EXPORT void 135shadowUpdateRotate8_180 (ScreenPtr pScreen, 136 shadowBufPtr pBuf); 137 138extern _X_EXPORT void 139shadowUpdateRotate16_180 (ScreenPtr pScreen, 140 shadowBufPtr pBuf); 141 142extern _X_EXPORT void 143shadowUpdateRotate32_180 (ScreenPtr pScreen, 144 shadowBufPtr pBuf); 145 146extern _X_EXPORT void 147shadowUpdateRotate8_270 (ScreenPtr pScreen, 148 shadowBufPtr pBuf); 149 150extern _X_EXPORT void 151shadowUpdateRotate16_270 (ScreenPtr pScreen, 152 shadowBufPtr pBuf); 153 154extern _X_EXPORT void 155shadowUpdateRotate16_270YX (ScreenPtr pScreen, 156 shadowBufPtr pBuf); 157 158extern _X_EXPORT void 159shadowUpdateRotate32_270 (ScreenPtr pScreen, 160 shadowBufPtr pBuf); 161 162extern _X_EXPORT void 163shadowUpdateRotate8 (ScreenPtr pScreen, 164 shadowBufPtr pBuf); 165 166extern _X_EXPORT void 167shadowUpdateRotate16 (ScreenPtr pScreen, 168 shadowBufPtr pBuf); 169 170extern _X_EXPORT void 171shadowUpdateRotate32 (ScreenPtr pScreen, 172 shadowBufPtr pBuf); 173 174typedef void (* shadowUpdateProc)(ScreenPtr, shadowBufPtr); 175 176extern _X_EXPORT shadowUpdateProc shadowUpdatePackedWeak(void); 177extern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4Weak(void); 178extern _X_EXPORT shadowUpdateProc shadowUpdatePlanar4x8Weak(void); 179extern _X_EXPORT shadowUpdateProc shadowUpdateRotatePackedWeak(void); 180 181#endif /* _SHADOW_H_ */ 182