Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

# dmxwindow.h

Go to the documentation of this file.

    00001 /* $XFree86$ */
    00002 /*
    00003  * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
    00004  *
    00005  * All Rights Reserved.
    00006  *
    00007  * Permission is hereby granted, free of charge, to any person obtaining
    00008  * a copy of this software and associated documentation files (the
    00009  * "Software"), to deal in the Software without restriction, including
    00010  * without limitation on the rights to use, copy, modify, merge,
    00011  * publish, distribute, sublicense, and/or sell copies of the Software,
    00012  * and to permit persons to whom the Software is furnished to do so,
    00013  * subject to the following conditions:
    00014  *
    00015  * The above copyright notice and this permission notice (including the
    00016  * next paragraph) shall be included in all copies or substantial
    00017  * portions of the Software.
    00018  *
    00019  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    00020  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    00021  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    00022  * NON-INFRINGEMENT.  IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
    00023  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    00024  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    00025  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    00026  * SOFTWARE.
    00027  */
    00028
    00029 /*
    00030  * Authors:
    00031  *   Kevin E. Martin <kem@redhat.com>
    00032  *
    00033  */
    00034
    00038 #ifndef DMXWINDOW_H
    00039 #define DMXWINDOW_H
    00040
    00041 #include "windowstr.h"
    00042
    00044 typedef struct _dmxWinPriv {
    00045     Window         window;
    00046     Bool           offscreen;
    00047     Bool           mapped;
    00048     Bool           restacked;
    00049     unsigned long  attribMask;
    00050     Colormap       cmap;
    00051     Visual        *visual;
    00052 #ifdef SHAPE
    00053     Bool           isShaped;
    00054 #endif
    00055 #ifdef RENDER
    00056     Bool           hasPict;
    00057 #endif
    00058 #ifdef GLXEXT
    00059     void          *swapGroup;
    00060     int            barrier;
    00061     void         (*windowDestroyed)(WindowPtr);
    00062     void         (*windowUnmapped)(WindowPtr);
    00063 #endif
    00064 } dmxWinPrivRec, *dmxWinPrivPtr;
    00065
    00066
    00067 extern Bool dmxInitWindow(ScreenPtr pScreen);
    00068
    00069 extern Window dmxCreateRootWindow(WindowPtr pWindow);
    00070
    00071 extern void dmxGetDefaultWindowAttributes(WindowPtr pWindow,
    00072                                           Colormap *cmap,
    00073                                           Visual **visual);
    00074 extern void dmxCreateAndRealizeWindow(WindowPtr pWindow, Bool doSync);
    00075
    00076 extern Bool dmxCreateWindow(WindowPtr pWindow);
    00077 extern Bool dmxDestroyWindow(WindowPtr pWindow);
    00078 extern Bool dmxPositionWindow(WindowPtr pWindow, int x, int y);
    00079 extern Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask);
    00080 extern Bool dmxRealizeWindow(WindowPtr pWindow);
    00081 extern Bool dmxUnrealizeWindow(WindowPtr pWindow);
    00082 extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib);
    00083 extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn,
    00084                                RegionPtr other_exposed);
    00085 extern void dmxPaintWindowBackground(WindowPtr pWindow, RegionPtr pRegion,
    00086                                      int what);
    00087 extern void dmxPaintWindowBorder(WindowPtr pWindow, RegionPtr pRegion,
    00088                                  int what);
    00089 extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg,
    00090                           RegionPtr prgnSrc);
    00091
    00092 extern void dmxResizeWindow(WindowPtr pWindow, int x, int y,
    00093                             unsigned int w, unsigned int h, WindowPtr pSib);
    00094 extern void dmxReparentWindow(WindowPtr pWindow, WindowPtr pPriorParent);
    00095
    00096 extern void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width);
    00097
    00098 extern void dmxResizeScreenWindow(ScreenPtr pScreen,
    00099                                   int x, int y, int w, int h);
    00100 extern void dmxResizeRootWindow(WindowPtr pRoot,
    00101                                 int x, int y, int w, int h);
    00102
    00103 extern Bool dmxBEDestroyWindow(WindowPtr pWindow);
    00104
    00105 #ifdef SHAPE
    00106 /* Support for shape extension */
    00107 extern void dmxSetShape(WindowPtr pWindow);
    00108 #endif
    00109
    00111 extern int dmxWinPrivateIndex;
    00112
    00114 #define DMX_GET_WINDOW_PRIV(_pWin)                                      \
    00115     ((dmxWinPrivPtr)(_pWin)->devPrivates[dmxWinPrivateIndex].ptr)
    00116
    00117 /* All of these macros are only used in dmxwindow.c */
    00118 #define DMX_WINDOW_FUNC_PROLOGUE(_pGC)                                  \
    00119 do {                                                                    \
    00120     dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC);                       \
    00121     DMX_UNWRAP(funcs, pGCPriv, (_pGC));                                 \
    00122     if (pGCPriv->ops)                                                   \
    00123         DMX_UNWRAP(ops, pGCPriv, (_pGC));                               \
    00124 } while (0)
    00125
    00126 #define DMX_WINDOW_FUNC_EPILOGUE(_pGC)                                  \
    00127 do {                                                                    \
    00128     dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC);                       \
    00129     DMX_WRAP(funcs, &dmxGCFuncs, pGCPriv, (_pGC));                      \
    00130     if (pGCPriv->ops)                                                   \
    00131         DMX_WRAP(ops, &dmxGCOps, pGCPriv, (_pGC));                      \
    00132 } while (0)
    00133
    00134 #define DMX_WINDOW_X1(_pWin)                                            \
    00135     ((_pWin)->drawable.x - wBorderWidth(_pWin))
    00136 #define DMX_WINDOW_Y1(_pWin)                                            \
    00137     ((_pWin)->drawable.y - wBorderWidth(_pWin))
    00138 #define DMX_WINDOW_X2(_pWin)                                            \
    00139     ((_pWin)->drawable.x + wBorderWidth(_pWin) + (_pWin)->drawable.width)
    00140 #define DMX_WINDOW_Y2(_pWin)                                            \
    00141     ((_pWin)->drawable.y + wBorderWidth(_pWin) + (_pWin)->drawable.height)
    00142
    00143 #define DMX_WINDOW_OFFSCREEN(_pWin)                                     \
    00144     (DMX_WINDOW_X1(_pWin) >= (_pWin)->drawable.pScreen->width  ||       \
    00145      DMX_WINDOW_Y1(_pWin) >= (_pWin)->drawable.pScreen->height ||       \
    00146      DMX_WINDOW_X2(_pWin) <= 0                                 ||       \
    00147      DMX_WINDOW_Y2(_pWin) <= 0)
    00148
    00149 #endif /* DMXWINDOW_H */