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