/* * Copyright © 2006 Sun Microsystems * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Sun Microsystems not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Sun Microsystems makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_DIX_CONFIG_H #include #endif #ifndef _COMPINT_H_ #define _COMPINT_H_ #include "misc.h" #include "scrnintstr.h" #include "os.h" #include "regionstr.h" #include "validate.h" #include "windowstr.h" #include "input.h" #include "resource.h" #include "colormapst.h" #include "cursorstr.h" #include "dixstruct.h" #include "gcstruct.h" #include "servermd.h" #include "dixevents.h" #include "globals.h" #include "picturestr.h" #include "extnsionst.h" #include "privates.h" #include "mi.h" #include "damage.h" #include "damageextint.h" #include "xfixes.h" #include #include /* * enable this for debugging #define COMPOSITE_DEBUG */ typedef struct _CompClientWindow { struct _CompClientWindow *next; XID id; int update; } CompClientWindowRec, *CompClientWindowPtr; typedef struct _CompWindow { RegionRec borderClip; DamagePtr damage; /* for automatic update mode */ Bool damageRegistered; Bool damaged; int update; CompClientWindowPtr clients; int oldx; int oldy; PixmapPtr pOldPixmap; int borderClipX, borderClipY; } CompWindowRec, *CompWindowPtr; #define COMP_ORIGIN_INVALID 0x80000000 typedef struct _CompSubwindows { int update; CompClientWindowPtr clients; } CompSubwindowsRec, *CompSubwindowsPtr; #ifndef COMP_INCLUDE_RGB24_VISUAL #define COMP_INCLUDE_RGB24_VISUAL 0 #endif typedef struct _CompOverlayClientRec *CompOverlayClientPtr; typedef struct _CompOverlayClientRec { CompOverlayClientPtr pNext; ClientPtr pClient; ScreenPtr pScreen; XID resource; } CompOverlayClientRec; typedef struct _CompScreen { PositionWindowProcPtr PositionWindow; CopyWindowProcPtr CopyWindow; CreateWindowProcPtr CreateWindow; DestroyWindowProcPtr DestroyWindow; RealizeWindowProcPtr RealizeWindow; UnrealizeWindowProcPtr UnrealizeWindow; ClipNotifyProcPtr ClipNotify; /* * Called from ConfigureWindow, these * three track changes to the offscreen storage * geometry */ MoveWindowProcPtr MoveWindow; ResizeWindowProcPtr ResizeWindow; ChangeBorderWidthProcPtr ChangeBorderWidth; /* * Reparenting has an effect on Subwindows redirect */ ReparentWindowProcPtr ReparentWindow; /* * Colormaps for new visuals better not get installed */ InstallColormapProcPtr InstallColormap; /* * Fake backing store via automatic redirection */ ChangeWindowAttributesProcPtr ChangeWindowAttributes; ScreenBlockHandlerProcPtr BlockHandler; CloseScreenProcPtr CloseScreen; Bool damaged; int numAlternateVisuals; VisualID *alternateVisuals; WindowPtr pOverlayWin; Window overlayWid; CompOverlayClientPtr pOverlayClients; } CompScreenRec, *CompScreenPtr; extern DevPrivateKey CompScreenPrivateKey; extern DevPrivateKey CompWindowPrivateKey; extern DevPrivateKey CompSubwindowsPrivateKey; #define GetCompScreen(s) ((CompScreenPtr) \ dixLookupPrivate(&(s)->devPrivates, CompScreenPrivateKey)) #define GetCompWindow(w) ((CompWindowPtr) \ dixLookupPrivate(&(w)->devPrivates, CompWindowPrivateKey)) #define GetCompSubwindows(w) ((CompSubwindowsPtr) \ dixLookupPrivate(&(w)->devPrivates, CompSubwindowsPrivateKey)) extern RESTYPE CompositeClientWindowType; extern RESTYPE CompositeClientSubwindowsType; extern RESTYPE CompositeClientOverlayType; /* * compalloc.c */ Bool compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update); void compFreeClientWindow (WindowPtr pWin, XID id); int compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update); int compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update); void compFreeClientSubwindows (WindowPtr pWin, XID id); int compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update); int compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin); int compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin); Bool compAllocPixmap (WindowPtr pWin); void compFreePixmap (WindowPtr pWin); Bool compReallocPixmap (WindowPtr pWin, int x, int y, unsigned int w, unsigned int h, int bw); /* * compext.c */ void CompositeExtensionInit (void); /* * compinit.c */ Bool CompositeRegisterAlternateVisuals (ScreenPtr pScreen, VisualID *vids, int nVisuals); Bool compScreenInit (ScreenPtr pScreen); /* * compoverlay.c */ void compFreeOverlayClient (CompOverlayClientPtr pOcToDel); CompOverlayClientPtr compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient); CompOverlayClientPtr compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient); Bool compCreateOverlayWindow (ScreenPtr pScreen); void compDestroyOverlayWindow (ScreenPtr pScreen); /* * compwindow.c */ #ifdef COMPOSITE_DEBUG void compCheckTree (ScreenPtr pScreen); #else #define compCheckTree(s) #endif PictFormatPtr compWindowFormat (WindowPtr pWin); void compSetPixmap (WindowPtr pWin, PixmapPtr pPixmap); Bool compCheckRedirect (WindowPtr pWin); Bool compPositionWindow (WindowPtr pWin, int x, int y); Bool compRealizeWindow (WindowPtr pWin); Bool compUnrealizeWindow (WindowPtr pWin); void compClipNotify (WindowPtr pWin, int dx, int dy); void compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind); void compResizeWindow (WindowPtr pWin, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib); void compChangeBorderWidth (WindowPtr pWin, unsigned int border_width); void compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent); Bool compCreateWindow (WindowPtr pWin); Bool compDestroyWindow (WindowPtr pWin); void compSetRedirectBorderClip (WindowPtr pWin, RegionPtr pRegion); RegionPtr compGetRedirectBorderClip (WindowPtr pWin); void compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); void compWindowUpdate (WindowPtr pWin); WindowPtr CompositeRealChildHead (WindowPtr pWin); int DeleteWindowNoInputDevices(pointer value, XID wid); #endif /* _COMPINT_H_ */