1 /* 2 * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina. 3 * 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining 7 * a copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation on the rights to use, copy, modify, merge, 10 * publish, distribute, sublicense, and/or sell copies of the Software, 11 * and to permit persons to whom the Software is furnished to do so, 12 * subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial 16 * portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS 22 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 23 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 25 * SOFTWARE. 26 */ 27 28 /* 29 * Authors: 30 * Kevin E. Martin <kem@redhat.com> 31 * 32 */ 33 34 /** \file 35 * Interface for window support. \see dmxwindow.c */ 36 37 #ifndef DMXWINDOW_H 38 #define DMXWINDOW_H 39 40 #include "windowstr.h" 41 42 /** Window private area. */ 43 typedef struct _dmxWinPriv { 44 Window window; 45 Bool offscreen; 46 Bool mapped; 47 Bool restacked; 48 unsigned long attribMask; 49 Colormap cmap; 50 Visual *visual; 51 Bool isShaped; 52 Bool hasPict; 53 #ifdef GLXEXT 54 void *swapGroup; 55 int barrier; 56 void (*windowDestroyed) (WindowPtr); 57 void (*windowUnmapped) (WindowPtr); 58 #endif 59 } dmxWinPrivRec, *dmxWinPrivPtr; 60 61 extern Bool dmxInitWindow(ScreenPtr pScreen); 62 63 extern Window dmxCreateRootWindow(WindowPtr pWindow); 64 65 extern void dmxGetDefaultWindowAttributes(WindowPtr pWindow, 66 Colormap * cmap, Visual ** visual); 67 extern void dmxCreateAndRealizeWindow(WindowPtr pWindow, Bool doSync); 68 69 extern Bool dmxCreateWindow(WindowPtr pWindow); 70 extern Bool dmxDestroyWindow(WindowPtr pWindow); 71 extern Bool dmxPositionWindow(WindowPtr pWindow, int x, int y); 72 extern Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask); 73 extern Bool dmxRealizeWindow(WindowPtr pWindow); 74 extern Bool dmxUnrealizeWindow(WindowPtr pWindow); 75 extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib); 76 extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn); 77 extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, 78 RegionPtr prgnSrc); 79 80 extern void dmxResizeWindow(WindowPtr pWindow, int x, int y, 81 unsigned int w, unsigned int h, WindowPtr pSib); 82 extern void dmxReparentWindow(WindowPtr pWindow, WindowPtr pPriorParent); 83 84 extern void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width); 85 86 extern void dmxResizeScreenWindow(ScreenPtr pScreen, 87 int x, int y, int w, int h); 88 extern void dmxResizeRootWindow(WindowPtr pRoot, int x, int y, int w, int h); 89 90 extern Bool dmxBEDestroyWindow(WindowPtr pWindow); 91 92 /* Support for shape extension */ 93 extern void dmxSetShape(WindowPtr pWindow, int kind); 94 95 /** Get window private pointer. */ 96 #define DMX_GET_WINDOW_PRIV(_pWin) ((dmxWinPrivPtr) \ 97 dixLookupPrivate(&(_pWin)->devPrivates, dmxWinPrivateKey)) 98 99 /* All of these macros are only used in dmxwindow.c */ 100 #define DMX_WINDOW_FUNC_PROLOGUE(_pGC) \ 101 do { \ 102 dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \ 103 DMX_UNWRAP(funcs, pGCPriv, (_pGC)); \ 104 if (pGCPriv->ops) \ 105 DMX_UNWRAP(ops, pGCPriv, (_pGC)); \ 106 } while (0) 107 108 #define DMX_WINDOW_FUNC_EPILOGUE(_pGC) \ 109 do { \ 110 dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \ 111 DMX_WRAP(funcs, &dmxGCFuncs, pGCPriv, (_pGC)); \ 112 if (pGCPriv->ops) \ 113 DMX_WRAP(ops, &dmxGCOps, pGCPriv, (_pGC)); \ 114 } while (0) 115 116 #define DMX_WINDOW_X1(_pWin) \ 117 ((_pWin)->drawable.x - wBorderWidth(_pWin)) 118 #define DMX_WINDOW_Y1(_pWin) \ 119 ((_pWin)->drawable.y - wBorderWidth(_pWin)) 120 #define DMX_WINDOW_X2(_pWin) \ 121 ((_pWin)->drawable.x + wBorderWidth(_pWin) + (_pWin)->drawable.width) 122 #define DMX_WINDOW_Y2(_pWin) \ 123 ((_pWin)->drawable.y + wBorderWidth(_pWin) + (_pWin)->drawable.height) 124 125 #define DMX_WINDOW_OFFSCREEN(_pWin) \ 126 (DMX_WINDOW_X1(_pWin) >= (_pWin)->drawable.pScreen->width || \ 127 DMX_WINDOW_Y1(_pWin) >= (_pWin)->drawable.pScreen->height || \ 128 DMX_WINDOW_X2(_pWin) <= 0 || \ 129 DMX_WINDOW_Y2(_pWin) <= 0) 130 131 #endif /* DMXWINDOW_H */ 132