shadow.h revision 01260a01
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    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
71extern _X_EXPORT Bool
72 shadowSetup(ScreenPtr pScreen);
73
74extern _X_EXPORT Bool
75
76shadowAdd(ScreenPtr pScreen,
77          PixmapPtr pPixmap,
78          ShadowUpdateProc update,
79          ShadowWindowProc window, int randr, void *closure);
80
81extern _X_EXPORT void
82 shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap);
83
84extern _X_EXPORT void
85 shadowUpdateAfb4(ScreenPtr pScreen, shadowBufPtr pBuf);
86
87extern _X_EXPORT void
88 shadowUpdateAfb8(ScreenPtr pScreen, shadowBufPtr pBuf);
89
90extern _X_EXPORT void
91 shadowUpdateAfb4x8(ScreenPtr pScreen, shadowBufPtr pBuf);
92
93extern _X_EXPORT void
94 shadowUpdateIplan2p4(ScreenPtr pScreen, shadowBufPtr pBuf);
95
96extern _X_EXPORT void
97 shadowUpdateIplan2p8(ScreenPtr pScreen, shadowBufPtr pBuf);
98
99extern _X_EXPORT void
100 shadowUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
101
102extern _X_EXPORT void
103 shadowUpdatePlanar4(ScreenPtr pScreen, shadowBufPtr pBuf);
104
105extern _X_EXPORT void
106 shadowUpdatePlanar4x8(ScreenPtr pScreen, shadowBufPtr pBuf);
107
108extern _X_EXPORT void
109 shadowUpdateRotatePacked(ScreenPtr pScreen, shadowBufPtr pBuf);
110
111extern _X_EXPORT void
112 shadowUpdateRotate8_90(ScreenPtr pScreen, shadowBufPtr pBuf);
113
114extern _X_EXPORT void
115 shadowUpdateRotate16_90(ScreenPtr pScreen, shadowBufPtr pBuf);
116
117extern _X_EXPORT void
118 shadowUpdateRotate16_90YX(ScreenPtr pScreen, shadowBufPtr pBuf);
119
120extern _X_EXPORT void
121 shadowUpdateRotate32_90(ScreenPtr pScreen, shadowBufPtr pBuf);
122
123extern _X_EXPORT void
124 shadowUpdateRotate8_180(ScreenPtr pScreen, shadowBufPtr pBuf);
125
126extern _X_EXPORT void
127 shadowUpdateRotate16_180(ScreenPtr pScreen, shadowBufPtr pBuf);
128
129extern _X_EXPORT void
130 shadowUpdateRotate32_180(ScreenPtr pScreen, shadowBufPtr pBuf);
131
132extern _X_EXPORT void
133 shadowUpdateRotate8_270(ScreenPtr pScreen, shadowBufPtr pBuf);
134
135extern _X_EXPORT void
136 shadowUpdateRotate16_270(ScreenPtr pScreen, shadowBufPtr pBuf);
137
138extern _X_EXPORT void
139 shadowUpdateRotate16_270YX(ScreenPtr pScreen, shadowBufPtr pBuf);
140
141extern _X_EXPORT void
142 shadowUpdateRotate32_270(ScreenPtr pScreen, shadowBufPtr pBuf);
143
144extern _X_EXPORT void
145 shadowUpdateRotate8(ScreenPtr pScreen, shadowBufPtr pBuf);
146
147extern _X_EXPORT void
148 shadowUpdateRotate16(ScreenPtr pScreen, shadowBufPtr pBuf);
149
150extern _X_EXPORT void
151 shadowUpdateRotate32(ScreenPtr pScreen, shadowBufPtr pBuf);
152
153extern _X_EXPORT void
154 shadowUpdate32to24(ScreenPtr pScreen, shadowBufPtr pBuf);
155
156typedef void (*shadowUpdateProc) (ScreenPtr, shadowBufPtr);
157
158#endif                          /* _SHADOW_H_ */
159