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" 33 typedef struct _shadowBuf *shadowBufPtr; 34 35 typedef 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 41 typedef void *(*ShadowWindowProc) (ScreenPtr pScreen, 42 CARD32 row, 43 CARD32 offset, 44 int mode, CARD32 *size, void *closure); 45 46 typedef 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 ScreenBlockHandlerProcPtr BlockHandler; 58 } shadowBufRec; 59 60 /* Match defines from randr extension */ 61 #define SHADOW_ROTATE_0 1 62 #define SHADOW_ROTATE_90 2 63 #define SHADOW_ROTATE_180 4 64 #define SHADOW_ROTATE_270 8 65 #define SHADOW_ROTATE_ALL (SHADOW_ROTATE_0|SHADOW_ROTATE_90|\ 66 SHADOW_ROTATE_180|SHADOW_ROTATE_270) 67 #define SHADOW_REFLECT_X 16 68 #define SHADOW_REFLECT_Y 32 69 #define SHADOW_REFLECT_ALL (SHADOW_REFLECT_X|SHADOW_REFLECT_Y) 70 71 extern _X_EXPORT Bool 72 shadowSetup(ScreenPtr pScreen); 73 74 extern _X_EXPORT Bool 75 76 shadowAdd(ScreenPtr pScreen, 77 PixmapPtr pPixmap, 78 ShadowUpdateProc update, 79 ShadowWindowProc window, int randr, void *closure); 80 81 extern _X_EXPORT void 82 shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap); 83 84 extern _X_EXPORT void 85 shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf); 86 87 extern _X_EXPORT void 88 shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf); 89 90 extern _X_EXPORT void 91 shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf); 92 93 extern _X_EXPORT void 94 shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf); 95 96 extern _X_EXPORT void 97 shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf); 98 99 extern _X_EXPORT void 100 shadowUpdatePlanar4(ScreenPtr pScreen, shadowBufPtr pBuf); 101 102 extern _X_EXPORT void 103 shadowUpdatePlanar4x8(ScreenPtr pScreen, shadowBufPtr pBuf); 104 105 extern _X_EXPORT void 106 shadowUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf); 107 108 extern _X_EXPORT void 109 shadowUpdateRotate8_90(ScreenPtr pScreen, shadowBufPtr pBuf); 110 111 extern _X_EXPORT void 112 shadowUpdateRotate16_90(ScreenPtr pScreen, shadowBufPtr pBuf); 113 114 extern _X_EXPORT void 115 shadowUpdateRotate16_90YX(ScreenPtr pScreen, shadowBufPtr pBuf); 116 117 extern _X_EXPORT void 118 shadowUpdateRotate32_90(ScreenPtr pScreen, shadowBufPtr pBuf); 119 120 extern _X_EXPORT void 121 shadowUpdateRotate8_180(ScreenPtr pScreen, shadowBufPtr pBuf); 122 123 extern _X_EXPORT void 124 shadowUpdateRotate16_180(ScreenPtr pScreen, shadowBufPtr pBuf); 125 126 extern _X_EXPORT void 127 shadowUpdateRotate32_180(ScreenPtr pScreen, shadowBufPtr pBuf); 128 129 extern _X_EXPORT void 130 shadowUpdateRotate8_270(ScreenPtr pScreen, shadowBufPtr pBuf); 131 132 extern _X_EXPORT void 133 shadowUpdateRotate16_270(ScreenPtr pScreen, shadowBufPtr pBuf); 134 135 extern _X_EXPORT void 136 shadowUpdateRotate16_270YX(ScreenPtr pScreen, shadowBufPtr pBuf); 137 138 extern _X_EXPORT void 139 shadowUpdateRotate32_270(ScreenPtr pScreen, shadowBufPtr pBuf); 140 141 extern _X_EXPORT void 142 shadowUpdateRotate8(ScreenPtr pScreen, shadowBufPtr pBuf); 143 144 extern _X_EXPORT void 145 shadowUpdateRotate16(ScreenPtr pScreen, shadowBufPtr pBuf); 146 147 extern _X_EXPORT void 148 shadowUpdateRotate32(ScreenPtr pScreen, shadowBufPtr pBuf); 149 150 extern _X_EXPORT void 151 shadowUpdate32to24(ScreenPtr pScreen, shadowBufPtr pBuf); 152 153 typedef void (*shadowUpdateProc) (ScreenPtr, shadowBufPtr); 154 155 #endif /* _SHADOW_H_ */ 156