Imported Upstream version 1.15.1
[deb_xorg-server.git] / include / scrnintstr.h
CommitLineData
a09e091a
JB
1/***********************************************************
2
3Copyright 1987, 1998 The Open Group
4
5Permission to use, copy, modify, distribute, and sell this software and its
6documentation for any purpose is hereby granted without fee, provided that
7the above copyright notice appear in all copies and that both that
8copyright notice and this permission notice appear in supporting
9documentation.
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21Except as contained in this notice, the name of The Open Group shall not be
22used in advertising or otherwise to promote the sale, use or other dealings
23in this Software without prior written authorization from The Open Group.
24
25Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
26
27 All Rights Reserved
28
29Permission to use, copy, modify, and distribute this software and its
30documentation for any purpose and without fee is hereby granted,
31provided that the above copyright notice appear in all copies and that
32both that copyright notice and this permission notice appear in
33supporting documentation, and that the name of Digital not be
34used in advertising or publicity pertaining to distribution of the
35software without specific, written prior permission.
36
37DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
43SOFTWARE.
44
45******************************************************************/
46
47#ifndef SCREENINTSTRUCT_H
48#define SCREENINTSTRUCT_H
49
50#include "screenint.h"
51#include "regionstr.h"
52#include "colormap.h"
53#include "cursor.h"
54#include "validate.h"
55#include <X11/Xproto.h>
56#include "dix.h"
57#include "privates.h"
58
59typedef struct _PixmapFormat {
60 unsigned char depth;
61 unsigned char bitsPerPixel;
62 unsigned char scanlinePad;
63} PixmapFormatRec;
64
65typedef struct _Visual {
66 VisualID vid;
67 short class;
68 short bitsPerRGBValue;
69 short ColormapEntries;
70 short nplanes; /* = log2 (ColormapEntries). This does not
71 * imply that the screen has this many planes.
72 * it may have more or fewer */
73 unsigned long redMask, greenMask, blueMask;
74 int offsetRed, offsetGreen, offsetBlue;
75} VisualRec;
76
77typedef struct _Depth {
78 unsigned char depth;
79 short numVids;
80 VisualID *vids; /* block of visual ids for this depth */
81} DepthRec;
82
83typedef struct _ScreenSaverStuff {
84 WindowPtr pWindow;
85 XID wid;
86 char blanked;
87 Bool (*ExternalScreenSaver) (ScreenPtr /*pScreen */ ,
88 int /*xstate */ ,
89 Bool /*force */ );
90} ScreenSaverStuffRec;
91
92/*
93 * There is a typedef for each screen function pointer so that code that
94 * needs to declare a screen function pointer (e.g. in a screen private
95 * or as a local variable) can easily do so and retain full type checking.
96 */
97
98typedef Bool (*CloseScreenProcPtr) (ScreenPtr /*pScreen */ );
99
100typedef void (*QueryBestSizeProcPtr) (int /*class */ ,
101 unsigned short * /*pwidth */ ,
102 unsigned short * /*pheight */ ,
103 ScreenPtr /*pScreen */ );
104
105typedef Bool (*SaveScreenProcPtr) (ScreenPtr /*pScreen */ ,
106 int /*on */ );
107
108typedef void (*GetImageProcPtr) (DrawablePtr /*pDrawable */ ,
109 int /*sx */ ,
110 int /*sy */ ,
111 int /*w */ ,
112 int /*h */ ,
113 unsigned int /*format */ ,
114 unsigned long /*planeMask */ ,
115 char * /*pdstLine */ );
116
117typedef void (*GetSpansProcPtr) (DrawablePtr /*pDrawable */ ,
118 int /*wMax */ ,
119 DDXPointPtr /*ppt */ ,
120 int * /*pwidth */ ,
121 int /*nspans */ ,
122 char * /*pdstStart */ );
123
124typedef void (*SourceValidateProcPtr) (DrawablePtr /*pDrawable */ ,
125 int /*x */ ,
126 int /*y */ ,
127 int /*width */ ,
128 int /*height */ ,
129 unsigned int /*subWindowMode */ );
130
131typedef Bool (*CreateWindowProcPtr) (WindowPtr /*pWindow */ );
132
133typedef Bool (*DestroyWindowProcPtr) (WindowPtr /*pWindow */ );
134
135typedef Bool (*PositionWindowProcPtr) (WindowPtr /*pWindow */ ,
136 int /*x */ ,
137 int /*y */ );
138
139typedef Bool (*ChangeWindowAttributesProcPtr) (WindowPtr /*pWindow */ ,
140 unsigned long /*mask */ );
141
142typedef Bool (*RealizeWindowProcPtr) (WindowPtr /*pWindow */ );
143
144typedef Bool (*UnrealizeWindowProcPtr) (WindowPtr /*pWindow */ );
145
146typedef void (*RestackWindowProcPtr) (WindowPtr /*pWindow */ ,
147 WindowPtr /*pOldNextSib */ );
148
149typedef int (*ValidateTreeProcPtr) (WindowPtr /*pParent */ ,
150 WindowPtr /*pChild */ ,
151 VTKind /*kind */ );
152
153typedef void (*PostValidateTreeProcPtr) (WindowPtr /*pParent */ ,
154 WindowPtr /*pChild */ ,
155 VTKind /*kind */ );
156
157typedef void (*WindowExposuresProcPtr) (WindowPtr /*pWindow */ ,
158 RegionPtr /*prgn */ ,
159 RegionPtr /*other_exposed */ );
160
161typedef void (*CopyWindowProcPtr) (WindowPtr /*pWindow */ ,
162 DDXPointRec /*ptOldOrg */ ,
163 RegionPtr /*prgnSrc */ );
164
165typedef void (*ClearToBackgroundProcPtr) (WindowPtr /*pWindow */ ,
166 int /*x */ ,
167 int /*y */ ,
168 int /*w */ ,
169 int /*h */ ,
170 Bool /*generateExposures */ );
171
172typedef void (*ClipNotifyProcPtr) (WindowPtr /*pWindow */ ,
173 int /*dx */ ,
174 int /*dy */ );
175
176/* pixmap will exist only for the duration of the current rendering operation */
177#define CREATE_PIXMAP_USAGE_SCRATCH 1
178/* pixmap will be the backing pixmap for a redirected window */
179#define CREATE_PIXMAP_USAGE_BACKING_PIXMAP 2
180/* pixmap will contain a glyph */
181#define CREATE_PIXMAP_USAGE_GLYPH_PICTURE 3
182/* pixmap will be shared */
183#define CREATE_PIXMAP_USAGE_SHARED 4
184
185typedef PixmapPtr (*CreatePixmapProcPtr) (ScreenPtr /*pScreen */ ,
186 int /*width */ ,
187 int /*height */ ,
188 int /*depth */ ,
189 unsigned /*usage_hint */ );
190
191typedef Bool (*DestroyPixmapProcPtr) (PixmapPtr /*pPixmap */ );
192
193typedef Bool (*RealizeFontProcPtr) (ScreenPtr /*pScreen */ ,
194 FontPtr /*pFont */ );
195
196typedef Bool (*UnrealizeFontProcPtr) (ScreenPtr /*pScreen */ ,
197 FontPtr /*pFont */ );
198
199typedef void (*ConstrainCursorProcPtr) (DeviceIntPtr /*pDev */ ,
200 ScreenPtr /*pScreen */ ,
201 BoxPtr /*pBox */ );
202
203typedef void (*CursorLimitsProcPtr) (DeviceIntPtr /* pDev */ ,
204 ScreenPtr /*pScreen */ ,
205 CursorPtr /*pCursor */ ,
206 BoxPtr /*pHotBox */ ,
207 BoxPtr /*pTopLeftBox */ );
208
209typedef Bool (*DisplayCursorProcPtr) (DeviceIntPtr /* pDev */ ,
210 ScreenPtr /*pScreen */ ,
211 CursorPtr /*pCursor */ );
212
213typedef Bool (*RealizeCursorProcPtr) (DeviceIntPtr /* pDev */ ,
214 ScreenPtr /*pScreen */ ,
215 CursorPtr /*pCursor */ );
216
217typedef Bool (*UnrealizeCursorProcPtr) (DeviceIntPtr /* pDev */ ,
218 ScreenPtr /*pScreen */ ,
219 CursorPtr /*pCursor */ );
220
221typedef void (*RecolorCursorProcPtr) (DeviceIntPtr /* pDev */ ,
222 ScreenPtr /*pScreen */ ,
223 CursorPtr /*pCursor */ ,
224 Bool /*displayed */ );
225
226typedef Bool (*SetCursorPositionProcPtr) (DeviceIntPtr /* pDev */ ,
227 ScreenPtr /*pScreen */ ,
228 int /*x */ ,
229 int /*y */ ,
230 Bool /*generateEvent */ );
231
232typedef Bool (*CreateGCProcPtr) (GCPtr /*pGC */ );
233
234typedef Bool (*CreateColormapProcPtr) (ColormapPtr /*pColormap */ );
235
236typedef void (*DestroyColormapProcPtr) (ColormapPtr /*pColormap */ );
237
238typedef void (*InstallColormapProcPtr) (ColormapPtr /*pColormap */ );
239
240typedef void (*UninstallColormapProcPtr) (ColormapPtr /*pColormap */ );
241
242typedef int (*ListInstalledColormapsProcPtr) (ScreenPtr /*pScreen */ ,
243 XID * /*pmaps */ );
244
245typedef void (*StoreColorsProcPtr) (ColormapPtr /*pColormap */ ,
246 int /*ndef */ ,
247 xColorItem * /*pdef */ );
248
249typedef void (*ResolveColorProcPtr) (unsigned short * /*pred */ ,
250 unsigned short * /*pgreen */ ,
251 unsigned short * /*pblue */ ,
252 VisualPtr /*pVisual */ );
253
254typedef RegionPtr (*BitmapToRegionProcPtr) (PixmapPtr /*pPix */ );
255
256typedef void (*SendGraphicsExposeProcPtr) (ClientPtr /*client */ ,
257 RegionPtr /*pRgn */ ,
258 XID /*drawable */ ,
259 int /*major */ ,
260 int /*minor */ );
261
262typedef void (*ScreenBlockHandlerProcPtr) (ScreenPtr /*pScreen*/ ,
263 pointer /*pTimeout */ ,
264 pointer /*pReadmask */ );
265
266typedef void (*ScreenWakeupHandlerProcPtr) (ScreenPtr /*pScreen*/ ,
267 unsigned long /*result */ ,
268 pointer /*pReadMask */ );
269
270typedef Bool (*CreateScreenResourcesProcPtr) (ScreenPtr /*pScreen */ );
271
272typedef Bool (*ModifyPixmapHeaderProcPtr) (PixmapPtr /*pPixmap */ ,
273 int /*width */ ,
274 int /*height */ ,
275 int /*depth */ ,
276 int /*bitsPerPixel */ ,
277 int /*devKind */ ,
278 pointer /*pPixData */ );
279
280typedef PixmapPtr (*GetWindowPixmapProcPtr) (WindowPtr /*pWin */ );
281
282typedef void (*SetWindowPixmapProcPtr) (WindowPtr /*pWin */ ,
283 PixmapPtr /*pPix */ );
284
285typedef PixmapPtr (*GetScreenPixmapProcPtr) (ScreenPtr /*pScreen */ );
286
287typedef void (*SetScreenPixmapProcPtr) (PixmapPtr /*pPix */ );
288
289typedef void (*MarkWindowProcPtr) (WindowPtr /*pWin */ );
290
291typedef Bool (*MarkOverlappedWindowsProcPtr) (WindowPtr /*parent */ ,
292 WindowPtr /*firstChild */ ,
293 WindowPtr * /*pLayerWin */ );
294
295typedef int (*ConfigNotifyProcPtr) (WindowPtr /*pWin */ ,
296 int /*x */ ,
297 int /*y */ ,
298 int /*w */ ,
299 int /*h */ ,
300 int /*bw */ ,
301 WindowPtr /*pSib */ );
302
303typedef void (*MoveWindowProcPtr) (WindowPtr /*pWin */ ,
304 int /*x */ ,
305 int /*y */ ,
306 WindowPtr /*pSib */ ,
307 VTKind /*kind */ );
308
309typedef void (*ResizeWindowProcPtr) (WindowPtr /*pWin */ ,
310 int /*x */ ,
311 int /*y */ ,
312 unsigned int /*w */ ,
313 unsigned int /*h */ ,
314 WindowPtr /*pSib */
315 );
316
317typedef WindowPtr (*GetLayerWindowProcPtr) (WindowPtr /*pWin */
318 );
319
320typedef void (*HandleExposuresProcPtr) (WindowPtr /*pWin */ );
321
322typedef void (*ReparentWindowProcPtr) (WindowPtr /*pWin */ ,
323 WindowPtr /*pPriorParent */ );
324
325typedef void (*SetShapeProcPtr) (WindowPtr /*pWin */ ,
326 int /* kind */ );
327
328typedef void (*ChangeBorderWidthProcPtr) (WindowPtr /*pWin */ ,
329 unsigned int /*width */ );
330
331typedef void (*MarkUnrealizedWindowProcPtr) (WindowPtr /*pChild */ ,
332 WindowPtr /*pWin */ ,
333 Bool /*fromConfigure */ );
334
335typedef Bool (*DeviceCursorInitializeProcPtr) (DeviceIntPtr /* pDev */ ,
336 ScreenPtr /* pScreen */ );
337
338typedef void (*DeviceCursorCleanupProcPtr) (DeviceIntPtr /* pDev */ ,
339 ScreenPtr /* pScreen */ );
340
341typedef void (*ConstrainCursorHarderProcPtr) (DeviceIntPtr, ScreenPtr, int,
342 int *, int *);
343
344
345typedef Bool (*SharePixmapBackingProcPtr)(PixmapPtr, ScreenPtr, void **);
346
347typedef Bool (*SetSharedPixmapBackingProcPtr)(PixmapPtr, void *);
348
349typedef Bool (*StartPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr,
350 int x, int y);
351
352typedef Bool (*StopPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr);
353
354typedef Bool (*ReplaceScanoutPixmapProcPtr)(DrawablePtr, PixmapPtr, Bool);
355
356typedef struct _Screen {
357 int myNum; /* index of this instance in Screens[] */
358 ATOM id;
359 short x, y, width, height;
360 short mmWidth, mmHeight;
361 short numDepths;
362 unsigned char rootDepth;
363 DepthPtr allowedDepths;
364 unsigned long rootVisual;
365 unsigned long defColormap;
366 short minInstalledCmaps, maxInstalledCmaps;
367 char backingStoreSupport, saveUnderSupport;
368 unsigned long whitePixel, blackPixel;
369 GCPtr GCperDepth[MAXFORMATS + 1];
370 /* next field is a stipple to use as default in
371 a GC. we don't build default tiles of all depths
372 because they are likely to be of a color
373 different from the default fg pixel, so
374 we don't win anything by building
375 a standard one.
376 */
377 PixmapPtr PixmapPerDepth[1];
378 pointer devPrivate;
379 short numVisuals;
380 VisualPtr visuals;
381 WindowPtr root;
382 ScreenSaverStuffRec screensaver;
383
384 DevPrivateSetRec screenSpecificPrivates[PRIVATE_LAST];
385
386 /* Random screen procedures */
387
388 CloseScreenProcPtr CloseScreen;
389 QueryBestSizeProcPtr QueryBestSize;
390 SaveScreenProcPtr SaveScreen;
391 GetImageProcPtr GetImage;
392 GetSpansProcPtr GetSpans;
393 SourceValidateProcPtr SourceValidate;
394
395 /* Window Procedures */
396
397 CreateWindowProcPtr CreateWindow;
398 DestroyWindowProcPtr DestroyWindow;
399 PositionWindowProcPtr PositionWindow;
400 ChangeWindowAttributesProcPtr ChangeWindowAttributes;
401 RealizeWindowProcPtr RealizeWindow;
402 UnrealizeWindowProcPtr UnrealizeWindow;
403 ValidateTreeProcPtr ValidateTree;
404 PostValidateTreeProcPtr PostValidateTree;
405 WindowExposuresProcPtr WindowExposures;
406 CopyWindowProcPtr CopyWindow;
407 ClearToBackgroundProcPtr ClearToBackground;
408 ClipNotifyProcPtr ClipNotify;
409 RestackWindowProcPtr RestackWindow;
410
411 /* Pixmap procedures */
412
413 CreatePixmapProcPtr CreatePixmap;
414 DestroyPixmapProcPtr DestroyPixmap;
415
416 /* Font procedures */
417
418 RealizeFontProcPtr RealizeFont;
419 UnrealizeFontProcPtr UnrealizeFont;
420
421 /* Cursor Procedures */
422
423 ConstrainCursorProcPtr ConstrainCursor;
424 ConstrainCursorHarderProcPtr ConstrainCursorHarder;
425 CursorLimitsProcPtr CursorLimits;
426 DisplayCursorProcPtr DisplayCursor;
427 RealizeCursorProcPtr RealizeCursor;
428 UnrealizeCursorProcPtr UnrealizeCursor;
429 RecolorCursorProcPtr RecolorCursor;
430 SetCursorPositionProcPtr SetCursorPosition;
431
432 /* GC procedures */
433
434 CreateGCProcPtr CreateGC;
435
436 /* Colormap procedures */
437
438 CreateColormapProcPtr CreateColormap;
439 DestroyColormapProcPtr DestroyColormap;
440 InstallColormapProcPtr InstallColormap;
441 UninstallColormapProcPtr UninstallColormap;
442 ListInstalledColormapsProcPtr ListInstalledColormaps;
443 StoreColorsProcPtr StoreColors;
444 ResolveColorProcPtr ResolveColor;
445
446 /* Region procedures */
447
448 BitmapToRegionProcPtr BitmapToRegion;
449 SendGraphicsExposeProcPtr SendGraphicsExpose;
450
451 /* os layer procedures */
452
453 ScreenBlockHandlerProcPtr BlockHandler;
454 ScreenWakeupHandlerProcPtr WakeupHandler;
455
456 /* anybody can get a piece of this array */
457 PrivateRec *devPrivates;
458
459 CreateScreenResourcesProcPtr CreateScreenResources;
460 ModifyPixmapHeaderProcPtr ModifyPixmapHeader;
461
462 GetWindowPixmapProcPtr GetWindowPixmap;
463 SetWindowPixmapProcPtr SetWindowPixmap;
464 GetScreenPixmapProcPtr GetScreenPixmap;
465 SetScreenPixmapProcPtr SetScreenPixmap;
466
467 PixmapPtr pScratchPixmap; /* scratch pixmap "pool" */
468
469 unsigned int totalPixmapSize;
470
471 MarkWindowProcPtr MarkWindow;
472 MarkOverlappedWindowsProcPtr MarkOverlappedWindows;
473 ConfigNotifyProcPtr ConfigNotify;
474 MoveWindowProcPtr MoveWindow;
475 ResizeWindowProcPtr ResizeWindow;
476 GetLayerWindowProcPtr GetLayerWindow;
477 HandleExposuresProcPtr HandleExposures;
478 ReparentWindowProcPtr ReparentWindow;
479
480 SetShapeProcPtr SetShape;
481
482 ChangeBorderWidthProcPtr ChangeBorderWidth;
483 MarkUnrealizedWindowProcPtr MarkUnrealizedWindow;
484
485 /* Device cursor procedures */
486 DeviceCursorInitializeProcPtr DeviceCursorInitialize;
487 DeviceCursorCleanupProcPtr DeviceCursorCleanup;
488
489 /* set it in driver side if X server can copy the framebuffer content.
490 * Meant to be used together with '-background none' option, avoiding
491 * malicious users to steal framebuffer's content if that would be the
492 * default */
493 Bool canDoBGNoneRoot;
494
495 Bool isGPU;
496
497 struct xorg_list unattached_list;
498 struct xorg_list unattached_head;
499
500 ScreenPtr current_master;
501
502 struct xorg_list output_slave_list;
503 struct xorg_list output_head;
504
505 SharePixmapBackingProcPtr SharePixmapBacking;
506 SetSharedPixmapBackingProcPtr SetSharedPixmapBacking;
507
508 StartPixmapTrackingProcPtr StartPixmapTracking;
509 StopPixmapTrackingProcPtr StopPixmapTracking;
510
511 struct xorg_list pixmap_dirty_list;
512 struct xorg_list offload_slave_list;
513 struct xorg_list offload_head;
514
515 ReplaceScanoutPixmapProcPtr ReplaceScanoutPixmap;
516} ScreenRec;
517
518static inline RegionPtr
519BitmapToRegion(ScreenPtr _pScreen, PixmapPtr pPix)
520{
521 return (*(_pScreen)->BitmapToRegion) (pPix); /* no mi version?! */
522}
523
524typedef struct _ScreenInfo {
525 int imageByteOrder;
526 int bitmapScanlineUnit;
527 int bitmapScanlinePad;
528 int bitmapBitOrder;
529 int numPixmapFormats;
530 PixmapFormatRec formats[MAXFORMATS];
531 int numScreens;
532 ScreenPtr screens[MAXSCREENS];
533 int numGPUScreens;
534 ScreenPtr gpuscreens[MAXGPUSCREENS];
535 int x; /* origin */
536 int y; /* origin */
537 int width; /* total width of all screens together */
538 int height; /* total height of all screens together */
539} ScreenInfo;
540
541extern _X_EXPORT ScreenInfo screenInfo;
542
543extern _X_EXPORT void InitOutput(ScreenInfo * /*pScreenInfo */ ,
544 int /*argc */ ,
545 char ** /*argv */ );
546
547#endif /* SCREENINTSTRUCT_H */