scrnintstr.h revision 35c4bbdf
105b261ecSmrg/***********************************************************
205b261ecSmrg
305b261ecSmrgCopyright 1987, 1998  The Open Group
405b261ecSmrg
505b261ecSmrgPermission to use, copy, modify, distribute, and sell this software and its
605b261ecSmrgdocumentation for any purpose is hereby granted without fee, provided that
705b261ecSmrgthe above copyright notice appear in all copies and that both that
805b261ecSmrgcopyright notice and this permission notice appear in supporting
905b261ecSmrgdocumentation.
1005b261ecSmrg
1105b261ecSmrgThe above copyright notice and this permission notice shall be included in
1205b261ecSmrgall copies or substantial portions of the Software.
1305b261ecSmrg
1405b261ecSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1505b261ecSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1605b261ecSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
1705b261ecSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
1805b261ecSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1905b261ecSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2005b261ecSmrg
2105b261ecSmrgExcept as contained in this notice, the name of The Open Group shall not be
2205b261ecSmrgused in advertising or otherwise to promote the sale, use or other dealings
2305b261ecSmrgin this Software without prior written authorization from The Open Group.
2405b261ecSmrg
2505b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
2605b261ecSmrg
2705b261ecSmrg                        All Rights Reserved
2805b261ecSmrg
2935c4bbdfSmrgPermission to use, copy, modify, and distribute this software and its
3035c4bbdfSmrgdocumentation for any purpose and without fee is hereby granted,
3105b261ecSmrgprovided that the above copyright notice appear in all copies and that
3235c4bbdfSmrgboth that copyright notice and this permission notice appear in
3305b261ecSmrgsupporting documentation, and that the name of Digital not be
3405b261ecSmrgused in advertising or publicity pertaining to distribution of the
3535c4bbdfSmrgsoftware without specific, written prior permission.
3605b261ecSmrg
3705b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
3805b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
3905b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
4005b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
4105b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
4205b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4305b261ecSmrgSOFTWARE.
4405b261ecSmrg
4505b261ecSmrg******************************************************************/
4605b261ecSmrg
4705b261ecSmrg#ifndef SCREENINTSTRUCT_H
4805b261ecSmrg#define SCREENINTSTRUCT_H
4905b261ecSmrg
5005b261ecSmrg#include "screenint.h"
5105b261ecSmrg#include "regionstr.h"
5205b261ecSmrg#include "colormap.h"
5305b261ecSmrg#include "cursor.h"
5405b261ecSmrg#include "validate.h"
5505b261ecSmrg#include <X11/Xproto.h>
5605b261ecSmrg#include "dix.h"
574642e01fSmrg#include "privates.h"
5835c4bbdfSmrg#include <X11/extensions/randr.h>
5905b261ecSmrg
6005b261ecSmrgtypedef struct _PixmapFormat {
6135c4bbdfSmrg    unsigned char depth;
6235c4bbdfSmrg    unsigned char bitsPerPixel;
6335c4bbdfSmrg    unsigned char scanlinePad;
6435c4bbdfSmrg} PixmapFormatRec;
6535c4bbdfSmrg
6605b261ecSmrgtypedef struct _Visual {
6735c4bbdfSmrg    VisualID vid;
6835c4bbdfSmrg    short class;
6935c4bbdfSmrg    short bitsPerRGBValue;
7035c4bbdfSmrg    short ColormapEntries;
7135c4bbdfSmrg    short nplanes;              /* = log2 (ColormapEntries). This does not
7235c4bbdfSmrg                                 * imply that the screen has this many planes.
7335c4bbdfSmrg                                 * it may have more or fewer */
7435c4bbdfSmrg    unsigned long redMask, greenMask, blueMask;
7535c4bbdfSmrg    int offsetRed, offsetGreen, offsetBlue;
7635c4bbdfSmrg} VisualRec;
7705b261ecSmrg
7805b261ecSmrgtypedef struct _Depth {
7935c4bbdfSmrg    unsigned char depth;
8035c4bbdfSmrg    short numVids;
8135c4bbdfSmrg    VisualID *vids;             /* block of visual ids for this depth */
8235c4bbdfSmrg} DepthRec;
8305b261ecSmrg
846747b715Smrgtypedef struct _ScreenSaverStuff {
856747b715Smrg    WindowPtr pWindow;
8635c4bbdfSmrg    XID wid;
8735c4bbdfSmrg    char blanked;
8835c4bbdfSmrg    Bool (*ExternalScreenSaver) (ScreenPtr /*pScreen */ ,
8935c4bbdfSmrg                                 int /*xstate */ ,
9035c4bbdfSmrg                                 Bool /*force */ );
916747b715Smrg} ScreenSaverStuffRec;
926747b715Smrg
9305b261ecSmrg/*
9405b261ecSmrg *  There is a typedef for each screen function pointer so that code that
9505b261ecSmrg *  needs to declare a screen function pointer (e.g. in a screen private
9605b261ecSmrg *  or as a local variable) can easily do so and retain full type checking.
9705b261ecSmrg */
9805b261ecSmrg
9935c4bbdfSmrgtypedef Bool (*CloseScreenProcPtr) (ScreenPtr /*pScreen */ );
10035c4bbdfSmrg
10135c4bbdfSmrgtypedef void (*QueryBestSizeProcPtr) (int /*class */ ,
10235c4bbdfSmrg                                      unsigned short * /*pwidth */ ,
10335c4bbdfSmrg                                      unsigned short * /*pheight */ ,
10435c4bbdfSmrg                                      ScreenPtr /*pScreen */ );
10535c4bbdfSmrg
10635c4bbdfSmrgtypedef Bool (*SaveScreenProcPtr) (ScreenPtr /*pScreen */ ,
10735c4bbdfSmrg                                   int /*on */ );
10835c4bbdfSmrg
10935c4bbdfSmrgtypedef void (*GetImageProcPtr) (DrawablePtr /*pDrawable */ ,
11035c4bbdfSmrg                                 int /*sx */ ,
11135c4bbdfSmrg                                 int /*sy */ ,
11235c4bbdfSmrg                                 int /*w */ ,
11335c4bbdfSmrg                                 int /*h */ ,
11435c4bbdfSmrg                                 unsigned int /*format */ ,
11535c4bbdfSmrg                                 unsigned long /*planeMask */ ,
11635c4bbdfSmrg                                 char * /*pdstLine */ );
11735c4bbdfSmrg
11835c4bbdfSmrgtypedef void (*GetSpansProcPtr) (DrawablePtr /*pDrawable */ ,
11935c4bbdfSmrg                                 int /*wMax */ ,
12035c4bbdfSmrg                                 DDXPointPtr /*ppt */ ,
12135c4bbdfSmrg                                 int * /*pwidth */ ,
12235c4bbdfSmrg                                 int /*nspans */ ,
12335c4bbdfSmrg                                 char * /*pdstStart */ );
12435c4bbdfSmrg
12535c4bbdfSmrgtypedef void (*SourceValidateProcPtr) (DrawablePtr /*pDrawable */ ,
12635c4bbdfSmrg                                       int /*x */ ,
12735c4bbdfSmrg                                       int /*y */ ,
12835c4bbdfSmrg                                       int /*width */ ,
12935c4bbdfSmrg                                       int /*height */ ,
13035c4bbdfSmrg                                       unsigned int /*subWindowMode */ );
13135c4bbdfSmrg
13235c4bbdfSmrgtypedef Bool (*CreateWindowProcPtr) (WindowPtr /*pWindow */ );
13335c4bbdfSmrg
13435c4bbdfSmrgtypedef Bool (*DestroyWindowProcPtr) (WindowPtr /*pWindow */ );
13535c4bbdfSmrg
13635c4bbdfSmrgtypedef Bool (*PositionWindowProcPtr) (WindowPtr /*pWindow */ ,
13735c4bbdfSmrg                                       int /*x */ ,
13835c4bbdfSmrg                                       int /*y */ );
13935c4bbdfSmrg
14035c4bbdfSmrgtypedef Bool (*ChangeWindowAttributesProcPtr) (WindowPtr /*pWindow */ ,
14135c4bbdfSmrg                                               unsigned long /*mask */ );
14235c4bbdfSmrg
14335c4bbdfSmrgtypedef Bool (*RealizeWindowProcPtr) (WindowPtr /*pWindow */ );
14435c4bbdfSmrg
14535c4bbdfSmrgtypedef Bool (*UnrealizeWindowProcPtr) (WindowPtr /*pWindow */ );
14635c4bbdfSmrg
14735c4bbdfSmrgtypedef void (*RestackWindowProcPtr) (WindowPtr /*pWindow */ ,
14835c4bbdfSmrg                                      WindowPtr /*pOldNextSib */ );
14935c4bbdfSmrg
15035c4bbdfSmrgtypedef int (*ValidateTreeProcPtr) (WindowPtr /*pParent */ ,
15135c4bbdfSmrg                                    WindowPtr /*pChild */ ,
15235c4bbdfSmrg                                    VTKind /*kind */ );
15335c4bbdfSmrg
15435c4bbdfSmrgtypedef void (*PostValidateTreeProcPtr) (WindowPtr /*pParent */ ,
15535c4bbdfSmrg                                         WindowPtr /*pChild */ ,
15635c4bbdfSmrg                                         VTKind /*kind */ );
15735c4bbdfSmrg
15835c4bbdfSmrgtypedef void (*WindowExposuresProcPtr) (WindowPtr /*pWindow */ ,
15935c4bbdfSmrg                                        RegionPtr /*prgn */);
16035c4bbdfSmrg
16135c4bbdfSmrgtypedef void (*PaintWindowProcPtr) (WindowPtr /*pWindow*/,
16235c4bbdfSmrg                                    RegionPtr /*pRegion*/,
16335c4bbdfSmrg                                    int /*what*/);
16435c4bbdfSmrg
16535c4bbdfSmrgtypedef void (*CopyWindowProcPtr) (WindowPtr /*pWindow */ ,
16635c4bbdfSmrg                                   DDXPointRec /*ptOldOrg */ ,
16735c4bbdfSmrg                                   RegionPtr /*prgnSrc */ );
16835c4bbdfSmrg
16935c4bbdfSmrgtypedef void (*ClearToBackgroundProcPtr) (WindowPtr /*pWindow */ ,
17035c4bbdfSmrg                                          int /*x */ ,
17135c4bbdfSmrg                                          int /*y */ ,
17235c4bbdfSmrg                                          int /*w */ ,
17335c4bbdfSmrg                                          int /*h */ ,
17435c4bbdfSmrg                                          Bool /*generateExposures */ );
17535c4bbdfSmrg
17635c4bbdfSmrgtypedef void (*ClipNotifyProcPtr) (WindowPtr /*pWindow */ ,
17735c4bbdfSmrg                                   int /*dx */ ,
17835c4bbdfSmrg                                   int /*dy */ );
17905b261ecSmrg
1804642e01fSmrg/* pixmap will exist only for the duration of the current rendering operation */
1814642e01fSmrg#define CREATE_PIXMAP_USAGE_SCRATCH                     1
1824642e01fSmrg/* pixmap will be the backing pixmap for a redirected window */
1834642e01fSmrg#define CREATE_PIXMAP_USAGE_BACKING_PIXMAP              2
1844642e01fSmrg/* pixmap will contain a glyph */
1854642e01fSmrg#define CREATE_PIXMAP_USAGE_GLYPH_PICTURE               3
18635c4bbdfSmrg/* pixmap will be shared */
18735c4bbdfSmrg#define CREATE_PIXMAP_USAGE_SHARED                      4
18835c4bbdfSmrg
18935c4bbdfSmrgtypedef PixmapPtr (*CreatePixmapProcPtr) (ScreenPtr /*pScreen */ ,
19035c4bbdfSmrg                                          int /*width */ ,
19135c4bbdfSmrg                                          int /*height */ ,
19235c4bbdfSmrg                                          int /*depth */ ,
19335c4bbdfSmrg                                          unsigned /*usage_hint */ );
19435c4bbdfSmrg
19535c4bbdfSmrgtypedef Bool (*DestroyPixmapProcPtr) (PixmapPtr /*pPixmap */ );
19635c4bbdfSmrg
19735c4bbdfSmrgtypedef Bool (*RealizeFontProcPtr) (ScreenPtr /*pScreen */ ,
19835c4bbdfSmrg                                    FontPtr /*pFont */ );
19935c4bbdfSmrg
20035c4bbdfSmrgtypedef Bool (*UnrealizeFontProcPtr) (ScreenPtr /*pScreen */ ,
20135c4bbdfSmrg                                      FontPtr /*pFont */ );
20235c4bbdfSmrg
20335c4bbdfSmrgtypedef void (*ConstrainCursorProcPtr) (DeviceIntPtr /*pDev */ ,
20435c4bbdfSmrg                                        ScreenPtr /*pScreen */ ,
20535c4bbdfSmrg                                        BoxPtr /*pBox */ );
20635c4bbdfSmrg
20735c4bbdfSmrgtypedef void (*CursorLimitsProcPtr) (DeviceIntPtr /* pDev */ ,
20835c4bbdfSmrg                                     ScreenPtr /*pScreen */ ,
20935c4bbdfSmrg                                     CursorPtr /*pCursor */ ,
21035c4bbdfSmrg                                     BoxPtr /*pHotBox */ ,
21135c4bbdfSmrg                                     BoxPtr /*pTopLeftBox */ );
21235c4bbdfSmrg
21335c4bbdfSmrgtypedef Bool (*DisplayCursorProcPtr) (DeviceIntPtr /* pDev */ ,
21435c4bbdfSmrg                                      ScreenPtr /*pScreen */ ,
21535c4bbdfSmrg                                      CursorPtr /*pCursor */ );
21635c4bbdfSmrg
21735c4bbdfSmrgtypedef Bool (*RealizeCursorProcPtr) (DeviceIntPtr /* pDev */ ,
21835c4bbdfSmrg                                      ScreenPtr /*pScreen */ ,
21935c4bbdfSmrg                                      CursorPtr /*pCursor */ );
22035c4bbdfSmrg
22135c4bbdfSmrgtypedef Bool (*UnrealizeCursorProcPtr) (DeviceIntPtr /* pDev */ ,
22235c4bbdfSmrg                                        ScreenPtr /*pScreen */ ,
22335c4bbdfSmrg                                        CursorPtr /*pCursor */ );
22435c4bbdfSmrg
22535c4bbdfSmrgtypedef void (*RecolorCursorProcPtr) (DeviceIntPtr /* pDev */ ,
22635c4bbdfSmrg                                      ScreenPtr /*pScreen */ ,
22735c4bbdfSmrg                                      CursorPtr /*pCursor */ ,
22835c4bbdfSmrg                                      Bool /*displayed */ );
22935c4bbdfSmrg
23035c4bbdfSmrgtypedef Bool (*SetCursorPositionProcPtr) (DeviceIntPtr /* pDev */ ,
23135c4bbdfSmrg                                          ScreenPtr /*pScreen */ ,
23235c4bbdfSmrg                                          int /*x */ ,
23335c4bbdfSmrg                                          int /*y */ ,
23435c4bbdfSmrg                                          Bool /*generateEvent */ );
23535c4bbdfSmrg
23635c4bbdfSmrgtypedef Bool (*CreateGCProcPtr) (GCPtr /*pGC */ );
23735c4bbdfSmrg
23835c4bbdfSmrgtypedef Bool (*CreateColormapProcPtr) (ColormapPtr /*pColormap */ );
23935c4bbdfSmrg
24035c4bbdfSmrgtypedef void (*DestroyColormapProcPtr) (ColormapPtr /*pColormap */ );
24135c4bbdfSmrg
24235c4bbdfSmrgtypedef void (*InstallColormapProcPtr) (ColormapPtr /*pColormap */ );
24335c4bbdfSmrg
24435c4bbdfSmrgtypedef void (*UninstallColormapProcPtr) (ColormapPtr /*pColormap */ );
24535c4bbdfSmrg
24635c4bbdfSmrgtypedef int (*ListInstalledColormapsProcPtr) (ScreenPtr /*pScreen */ ,
24735c4bbdfSmrg                                              XID * /*pmaps */ );
24835c4bbdfSmrg
24935c4bbdfSmrgtypedef void (*StoreColorsProcPtr) (ColormapPtr /*pColormap */ ,
25035c4bbdfSmrg                                    int /*ndef */ ,
25135c4bbdfSmrg                                    xColorItem * /*pdef */ );
25235c4bbdfSmrg
25335c4bbdfSmrgtypedef void (*ResolveColorProcPtr) (unsigned short * /*pred */ ,
25435c4bbdfSmrg                                     unsigned short * /*pgreen */ ,
25535c4bbdfSmrg                                     unsigned short * /*pblue */ ,
25635c4bbdfSmrg                                     VisualPtr /*pVisual */ );
25735c4bbdfSmrg
25835c4bbdfSmrgtypedef RegionPtr (*BitmapToRegionProcPtr) (PixmapPtr /*pPix */ );
25935c4bbdfSmrg
26035c4bbdfSmrgtypedef void (*ScreenBlockHandlerProcPtr) (ScreenPtr pScreen,
26135c4bbdfSmrg                                           void *pTimeout,
26235c4bbdfSmrg                                           void *pReadmask);
26335c4bbdfSmrg
26435c4bbdfSmrgtypedef void (*ScreenWakeupHandlerProcPtr) (ScreenPtr pScreen,
26535c4bbdfSmrg                                            unsigned long result,
26635c4bbdfSmrg                                            void *pReadMask);
26735c4bbdfSmrg
26835c4bbdfSmrgtypedef Bool (*CreateScreenResourcesProcPtr) (ScreenPtr /*pScreen */ );
26935c4bbdfSmrg
27035c4bbdfSmrgtypedef Bool (*ModifyPixmapHeaderProcPtr) (PixmapPtr pPixmap,
27135c4bbdfSmrg                                           int width,
27235c4bbdfSmrg                                           int height,
27335c4bbdfSmrg                                           int depth,
27435c4bbdfSmrg                                           int bitsPerPixel,
27535c4bbdfSmrg                                           int devKind,
27635c4bbdfSmrg                                           void *pPixData);
27735c4bbdfSmrg
27835c4bbdfSmrgtypedef PixmapPtr (*GetWindowPixmapProcPtr) (WindowPtr /*pWin */ );
27935c4bbdfSmrg
28035c4bbdfSmrgtypedef void (*SetWindowPixmapProcPtr) (WindowPtr /*pWin */ ,
28135c4bbdfSmrg                                        PixmapPtr /*pPix */ );
28235c4bbdfSmrg
28335c4bbdfSmrgtypedef PixmapPtr (*GetScreenPixmapProcPtr) (ScreenPtr /*pScreen */ );
28435c4bbdfSmrg
28535c4bbdfSmrgtypedef void (*SetScreenPixmapProcPtr) (PixmapPtr /*pPix */ );
28635c4bbdfSmrg
28735c4bbdfSmrgtypedef void (*MarkWindowProcPtr) (WindowPtr /*pWin */ );
28835c4bbdfSmrg
28935c4bbdfSmrgtypedef Bool (*MarkOverlappedWindowsProcPtr) (WindowPtr /*parent */ ,
29035c4bbdfSmrg                                              WindowPtr /*firstChild */ ,
29135c4bbdfSmrg                                              WindowPtr * /*pLayerWin */ );
29235c4bbdfSmrg
29335c4bbdfSmrgtypedef int (*ConfigNotifyProcPtr) (WindowPtr /*pWin */ ,
29435c4bbdfSmrg                                    int /*x */ ,
29535c4bbdfSmrg                                    int /*y */ ,
29635c4bbdfSmrg                                    int /*w */ ,
29735c4bbdfSmrg                                    int /*h */ ,
29835c4bbdfSmrg                                    int /*bw */ ,
29935c4bbdfSmrg                                    WindowPtr /*pSib */ );
30035c4bbdfSmrg
30135c4bbdfSmrgtypedef void (*MoveWindowProcPtr) (WindowPtr /*pWin */ ,
30235c4bbdfSmrg                                   int /*x */ ,
30335c4bbdfSmrg                                   int /*y */ ,
30435c4bbdfSmrg                                   WindowPtr /*pSib */ ,
30535c4bbdfSmrg                                   VTKind /*kind */ );
3064642e01fSmrg
30735c4bbdfSmrgtypedef void (*ResizeWindowProcPtr) (WindowPtr /*pWin */ ,
30835c4bbdfSmrg                                     int /*x */ ,
30935c4bbdfSmrg                                     int /*y */ ,
31035c4bbdfSmrg                                     unsigned int /*w */ ,
31135c4bbdfSmrg                                     unsigned int /*h */ ,
31235c4bbdfSmrg                                     WindowPtr  /*pSib */
31335c4bbdfSmrg    );
31435c4bbdfSmrg
31535c4bbdfSmrgtypedef WindowPtr (*GetLayerWindowProcPtr) (WindowPtr   /*pWin */
31635c4bbdfSmrg    );
31735c4bbdfSmrg
31835c4bbdfSmrgtypedef void (*HandleExposuresProcPtr) (WindowPtr /*pWin */ );
31935c4bbdfSmrg
32035c4bbdfSmrgtypedef void (*ReparentWindowProcPtr) (WindowPtr /*pWin */ ,
32135c4bbdfSmrg                                       WindowPtr /*pPriorParent */ );
32235c4bbdfSmrg
32335c4bbdfSmrgtypedef void (*SetShapeProcPtr) (WindowPtr /*pWin */ ,
32435c4bbdfSmrg                                 int /* kind */ );
32535c4bbdfSmrg
32635c4bbdfSmrgtypedef void (*ChangeBorderWidthProcPtr) (WindowPtr /*pWin */ ,
32735c4bbdfSmrg                                          unsigned int /*width */ );
32835c4bbdfSmrg
32935c4bbdfSmrgtypedef void (*MarkUnrealizedWindowProcPtr) (WindowPtr /*pChild */ ,
33035c4bbdfSmrg                                             WindowPtr /*pWin */ ,
33135c4bbdfSmrg                                             Bool /*fromConfigure */ );
33235c4bbdfSmrg
33335c4bbdfSmrgtypedef Bool (*DeviceCursorInitializeProcPtr) (DeviceIntPtr /* pDev */ ,
33435c4bbdfSmrg                                               ScreenPtr /* pScreen */ );
33535c4bbdfSmrg
33635c4bbdfSmrgtypedef void (*DeviceCursorCleanupProcPtr) (DeviceIntPtr /* pDev */ ,
33735c4bbdfSmrg                                            ScreenPtr /* pScreen */ );
33835c4bbdfSmrg
33935c4bbdfSmrgtypedef void (*ConstrainCursorHarderProcPtr) (DeviceIntPtr, ScreenPtr, int,
34035c4bbdfSmrg                                              int *, int *);
34135c4bbdfSmrg
34235c4bbdfSmrg
34335c4bbdfSmrgtypedef Bool (*SharePixmapBackingProcPtr)(PixmapPtr, ScreenPtr, void **);
34435c4bbdfSmrg
34535c4bbdfSmrgtypedef Bool (*SetSharedPixmapBackingProcPtr)(PixmapPtr, void *);
34635c4bbdfSmrg
34735c4bbdfSmrgtypedef Bool (*StartPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr,
34835c4bbdfSmrg                                           int x, int y,
34935c4bbdfSmrg                                           int dst_x, int dst_y,
35035c4bbdfSmrg                                           Rotation rotation);
35135c4bbdfSmrg
35235c4bbdfSmrgtypedef Bool (*StopPixmapTrackingProcPtr)(PixmapPtr, PixmapPtr);
35335c4bbdfSmrg
35435c4bbdfSmrgtypedef Bool (*ReplaceScanoutPixmapProcPtr)(DrawablePtr, PixmapPtr, Bool);
35535c4bbdfSmrg
35635c4bbdfSmrgtypedef WindowPtr (*XYToWindowProcPtr)(ScreenPtr pScreen,
35735c4bbdfSmrg                                       SpritePtr pSprite, int x, int y);
35835c4bbdfSmrg
35935c4bbdfSmrgtypedef int (*NameWindowPixmapProcPtr)(WindowPtr, PixmapPtr, CARD32);
36035c4bbdfSmrg
36135c4bbdfSmrg/* Wrapping Screen procedures
36235c4bbdfSmrg
36335c4bbdfSmrg   There are a few modules in the X server which dynamically add and
36435c4bbdfSmrg    remove themselves from various screen procedure call chains.
36535c4bbdfSmrg
36635c4bbdfSmrg    For example, the BlockHandler is dynamically modified by:
36735c4bbdfSmrg
36835c4bbdfSmrg     * xf86Rotate
36935c4bbdfSmrg     * miSprite
37035c4bbdfSmrg     * composite
37135c4bbdfSmrg     * render (for animated cursors)
37235c4bbdfSmrg
37335c4bbdfSmrg    Correctly manipulating this chain is complicated by the fact that
37435c4bbdfSmrg    the chain is constructed through a sequence of screen private
37535c4bbdfSmrg    structures, each holding the next screen->proc pointer.
37635c4bbdfSmrg
37735c4bbdfSmrg    To add a module to a screen->proc chain is fairly simple; just save
37835c4bbdfSmrg    the current screen->proc value in the module screen private
37935c4bbdfSmrg    and store the module's function in the screen->proc location.
38035c4bbdfSmrg
38135c4bbdfSmrg    Removing a screen proc is a bit trickier. It seems like all you
38235c4bbdfSmrg    need to do is set the screen->proc pointer back to the value saved
38335c4bbdfSmrg    in your screen private. However, if some other module has come
38435c4bbdfSmrg    along and wrapped on top of you, then the right place to store the
38535c4bbdfSmrg    previous screen->proc value is actually in the wrapping module's
38635c4bbdfSmrg    screen private structure(!). Of course, you have no idea what
38735c4bbdfSmrg    other module may have wrapped on top, nor could you poke inside
38835c4bbdfSmrg    its screen private in any case.
38935c4bbdfSmrg
39035c4bbdfSmrg    To make this work, we restrict the unwrapping process to happen
39135c4bbdfSmrg    during the invocation of the screen proc itself, and then we
39235c4bbdfSmrg    require the screen proc to take some care when manipulating the
39335c4bbdfSmrg    screen proc functions pointers.
39435c4bbdfSmrg
39535c4bbdfSmrg    The requirements are:
39635c4bbdfSmrg
39735c4bbdfSmrg     1) The screen proc must set the screen->proc pointer back to the
39835c4bbdfSmrg        value saved in its screen private before calling outside its
39935c4bbdfSmrg        module.
40035c4bbdfSmrg
40135c4bbdfSmrg     2a) If the screen proc wants to be remove itself from the chain,
40235c4bbdfSmrg         it must not manipulate screen->proc pointer again before
40335c4bbdfSmrg         returning.
40435c4bbdfSmrg
40535c4bbdfSmrg     2b) If the screen proc wants to remain in the chain, it must:
40635c4bbdfSmrg
40735c4bbdfSmrg       2b.1) Re-fetch the screen->proc pointer and store that in
40835c4bbdfSmrg             its screen private. This ensures that any changes
40935c4bbdfSmrg             to the chain will be preserved.
41035c4bbdfSmrg
41135c4bbdfSmrg       2b.2) Set screen->proc back to itself
41235c4bbdfSmrg
41335c4bbdfSmrg    One key requirement here is that these steps must wrap not just
41435c4bbdfSmrg    any invocation of the nested screen->proc value, but must nest
41535c4bbdfSmrg    essentially any calls outside the current module. This ensures
41635c4bbdfSmrg    that other modules can reliably manipulate screen->proc wrapping
41735c4bbdfSmrg    using these same rules.
41835c4bbdfSmrg
41935c4bbdfSmrg    For example, the animated cursor code in render has two macros,
42035c4bbdfSmrg    Wrap and Unwrap.
42135c4bbdfSmrg
42235c4bbdfSmrg        #define Unwrap(as,s,elt)    ((s)->elt = (as)->elt)
42335c4bbdfSmrg
42435c4bbdfSmrg    Unwrap takes the screen private (as), the screen (s) and the
42535c4bbdfSmrg    member name (elt), and restores screen->proc to that saved in the
42635c4bbdfSmrg    screen private.
42735c4bbdfSmrg
42835c4bbdfSmrg        #define Wrap(as,s,elt,func) (((as)->elt = (s)->elt), (s)->elt = func)
42935c4bbdfSmrg
43035c4bbdfSmrg    Wrap takes the screen private (as), the screen (s), the member
43135c4bbdfSmrg    name (elt) and the wrapping function (func). It saves the
43235c4bbdfSmrg    current screen->proc value in the screen private, and then sets the
43335c4bbdfSmrg    screen->proc to the local wrapping function.
43435c4bbdfSmrg
43535c4bbdfSmrg    Within each of these functions, there's a pretty simple pattern:
43635c4bbdfSmrg
43735c4bbdfSmrg        Unwrap(as, pScreen, UnrealizeCursor);
43835c4bbdfSmrg
43935c4bbdfSmrg        // Do local stuff, including possibly calling down through
44035c4bbdfSmrg        // pScreen->UnrealizeCursor
44135c4bbdfSmrg
44235c4bbdfSmrg        Wrap(as, pScreen, UnrealizeCursor, AnimCurUnrealizeCursor);
44335c4bbdfSmrg
44435c4bbdfSmrg    The wrapping block handler is a bit different; it does the Unwrap,
44535c4bbdfSmrg    the local operations and then only re-Wraps if the hook is still
44635c4bbdfSmrg    required. Unwrap occurrs at the top of each function, just after
44735c4bbdfSmrg    entry, and Wrap occurrs at the bottom of each function, just
44835c4bbdfSmrg    before returning.
44935c4bbdfSmrg */
4509ace9065Smrg
45105b261ecSmrgtypedef struct _Screen {
45235c4bbdfSmrg    int myNum;                  /* index of this instance in Screens[] */
45335c4bbdfSmrg    ATOM id;
45435c4bbdfSmrg    short x, y, width, height;
45535c4bbdfSmrg    short mmWidth, mmHeight;
45635c4bbdfSmrg    short numDepths;
45735c4bbdfSmrg    unsigned char rootDepth;
45835c4bbdfSmrg    DepthPtr allowedDepths;
45935c4bbdfSmrg    unsigned long rootVisual;
46035c4bbdfSmrg    unsigned long defColormap;
46135c4bbdfSmrg    short minInstalledCmaps, maxInstalledCmaps;
46235c4bbdfSmrg    char backingStoreSupport, saveUnderSupport;
46335c4bbdfSmrg    unsigned long whitePixel, blackPixel;
46435c4bbdfSmrg    GCPtr GCperDepth[MAXFORMATS + 1];
46535c4bbdfSmrg    /* next field is a stipple to use as default in
46635c4bbdfSmrg       a GC.  we don't build default tiles of all depths
46735c4bbdfSmrg       because they are likely to be of a color
46835c4bbdfSmrg       different from the default fg pixel, so
46935c4bbdfSmrg       we don't win anything by building
47035c4bbdfSmrg       a standard one.
47135c4bbdfSmrg     */
47235c4bbdfSmrg    PixmapPtr PixmapPerDepth[1];
47335c4bbdfSmrg    void *devPrivate;
47435c4bbdfSmrg    short numVisuals;
47535c4bbdfSmrg    VisualPtr visuals;
47635c4bbdfSmrg    WindowPtr root;
4776747b715Smrg    ScreenSaverStuffRec screensaver;
47805b261ecSmrg
47935c4bbdfSmrg    DevPrivateSetRec    screenSpecificPrivates[PRIVATE_LAST];
48035c4bbdfSmrg
48105b261ecSmrg    /* Random screen procedures */
48205b261ecSmrg
48335c4bbdfSmrg    CloseScreenProcPtr CloseScreen;
48435c4bbdfSmrg    QueryBestSizeProcPtr QueryBestSize;
48535c4bbdfSmrg    SaveScreenProcPtr SaveScreen;
48635c4bbdfSmrg    GetImageProcPtr GetImage;
48735c4bbdfSmrg    GetSpansProcPtr GetSpans;
48835c4bbdfSmrg    SourceValidateProcPtr SourceValidate;
48905b261ecSmrg
49005b261ecSmrg    /* Window Procedures */
49105b261ecSmrg
49235c4bbdfSmrg    CreateWindowProcPtr CreateWindow;
49335c4bbdfSmrg    DestroyWindowProcPtr DestroyWindow;
49435c4bbdfSmrg    PositionWindowProcPtr PositionWindow;
49505b261ecSmrg    ChangeWindowAttributesProcPtr ChangeWindowAttributes;
49635c4bbdfSmrg    RealizeWindowProcPtr RealizeWindow;
49735c4bbdfSmrg    UnrealizeWindowProcPtr UnrealizeWindow;
49835c4bbdfSmrg    ValidateTreeProcPtr ValidateTree;
49935c4bbdfSmrg    PostValidateTreeProcPtr PostValidateTree;
50035c4bbdfSmrg    WindowExposuresProcPtr WindowExposures;
50135c4bbdfSmrg    CopyWindowProcPtr CopyWindow;
50235c4bbdfSmrg    ClearToBackgroundProcPtr ClearToBackground;
50335c4bbdfSmrg    ClipNotifyProcPtr ClipNotify;
50435c4bbdfSmrg    RestackWindowProcPtr RestackWindow;
50535c4bbdfSmrg    PaintWindowProcPtr PaintWindow;
50605b261ecSmrg
50705b261ecSmrg    /* Pixmap procedures */
50805b261ecSmrg
50935c4bbdfSmrg    CreatePixmapProcPtr CreatePixmap;
51035c4bbdfSmrg    DestroyPixmapProcPtr DestroyPixmap;
51105b261ecSmrg
51205b261ecSmrg    /* Font procedures */
51305b261ecSmrg
51435c4bbdfSmrg    RealizeFontProcPtr RealizeFont;
51535c4bbdfSmrg    UnrealizeFontProcPtr UnrealizeFont;
51605b261ecSmrg
51705b261ecSmrg    /* Cursor Procedures */
51805b261ecSmrg
51935c4bbdfSmrg    ConstrainCursorProcPtr ConstrainCursor;
5209ace9065Smrg    ConstrainCursorHarderProcPtr ConstrainCursorHarder;
52135c4bbdfSmrg    CursorLimitsProcPtr CursorLimits;
52235c4bbdfSmrg    DisplayCursorProcPtr DisplayCursor;
52335c4bbdfSmrg    RealizeCursorProcPtr RealizeCursor;
52435c4bbdfSmrg    UnrealizeCursorProcPtr UnrealizeCursor;
52535c4bbdfSmrg    RecolorCursorProcPtr RecolorCursor;
52635c4bbdfSmrg    SetCursorPositionProcPtr SetCursorPosition;
52705b261ecSmrg
52805b261ecSmrg    /* GC procedures */
52905b261ecSmrg
53035c4bbdfSmrg    CreateGCProcPtr CreateGC;
53105b261ecSmrg
53205b261ecSmrg    /* Colormap procedures */
53305b261ecSmrg
53435c4bbdfSmrg    CreateColormapProcPtr CreateColormap;
53535c4bbdfSmrg    DestroyColormapProcPtr DestroyColormap;
53635c4bbdfSmrg    InstallColormapProcPtr InstallColormap;
53735c4bbdfSmrg    UninstallColormapProcPtr UninstallColormap;
53805b261ecSmrg    ListInstalledColormapsProcPtr ListInstalledColormaps;
53935c4bbdfSmrg    StoreColorsProcPtr StoreColors;
54035c4bbdfSmrg    ResolveColorProcPtr ResolveColor;
54105b261ecSmrg
54205b261ecSmrg    /* Region procedures */
54305b261ecSmrg
54435c4bbdfSmrg    BitmapToRegionProcPtr BitmapToRegion;
54505b261ecSmrg
54605b261ecSmrg    /* os layer procedures */
54705b261ecSmrg
54835c4bbdfSmrg    ScreenBlockHandlerProcPtr BlockHandler;
54935c4bbdfSmrg    ScreenWakeupHandlerProcPtr WakeupHandler;
55005b261ecSmrg
55105b261ecSmrg    /* anybody can get a piece of this array */
55235c4bbdfSmrg    PrivateRec *devPrivates;
55305b261ecSmrg
55405b261ecSmrg    CreateScreenResourcesProcPtr CreateScreenResources;
55535c4bbdfSmrg    ModifyPixmapHeaderProcPtr ModifyPixmapHeader;
55605b261ecSmrg
55735c4bbdfSmrg    GetWindowPixmapProcPtr GetWindowPixmap;
55835c4bbdfSmrg    SetWindowPixmapProcPtr SetWindowPixmap;
55935c4bbdfSmrg    GetScreenPixmapProcPtr GetScreenPixmap;
56035c4bbdfSmrg    SetScreenPixmapProcPtr SetScreenPixmap;
56135c4bbdfSmrg    NameWindowPixmapProcPtr NameWindowPixmap;
56205b261ecSmrg
56335c4bbdfSmrg    PixmapPtr pScratchPixmap;   /* scratch pixmap "pool" */
56405b261ecSmrg
56535c4bbdfSmrg    unsigned int totalPixmapSize;
56605b261ecSmrg
56735c4bbdfSmrg    MarkWindowProcPtr MarkWindow;
56805b261ecSmrg    MarkOverlappedWindowsProcPtr MarkOverlappedWindows;
56935c4bbdfSmrg    ConfigNotifyProcPtr ConfigNotify;
57035c4bbdfSmrg    MoveWindowProcPtr MoveWindow;
57135c4bbdfSmrg    ResizeWindowProcPtr ResizeWindow;
57235c4bbdfSmrg    GetLayerWindowProcPtr GetLayerWindow;
57335c4bbdfSmrg    HandleExposuresProcPtr HandleExposures;
57435c4bbdfSmrg    ReparentWindowProcPtr ReparentWindow;
57505b261ecSmrg
57635c4bbdfSmrg    SetShapeProcPtr SetShape;
57705b261ecSmrg
57835c4bbdfSmrg    ChangeBorderWidthProcPtr ChangeBorderWidth;
57935c4bbdfSmrg    MarkUnrealizedWindowProcPtr MarkUnrealizedWindow;
58005b261ecSmrg
5814642e01fSmrg    /* Device cursor procedures */
5824642e01fSmrg    DeviceCursorInitializeProcPtr DeviceCursorInitialize;
58335c4bbdfSmrg    DeviceCursorCleanupProcPtr DeviceCursorCleanup;
5849ace9065Smrg
5859ace9065Smrg    /* set it in driver side if X server can copy the framebuffer content.
5869ace9065Smrg     * Meant to be used together with '-background none' option, avoiding
5879ace9065Smrg     * malicious users to steal framebuffer's content if that would be the
5889ace9065Smrg     * default */
58935c4bbdfSmrg    Bool canDoBGNoneRoot;
59035c4bbdfSmrg
59135c4bbdfSmrg    Bool isGPU;
59235c4bbdfSmrg
59335c4bbdfSmrg    struct xorg_list unattached_list;
59435c4bbdfSmrg    struct xorg_list unattached_head;
59535c4bbdfSmrg
59635c4bbdfSmrg    ScreenPtr current_master;
59735c4bbdfSmrg
59835c4bbdfSmrg    struct xorg_list output_slave_list;
59935c4bbdfSmrg    struct xorg_list output_head;
60035c4bbdfSmrg
60135c4bbdfSmrg    SharePixmapBackingProcPtr SharePixmapBacking;
60235c4bbdfSmrg    SetSharedPixmapBackingProcPtr SetSharedPixmapBacking;
60335c4bbdfSmrg
60435c4bbdfSmrg    StartPixmapTrackingProcPtr StartPixmapTracking;
60535c4bbdfSmrg    StopPixmapTrackingProcPtr StopPixmapTracking;
60635c4bbdfSmrg
60735c4bbdfSmrg    struct xorg_list pixmap_dirty_list;
60835c4bbdfSmrg    struct xorg_list offload_slave_list;
60935c4bbdfSmrg    struct xorg_list offload_head;
61035c4bbdfSmrg
61135c4bbdfSmrg    ReplaceScanoutPixmapProcPtr ReplaceScanoutPixmap;
61235c4bbdfSmrg    XYToWindowProcPtr XYToWindow;
61305b261ecSmrg} ScreenRec;
61405b261ecSmrg
61535c4bbdfSmrgstatic inline RegionPtr
61635c4bbdfSmrgBitmapToRegion(ScreenPtr _pScreen, PixmapPtr pPix)
61735c4bbdfSmrg{
61835c4bbdfSmrg    return (*(_pScreen)->BitmapToRegion) (pPix);        /* no mi version?! */
6196747b715Smrg}
6206747b715Smrg
62105b261ecSmrgtypedef struct _ScreenInfo {
62235c4bbdfSmrg    int imageByteOrder;
62335c4bbdfSmrg    int bitmapScanlineUnit;
62435c4bbdfSmrg    int bitmapScanlinePad;
62535c4bbdfSmrg    int bitmapBitOrder;
62635c4bbdfSmrg    int numPixmapFormats;
62735c4bbdfSmrg     PixmapFormatRec formats[MAXFORMATS];
62835c4bbdfSmrg    int numScreens;
62935c4bbdfSmrg    ScreenPtr screens[MAXSCREENS];
63035c4bbdfSmrg    int numGPUScreens;
63135c4bbdfSmrg    ScreenPtr gpuscreens[MAXGPUSCREENS];
63235c4bbdfSmrg    int x;                      /* origin */
63335c4bbdfSmrg    int y;                      /* origin */
63435c4bbdfSmrg    int width;                  /* total width of all screens together */
63535c4bbdfSmrg    int height;                 /* total height of all screens together */
63605b261ecSmrg} ScreenInfo;
63705b261ecSmrg
6386747b715Smrgextern _X_EXPORT ScreenInfo screenInfo;
63905b261ecSmrg
64035c4bbdfSmrgextern _X_EXPORT void InitOutput(ScreenInfo * /*pScreenInfo */ ,
64135c4bbdfSmrg                                 int /*argc */ ,
64235c4bbdfSmrg                                 char ** /*argv */ );
64305b261ecSmrg
64435c4bbdfSmrg#endif                          /* SCREENINTSTRUCT_H */
645