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. */ 43typedef 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 62extern Bool dmxInitWindow(ScreenPtr pScreen); 63 64extern Window dmxCreateRootWindow(WindowPtr pWindow); 65 66extern void dmxGetDefaultWindowAttributes(WindowPtr pWindow, 67 Colormap *cmap, 68 Visual **visual); 69extern void dmxCreateAndRealizeWindow(WindowPtr pWindow, Bool doSync); 70 71extern Bool dmxCreateWindow(WindowPtr pWindow); 72extern Bool dmxDestroyWindow(WindowPtr pWindow); 73extern Bool dmxPositionWindow(WindowPtr pWindow, int x, int y); 74extern Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask); 75extern Bool dmxRealizeWindow(WindowPtr pWindow); 76extern Bool dmxUnrealizeWindow(WindowPtr pWindow); 77extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib); 78extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn, 79 RegionPtr other_exposed); 80extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, 81 RegionPtr prgnSrc); 82 83extern void dmxResizeWindow(WindowPtr pWindow, int x, int y, 84 unsigned int w, unsigned int h, WindowPtr pSib); 85extern void dmxReparentWindow(WindowPtr pWindow, WindowPtr pPriorParent); 86 87extern void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width); 88 89extern void dmxResizeScreenWindow(ScreenPtr pScreen, 90 int x, int y, int w, int h); 91extern void dmxResizeRootWindow(WindowPtr pRoot, 92 int x, int y, int w, int h); 93 94extern Bool dmxBEDestroyWindow(WindowPtr pWindow); 95 96/* Support for shape extension */ 97extern void dmxSetShape(WindowPtr pWindow, int kind); 98 99/** Get window private pointer. */ 100#define DMX_GET_WINDOW_PRIV(_pWin) ((dmxWinPrivPtr) \ 101 dixLookupPrivate(&(_pWin)->devPrivates, dmxWinPrivateKey)) 102 103/* All of these macros are only used in dmxwindow.c */ 104#define DMX_WINDOW_FUNC_PROLOGUE(_pGC) \ 105do { \ 106 dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \ 107 DMX_UNWRAP(funcs, pGCPriv, (_pGC)); \ 108 if (pGCPriv->ops) \ 109 DMX_UNWRAP(ops, pGCPriv, (_pGC)); \ 110} while (0) 111 112#define DMX_WINDOW_FUNC_EPILOGUE(_pGC) \ 113do { \ 114 dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \ 115 DMX_WRAP(funcs, &dmxGCFuncs, pGCPriv, (_pGC)); \ 116 if (pGCPriv->ops) \ 117 DMX_WRAP(ops, &dmxGCOps, pGCPriv, (_pGC)); \ 118} while (0) 119 120#define DMX_WINDOW_X1(_pWin) \ 121 ((_pWin)->drawable.x - wBorderWidth(_pWin)) 122#define DMX_WINDOW_Y1(_pWin) \ 123 ((_pWin)->drawable.y - wBorderWidth(_pWin)) 124#define DMX_WINDOW_X2(_pWin) \ 125 ((_pWin)->drawable.x + wBorderWidth(_pWin) + (_pWin)->drawable.width) 126#define DMX_WINDOW_Y2(_pWin) \ 127 ((_pWin)->drawable.y + wBorderWidth(_pWin) + (_pWin)->drawable.height) 128 129#define DMX_WINDOW_OFFSCREEN(_pWin) \ 130 (DMX_WINDOW_X1(_pWin) >= (_pWin)->drawable.pScreen->width || \ 131 DMX_WINDOW_Y1(_pWin) >= (_pWin)->drawable.pScreen->height || \ 132 DMX_WINDOW_X2(_pWin) <= 0 || \ 133 DMX_WINDOW_Y2(_pWin) <= 0) 134 135#endif /* DMXWINDOW_H */ 136