Add patch that contain Mali fixes.
[deb_xorg-server.git] / composite / compint.h
1 /*
2 * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 *
23 * Copyright © 2003 Keith Packard
24 *
25 * Permission to use, copy, modify, distribute, and sell this software and its
26 * documentation for any purpose is hereby granted without fee, provided that
27 * the above copyright notice appear in all copies and that both that
28 * copyright notice and this permission notice appear in supporting
29 * documentation, and that the name of Keith Packard not be used in
30 * advertising or publicity pertaining to distribution of the software without
31 * specific, written prior permission. Keith Packard makes no
32 * representations about the suitability of this software for any purpose. It
33 * is provided "as is" without express or implied warranty.
34 *
35 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
36 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
37 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
38 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
39 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
40 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
41 * PERFORMANCE OF THIS SOFTWARE.
42 */
43
44 #ifdef HAVE_DIX_CONFIG_H
45 #include <dix-config.h>
46 #endif
47
48 #ifndef _COMPINT_H_
49 #define _COMPINT_H_
50
51 #include "misc.h"
52 #include "scrnintstr.h"
53 #include "os.h"
54 #include "regionstr.h"
55 #include "validate.h"
56 #include "windowstr.h"
57 #include "input.h"
58 #include "resource.h"
59 #include "colormapst.h"
60 #include "cursorstr.h"
61 #include "dixstruct.h"
62 #include "gcstruct.h"
63 #include "servermd.h"
64 #include "dixevents.h"
65 #include "globals.h"
66 #include "picturestr.h"
67 #include "extnsionst.h"
68 #include "privates.h"
69 #include "mi.h"
70 #include "damage.h"
71 #include "damageextint.h"
72 #include "xfixes.h"
73 #include <X11/extensions/compositeproto.h>
74 #include "compositeext.h"
75 #include <assert.h>
76
77 /*
78 * enable this for debugging
79
80 #define COMPOSITE_DEBUG
81 */
82
83 typedef struct _CompClientWindow {
84 struct _CompClientWindow *next;
85 XID id;
86 int update;
87 } CompClientWindowRec, *CompClientWindowPtr;
88
89 typedef struct _CompWindow {
90 RegionRec borderClip;
91 DamagePtr damage; /* for automatic update mode */
92 Bool damageRegistered;
93 Bool damaged;
94 int update;
95 CompClientWindowPtr clients;
96 int oldx;
97 int oldy;
98 PixmapPtr pOldPixmap;
99 int borderClipX, borderClipY;
100 } CompWindowRec, *CompWindowPtr;
101
102 #define COMP_ORIGIN_INVALID 0x80000000
103
104 typedef struct _CompSubwindows {
105 int update;
106 CompClientWindowPtr clients;
107 } CompSubwindowsRec, *CompSubwindowsPtr;
108
109 #ifndef COMP_INCLUDE_RGB24_VISUAL
110 #define COMP_INCLUDE_RGB24_VISUAL 0
111 #endif
112
113 typedef struct _CompOverlayClientRec *CompOverlayClientPtr;
114
115 typedef struct _CompOverlayClientRec {
116 CompOverlayClientPtr pNext;
117 ClientPtr pClient;
118 ScreenPtr pScreen;
119 XID resource;
120 } CompOverlayClientRec;
121
122 typedef struct _CompScreen {
123 PositionWindowProcPtr PositionWindow;
124 CopyWindowProcPtr CopyWindow;
125 CreateWindowProcPtr CreateWindow;
126 DestroyWindowProcPtr DestroyWindow;
127 RealizeWindowProcPtr RealizeWindow;
128 UnrealizeWindowProcPtr UnrealizeWindow;
129 ClipNotifyProcPtr ClipNotify;
130 /*
131 * Called from ConfigureWindow, these
132 * three track changes to the offscreen storage
133 * geometry
134 */
135 ConfigNotifyProcPtr ConfigNotify;
136 MoveWindowProcPtr MoveWindow;
137 ResizeWindowProcPtr ResizeWindow;
138 ChangeBorderWidthProcPtr ChangeBorderWidth;
139 /*
140 * Reparenting has an effect on Subwindows redirect
141 */
142 ReparentWindowProcPtr ReparentWindow;
143
144 /*
145 * Colormaps for new visuals better not get installed
146 */
147 InstallColormapProcPtr InstallColormap;
148
149 /*
150 * Fake backing store via automatic redirection
151 */
152 ChangeWindowAttributesProcPtr ChangeWindowAttributes;
153
154 ScreenBlockHandlerProcPtr BlockHandler;
155 CloseScreenProcPtr CloseScreen;
156 int numAlternateVisuals;
157 VisualID *alternateVisuals;
158
159 WindowPtr pOverlayWin;
160 Window overlayWid;
161 CompOverlayClientPtr pOverlayClients;
162
163 GetImageProcPtr GetImage;
164 SourceValidateProcPtr SourceValidate;
165 } CompScreenRec, *CompScreenPtr;
166
167 extern DevPrivateKeyRec CompScreenPrivateKeyRec;
168
169 #define CompScreenPrivateKey (&CompScreenPrivateKeyRec)
170
171 extern DevPrivateKeyRec CompWindowPrivateKeyRec;
172
173 #define CompWindowPrivateKey (&CompWindowPrivateKeyRec)
174
175 extern DevPrivateKeyRec CompSubwindowsPrivateKeyRec;
176
177 #define CompSubwindowsPrivateKey (&CompSubwindowsPrivateKeyRec)
178
179 #define GetCompScreen(s) ((CompScreenPtr) \
180 dixLookupPrivate(&(s)->devPrivates, CompScreenPrivateKey))
181 #define GetCompWindow(w) ((CompWindowPtr) \
182 dixLookupPrivate(&(w)->devPrivates, CompWindowPrivateKey))
183 #define GetCompSubwindows(w) ((CompSubwindowsPtr) \
184 dixLookupPrivate(&(w)->devPrivates, CompSubwindowsPrivateKey))
185
186 extern RESTYPE CompositeClientSubwindowsType;
187 extern RESTYPE CompositeClientOverlayType;
188
189 /*
190 * compalloc.c
191 */
192
193 Bool
194 compRedirectWindow(ClientPtr pClient, WindowPtr pWin, int update);
195
196 void
197 compFreeClientWindow(WindowPtr pWin, XID id);
198
199 int
200 compUnredirectWindow(ClientPtr pClient, WindowPtr pWin, int update);
201
202 int
203 compRedirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update);
204
205 void
206 compFreeClientSubwindows(WindowPtr pWin, XID id);
207
208 int
209 compUnredirectSubwindows(ClientPtr pClient, WindowPtr pWin, int update);
210
211 int
212 compRedirectOneSubwindow(WindowPtr pParent, WindowPtr pWin);
213
214 int
215 compUnredirectOneSubwindow(WindowPtr pParent, WindowPtr pWin);
216
217 Bool
218 compAllocPixmap(WindowPtr pWin);
219
220 void
221 compSetParentPixmap(WindowPtr pWin);
222
223 void
224 compRestoreWindow(WindowPtr pWin, PixmapPtr pPixmap);
225
226 Bool
227
228 compReallocPixmap(WindowPtr pWin, int x, int y,
229 unsigned int w, unsigned int h, int bw);
230
231 /*
232 * compinit.c
233 */
234
235 Bool
236 compScreenInit(ScreenPtr pScreen);
237
238 /*
239 * compoverlay.c
240 */
241
242 void
243 compFreeOverlayClient(CompOverlayClientPtr pOcToDel);
244
245 CompOverlayClientPtr
246 compFindOverlayClient(ScreenPtr pScreen, ClientPtr pClient);
247
248 CompOverlayClientPtr
249 compCreateOverlayClient(ScreenPtr pScreen, ClientPtr pClient);
250
251 Bool
252 compCreateOverlayWindow(ScreenPtr pScreen);
253
254 void
255 compDestroyOverlayWindow(ScreenPtr pScreen);
256
257 /*
258 * compwindow.c
259 */
260
261 #ifdef COMPOSITE_DEBUG
262 void
263 compCheckTree(ScreenPtr pScreen);
264 #else
265 #define compCheckTree(s)
266 #endif
267
268 void
269 compSetPixmap(WindowPtr pWin, PixmapPtr pPixmap);
270
271 Bool
272 compCheckRedirect(WindowPtr pWin);
273
274 Bool
275 compPositionWindow(WindowPtr pWin, int x, int y);
276
277 Bool
278 compRealizeWindow(WindowPtr pWin);
279
280 Bool
281 compUnrealizeWindow(WindowPtr pWin);
282
283 void
284 compClipNotify(WindowPtr pWin, int dx, int dy);
285
286 void
287 compMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind);
288
289 void
290
291 compResizeWindow(WindowPtr pWin, int x, int y,
292 unsigned int w, unsigned int h, WindowPtr pSib);
293
294 void
295 compChangeBorderWidth(WindowPtr pWin, unsigned int border_width);
296
297 void
298 compReparentWindow(WindowPtr pWin, WindowPtr pPriorParent);
299
300 Bool
301 compCreateWindow(WindowPtr pWin);
302
303 Bool
304 compDestroyWindow(WindowPtr pWin);
305
306 void
307 compSetRedirectBorderClip(WindowPtr pWin, RegionPtr pRegion);
308
309 RegionPtr
310 compGetRedirectBorderClip(WindowPtr pWin);
311
312 void
313 compCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
314
315 void
316 compPaintChildrenToWindow(WindowPtr pWin);
317
318 WindowPtr
319 CompositeRealChildHead(WindowPtr pWin);
320
321 int
322 DeleteWindowNoInputDevices(pointer value, XID wid);
323
324 int
325
326 compConfigNotify(WindowPtr pWin, int x, int y, int w, int h,
327 int bw, WindowPtr pSib);
328
329 void PanoramiXCompositeInit(void);
330 void PanoramiXCompositeReset(void);
331
332 #endif /* _COMPINT_H_ */