/* * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina. * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation on the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* * Authors: * Kevin E. Martin * */ /** \file * Interface for window support. \see dmxwindow.c */ #ifndef DMXWINDOW_H #define DMXWINDOW_H #include "windowstr.h" /** Window private area. */ typedef struct _dmxWinPriv { Window window; Bool offscreen; Bool mapped; Bool restacked; unsigned long attribMask; Colormap cmap; Visual *visual; Bool isShaped; #ifdef RENDER Bool hasPict; #endif #ifdef GLXEXT void *swapGroup; int barrier; void (*windowDestroyed)(WindowPtr); void (*windowUnmapped)(WindowPtr); #endif } dmxWinPrivRec, *dmxWinPrivPtr; extern Bool dmxInitWindow(ScreenPtr pScreen); extern Window dmxCreateRootWindow(WindowPtr pWindow); extern void dmxGetDefaultWindowAttributes(WindowPtr pWindow, Colormap *cmap, Visual **visual); extern void dmxCreateAndRealizeWindow(WindowPtr pWindow, Bool doSync); extern Bool dmxCreateWindow(WindowPtr pWindow); extern Bool dmxDestroyWindow(WindowPtr pWindow); extern Bool dmxPositionWindow(WindowPtr pWindow, int x, int y); extern Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask); extern Bool dmxRealizeWindow(WindowPtr pWindow); extern Bool dmxUnrealizeWindow(WindowPtr pWindow); extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib); extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed); extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc); extern void dmxResizeWindow(WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib); extern void dmxReparentWindow(WindowPtr pWindow, WindowPtr pPriorParent); extern void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width); extern void dmxResizeScreenWindow(ScreenPtr pScreen, int x, int y, int w, int h); extern void dmxResizeRootWindow(WindowPtr pRoot, int x, int y, int w, int h); extern Bool dmxBEDestroyWindow(WindowPtr pWindow); /* Support for shape extension */ extern void dmxSetShape(WindowPtr pWindow); /** Private index. \see dmxwindow.c \see dmxscrinit.c */ extern DevPrivateKey dmxWinPrivateKey; /** Get window private pointer. */ #define DMX_GET_WINDOW_PRIV(_pWin) ((dmxWinPrivPtr) \ dixLookupPrivate(&(_pWin)->devPrivates, dmxWinPrivateKey)) /* All of these macros are only used in dmxwindow.c */ #define DMX_WINDOW_FUNC_PROLOGUE(_pGC) \ do { \ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \ DMX_UNWRAP(funcs, pGCPriv, (_pGC)); \ if (pGCPriv->ops) \ DMX_UNWRAP(ops, pGCPriv, (_pGC)); \ } while (0) #define DMX_WINDOW_FUNC_EPILOGUE(_pGC) \ do { \ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \ DMX_WRAP(funcs, &dmxGCFuncs, pGCPriv, (_pGC)); \ if (pGCPriv->ops) \ DMX_WRAP(ops, &dmxGCOps, pGCPriv, (_pGC)); \ } while (0) #define DMX_WINDOW_X1(_pWin) \ ((_pWin)->drawable.x - wBorderWidth(_pWin)) #define DMX_WINDOW_Y1(_pWin) \ ((_pWin)->drawable.y - wBorderWidth(_pWin)) #define DMX_WINDOW_X2(_pWin) \ ((_pWin)->drawable.x + wBorderWidth(_pWin) + (_pWin)->drawable.width) #define DMX_WINDOW_Y2(_pWin) \ ((_pWin)->drawable.y + wBorderWidth(_pWin) + (_pWin)->drawable.height) #define DMX_WINDOW_OFFSCREEN(_pWin) \ (DMX_WINDOW_X1(_pWin) >= (_pWin)->drawable.pScreen->width || \ DMX_WINDOW_Y1(_pWin) >= (_pWin)->drawable.pScreen->height || \ DMX_WINDOW_X2(_pWin) <= 0 || \ DMX_WINDOW_Y2(_pWin) <= 0) #endif /* DMXWINDOW_H */