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