1706f2543Smrg/* 2706f2543Smrg * Copyright © 2003 Keith Packard 3706f2543Smrg * 4706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its 5706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that 6706f2543Smrg * the above copyright notice appear in all copies and that both that 7706f2543Smrg * copyright notice and this permission notice appear in supporting 8706f2543Smrg * documentation, and that the name of Keith Packard not be used in 9706f2543Smrg * advertising or publicity pertaining to distribution of the software without 10706f2543Smrg * specific, written prior permission. Keith Packard makes no 11706f2543Smrg * representations about the suitability of this software for any purpose. It 12706f2543Smrg * is provided "as is" without express or implied warranty. 13706f2543Smrg * 14706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20706f2543Smrg * PERFORMANCE OF THIS SOFTWARE. 21706f2543Smrg */ 22706f2543Smrg 23706f2543Smrg#ifdef HAVE_DIX_CONFIG_H 24706f2543Smrg#include <dix-config.h> 25706f2543Smrg#endif 26706f2543Smrg 27706f2543Smrg#ifndef _DAMAGESTR_H_ 28706f2543Smrg#define _DAMAGESTR_H_ 29706f2543Smrg 30706f2543Smrg#include "damage.h" 31706f2543Smrg#include "gcstruct.h" 32706f2543Smrg#include "privates.h" 33706f2543Smrg# include "picturestr.h" 34706f2543Smrg 35706f2543Smrgtypedef struct _damage { 36706f2543Smrg DamagePtr pNext; 37706f2543Smrg DamagePtr pNextWin; 38706f2543Smrg RegionRec damage; 39706f2543Smrg 40706f2543Smrg DamageReportLevel damageLevel; 41706f2543Smrg Bool isInternal; 42706f2543Smrg void *closure; 43706f2543Smrg Bool isWindow; 44706f2543Smrg DrawablePtr pDrawable; 45706f2543Smrg 46706f2543Smrg DamageReportFunc damageReport; 47706f2543Smrg DamageReportFunc damageReportPostRendering; 48706f2543Smrg DamageDestroyFunc damageDestroy; 49706f2543Smrg DamageMarkerFunc damageMarker; 50706f2543Smrg 51706f2543Smrg Bool reportAfter; 52706f2543Smrg RegionRec pendingDamage; /* will be flushed post submission at the latest */ 53706f2543Smrg RegionRec backupDamage; /* for use with damageMarker */ 54706f2543Smrg ScreenPtr pScreen; 55706f2543Smrg PrivateRec *devPrivates; 56706f2543Smrg} DamageRec; 57706f2543Smrg 58706f2543Smrgtypedef struct _damageScrPriv { 59706f2543Smrg int internalLevel; 60706f2543Smrg 61706f2543Smrg /* 62706f2543Smrg * For DDXen which don't provide GetScreenPixmap, this provides 63706f2543Smrg * a place to hook damage for windows on the screen 64706f2543Smrg */ 65706f2543Smrg DamagePtr pScreenDamage; 66706f2543Smrg 67706f2543Smrg CopyWindowProcPtr CopyWindow; 68706f2543Smrg CloseScreenProcPtr CloseScreen; 69706f2543Smrg CreateGCProcPtr CreateGC; 70706f2543Smrg DestroyPixmapProcPtr DestroyPixmap; 71706f2543Smrg SetWindowPixmapProcPtr SetWindowPixmap; 72706f2543Smrg DestroyWindowProcPtr DestroyWindow; 73706f2543Smrg CompositeProcPtr Composite; 74706f2543Smrg GlyphsProcPtr Glyphs; 75706f2543Smrg AddTrapsProcPtr AddTraps; 76706f2543Smrg 77706f2543Smrg /* Table of wrappable function pointers */ 78706f2543Smrg DamageScreenFuncsRec funcs; 79706f2543Smrg} DamageScrPrivRec, *DamageScrPrivPtr; 80706f2543Smrg 81706f2543Smrgtypedef struct _damageGCPriv { 82706f2543Smrg GCOps *ops; 83706f2543Smrg GCFuncs *funcs; 84706f2543Smrg} DamageGCPrivRec, *DamageGCPrivPtr; 85706f2543Smrg 86706f2543Smrg/* XXX should move these into damage.c, damageScrPrivateIndex is static */ 87706f2543Smrg#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \ 88706f2543Smrg dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey)) 89706f2543Smrg 90706f2543Smrg#define damageScrPriv(pScr) \ 91706f2543Smrg DamageScrPrivPtr pScrPriv = damageGetScrPriv(pScr) 92706f2543Smrg 93706f2543Smrg#define damageGetPixPriv(pPix) \ 94706f2543Smrg dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey) 95706f2543Smrg 96706f2543Smrg#define damgeSetPixPriv(pPix,v) \ 97706f2543Smrg dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v) 98706f2543Smrg 99706f2543Smrg#define damagePixPriv(pPix) \ 100706f2543Smrg DamagePtr pDamage = damageGetPixPriv(pPix) 101706f2543Smrg 102706f2543Smrg#define damageGetGCPriv(pGC) \ 103706f2543Smrg dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey) 104706f2543Smrg 105706f2543Smrg#define damageGCPriv(pGC) \ 106706f2543Smrg DamageGCPrivPtr pGCPriv = damageGetGCPriv(pGC) 107706f2543Smrg 108706f2543Smrg#define damageGetWinPriv(pWin) \ 109706f2543Smrg ((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey)) 110706f2543Smrg 111706f2543Smrg#define damageSetWinPriv(pWin,d) \ 112706f2543Smrg dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d) 113706f2543Smrg 114706f2543Smrg#endif /* _DAMAGESTR_H_ */ 115