1/* 2 * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 * 23 * Copyright © 2003 Keith Packard 24 * 25 * Permission to use, copy, modify, distribute, and sell this software and its 26 * documentation for any purpose is hereby granted without fee, provided that 27 * the above copyright notice appear in all copies and that both that 28 * copyright notice and this permission notice appear in supporting 29 * documentation, and that the name of Keith Packard not be used in 30 * advertising or publicity pertaining to distribution of the software without 31 * specific, written prior permission. Keith Packard makes no 32 * representations about the suitability of this software for any purpose. It 33 * is provided "as is" without express or implied warranty. 34 * 35 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 36 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 37 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 38 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 39 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 40 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 41 * PERFORMANCE OF THIS SOFTWARE. 42 */ 43 44#ifdef HAVE_DIX_CONFIG_H 45#include <dix-config.h> 46#endif 47 48#ifndef _COMPINT_H_ 49#define _COMPINT_H_ 50 51#include "misc.h" 52#include "scrnintstr.h" 53#include "os.h" 54#include "regionstr.h" 55#include "validate.h" 56#include "windowstr.h" 57#include "input.h" 58#include "resource.h" 59#include "colormapst.h" 60#include "cursorstr.h" 61#include "dixstruct.h" 62#include "gcstruct.h" 63#include "servermd.h" 64#include "dixevents.h" 65#include "globals.h" 66#include "picturestr.h" 67#include "extnsionst.h" 68#include "privates.h" 69#include "mi.h" 70#include "damage.h" 71#include "damageextint.h" 72#include "xfixes.h" 73#include <X11/extensions/compositeproto.h> 74#include <assert.h> 75 76/* 77 * enable this for debugging 78 79 #define COMPOSITE_DEBUG 80 */ 81 82typedef struct _CompClientWindow { 83 struct _CompClientWindow *next; 84 XID id; 85 int update; 86} CompClientWindowRec, *CompClientWindowPtr; 87 88typedef struct _CompWindow { 89 RegionRec borderClip; 90 DamagePtr damage; /* for automatic update mode */ 91 Bool damageRegistered; 92 Bool damaged; 93 int update; 94 CompClientWindowPtr clients; 95 int oldx; 96 int oldy; 97 PixmapPtr pOldPixmap; 98 int borderClipX, borderClipY; 99} CompWindowRec, *CompWindowPtr; 100 101#define COMP_ORIGIN_INVALID 0x80000000 102 103typedef struct _CompSubwindows { 104 int update; 105 CompClientWindowPtr clients; 106} CompSubwindowsRec, *CompSubwindowsPtr; 107 108#ifndef COMP_INCLUDE_RGB24_VISUAL 109#define COMP_INCLUDE_RGB24_VISUAL 0 110#endif 111 112typedef struct _CompOverlayClientRec *CompOverlayClientPtr; 113 114typedef struct _CompOverlayClientRec { 115 CompOverlayClientPtr pNext; 116 ClientPtr pClient; 117 ScreenPtr pScreen; 118 XID resource; 119} CompOverlayClientRec; 120 121typedef struct _CompScreen { 122 PositionWindowProcPtr PositionWindow; 123 CopyWindowProcPtr CopyWindow; 124 CreateWindowProcPtr CreateWindow; 125 DestroyWindowProcPtr DestroyWindow; 126 RealizeWindowProcPtr RealizeWindow; 127 UnrealizeWindowProcPtr UnrealizeWindow; 128 ClipNotifyProcPtr ClipNotify; 129 /* 130 * Called from ConfigureWindow, these 131 * three track changes to the offscreen storage 132 * geometry 133 */ 134 ConfigNotifyProcPtr ConfigNotify; 135 MoveWindowProcPtr MoveWindow; 136 ResizeWindowProcPtr ResizeWindow; 137 ChangeBorderWidthProcPtr ChangeBorderWidth; 138 /* 139 * Reparenting has an effect on Subwindows redirect 140 */ 141 ReparentWindowProcPtr ReparentWindow; 142 143 /* 144 * Colormaps for new visuals better not get installed 145 */ 146 InstallColormapProcPtr InstallColormap; 147 148 /* 149 * Fake backing store via automatic redirection 150 */ 151 ChangeWindowAttributesProcPtr ChangeWindowAttributes; 152 153 ScreenBlockHandlerProcPtr BlockHandler; 154 CloseScreenProcPtr CloseScreen; 155 int numAlternateVisuals; 156 VisualID *alternateVisuals; 157 158 WindowPtr pOverlayWin; 159 Window overlayWid; 160 CompOverlayClientPtr pOverlayClients; 161 162 GetImageProcPtr GetImage; 163 SourceValidateProcPtr SourceValidate; 164} CompScreenRec, *CompScreenPtr; 165 166extern DevPrivateKeyRec CompScreenPrivateKeyRec; 167#define CompScreenPrivateKey (&CompScreenPrivateKeyRec) 168 169extern DevPrivateKeyRec CompWindowPrivateKeyRec; 170#define CompWindowPrivateKey (&CompWindowPrivateKeyRec) 171 172extern DevPrivateKeyRec CompSubwindowsPrivateKeyRec; 173#define CompSubwindowsPrivateKey (&CompSubwindowsPrivateKeyRec) 174 175#define GetCompScreen(s) ((CompScreenPtr) \ 176 dixLookupPrivate(&(s)->devPrivates, CompScreenPrivateKey)) 177#define GetCompWindow(w) ((CompWindowPtr) \ 178 dixLookupPrivate(&(w)->devPrivates, CompWindowPrivateKey)) 179#define GetCompSubwindows(w) ((CompSubwindowsPtr) \ 180 dixLookupPrivate(&(w)->devPrivates, CompSubwindowsPrivateKey)) 181 182extern RESTYPE CompositeClientWindowType; 183extern RESTYPE CompositeClientSubwindowsType; 184extern RESTYPE CompositeClientOverlayType; 185 186/* 187 * compalloc.c 188 */ 189 190Bool 191compRedirectWindow (ClientPtr pClient, WindowPtr pWin, int update); 192 193void 194compFreeClientWindow (WindowPtr pWin, XID id); 195 196int 197compUnredirectWindow (ClientPtr pClient, WindowPtr pWin, int update); 198 199int 200compRedirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update); 201 202void 203compFreeClientSubwindows (WindowPtr pWin, XID id); 204 205int 206compUnredirectSubwindows (ClientPtr pClient, WindowPtr pWin, int update); 207 208int 209compRedirectOneSubwindow (WindowPtr pParent, WindowPtr pWin); 210 211int 212compUnredirectOneSubwindow (WindowPtr pParent, WindowPtr pWin); 213 214Bool 215compAllocPixmap (WindowPtr pWin); 216 217void 218compFreePixmap (WindowPtr pWin); 219 220Bool 221compReallocPixmap (WindowPtr pWin, int x, int y, 222 unsigned int w, unsigned int h, int bw); 223 224/* 225 * compext.c 226 */ 227 228void 229CompositeExtensionInit (void); 230 231/* 232 * compinit.c 233 */ 234 235Bool 236compScreenInit (ScreenPtr pScreen); 237 238/* 239 * compoverlay.c 240 */ 241 242void 243compFreeOverlayClient (CompOverlayClientPtr pOcToDel); 244 245CompOverlayClientPtr 246compFindOverlayClient (ScreenPtr pScreen, ClientPtr pClient); 247 248CompOverlayClientPtr 249compCreateOverlayClient (ScreenPtr pScreen, ClientPtr pClient); 250 251Bool 252compCreateOverlayWindow (ScreenPtr pScreen); 253 254void 255compDestroyOverlayWindow (ScreenPtr pScreen); 256 257/* 258 * compwindow.c 259 */ 260 261#ifdef COMPOSITE_DEBUG 262void 263compCheckTree (ScreenPtr pScreen); 264#else 265#define compCheckTree(s) 266#endif 267 268PictFormatPtr 269compWindowFormat (WindowPtr pWin); 270 271void 272compSetPixmap (WindowPtr pWin, PixmapPtr pPixmap); 273 274Bool 275compCheckRedirect (WindowPtr pWin); 276 277Bool 278compPositionWindow (WindowPtr pWin, int x, int y); 279 280Bool 281compRealizeWindow (WindowPtr pWin); 282 283Bool 284compUnrealizeWindow (WindowPtr pWin); 285 286void 287compClipNotify (WindowPtr pWin, int dx, int dy); 288 289void 290compMoveWindow (WindowPtr pWin, int x, int y, WindowPtr pSib, VTKind kind); 291 292void 293compResizeWindow (WindowPtr pWin, int x, int y, 294 unsigned int w, unsigned int h, WindowPtr pSib); 295 296void 297compChangeBorderWidth (WindowPtr pWin, unsigned int border_width); 298 299void 300compReparentWindow (WindowPtr pWin, WindowPtr pPriorParent); 301 302Bool 303compCreateWindow (WindowPtr pWin); 304 305Bool 306compDestroyWindow (WindowPtr pWin); 307 308void 309compSetRedirectBorderClip (WindowPtr pWin, RegionPtr pRegion); 310 311RegionPtr 312compGetRedirectBorderClip (WindowPtr pWin); 313 314void 315compCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); 316 317void 318compPaintChildrenToWindow (WindowPtr pWin); 319 320WindowPtr 321CompositeRealChildHead (WindowPtr pWin); 322 323int 324DeleteWindowNoInputDevices(pointer value, XID wid); 325 326int 327compConfigNotify(WindowPtr pWin, int x, int y, int w, int h, 328 int bw, WindowPtr pSib); 329 330void PanoramiXCompositeInit (void); 331void PanoramiXCompositeReset (void); 332 333#endif /* _COMPINT_H_ */ 334