2004-07-29 16:42:24 +02:00
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2005-07-03 09:02:09 +02:00
|
|
|
#ifdef HAVE_DIX_CONFIG_H
|
|
|
|
#include <dix-config.h>
|
|
|
|
#endif
|
|
|
|
|
2004-07-29 16:42:24 +02:00
|
|
|
#ifndef _DAMAGESTR_H_
|
|
|
|
#define _DAMAGESTR_H_
|
|
|
|
|
|
|
|
#include "damage.h"
|
2006-01-23 14:54:59 +01:00
|
|
|
#include "gcstruct.h"
|
2007-08-28 15:28:25 +02:00
|
|
|
#include "privates.h"
|
2004-12-03 00:47:39 +01:00
|
|
|
#ifdef RENDER
|
|
|
|
# include "picturestr.h"
|
|
|
|
#endif
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
typedef struct _damage {
|
|
|
|
DamagePtr pNext;
|
|
|
|
DamagePtr pNextWin;
|
|
|
|
RegionRec damage;
|
|
|
|
|
|
|
|
DamageReportLevel damageLevel;
|
|
|
|
Bool isInternal;
|
|
|
|
void *closure;
|
|
|
|
Bool isWindow;
|
|
|
|
DrawablePtr pDrawable;
|
|
|
|
|
|
|
|
DamageReportFunc damageReport;
|
2008-08-30 00:37:11 +02:00
|
|
|
DamageReportFunc damageReportPostRendering;
|
2004-07-29 16:42:24 +02:00
|
|
|
DamageDestroyFunc damageDestroy;
|
2008-08-30 00:37:11 +02:00
|
|
|
DamageMarkerFunc damageMarker;
|
2006-06-12 20:12:31 +02:00
|
|
|
|
|
|
|
Bool reportAfter;
|
2008-08-30 00:37:11 +02:00
|
|
|
RegionRec pendingDamage; /* will be flushed post submission at the latest */
|
|
|
|
RegionRec backupDamage; /* for use with damageMarker */
|
2009-07-18 00:10:32 +02:00
|
|
|
ScreenPtr pScreen;
|
2004-07-29 16:42:24 +02:00
|
|
|
} DamageRec;
|
|
|
|
|
|
|
|
typedef struct _damageScrPriv {
|
|
|
|
int internalLevel;
|
|
|
|
|
2004-08-12 00:40:14 +02:00
|
|
|
/*
|
|
|
|
* For DDXen which don't provide GetScreenPixmap, this provides
|
|
|
|
* a place to hook damage for windows on the screen
|
|
|
|
*/
|
|
|
|
DamagePtr pScreenDamage;
|
|
|
|
|
2004-07-29 16:42:24 +02:00
|
|
|
CopyWindowProcPtr CopyWindow;
|
|
|
|
CloseScreenProcPtr CloseScreen;
|
|
|
|
CreateGCProcPtr CreateGC;
|
|
|
|
DestroyPixmapProcPtr DestroyPixmap;
|
|
|
|
SetWindowPixmapProcPtr SetWindowPixmap;
|
|
|
|
DestroyWindowProcPtr DestroyWindow;
|
|
|
|
#ifdef RENDER
|
|
|
|
CompositeProcPtr Composite;
|
|
|
|
GlyphsProcPtr Glyphs;
|
2008-04-04 21:11:14 +02:00
|
|
|
AddTrapsProcPtr AddTraps;
|
2004-07-29 16:42:24 +02:00
|
|
|
#endif
|
2009-07-18 00:10:32 +02:00
|
|
|
|
|
|
|
/* Table of wrappable function pointers */
|
|
|
|
DamageScreenFuncsRec funcs;
|
2004-07-29 16:42:24 +02:00
|
|
|
} DamageScrPrivRec, *DamageScrPrivPtr;
|
|
|
|
|
|
|
|
typedef struct _damageGCPriv {
|
|
|
|
GCOps *ops;
|
|
|
|
GCFuncs *funcs;
|
|
|
|
} DamageGCPrivRec, *DamageGCPrivPtr;
|
|
|
|
|
2007-03-25 18:27:01 +02:00
|
|
|
/* XXX should move these into damage.c, damageScrPrivateIndex is static */
|
2007-08-28 15:28:25 +02:00
|
|
|
#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \
|
|
|
|
dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey))
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
#define damageScrPriv(pScr) \
|
|
|
|
DamageScrPrivPtr pScrPriv = damageGetScrPriv(pScr)
|
|
|
|
|
|
|
|
#define damageGetPixPriv(pPix) \
|
2007-08-28 15:28:25 +02:00
|
|
|
dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey)
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
#define damgeSetPixPriv(pPix,v) \
|
2007-08-28 15:28:25 +02:00
|
|
|
dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v)
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
#define damagePixPriv(pPix) \
|
|
|
|
DamagePtr pDamage = damageGetPixPriv(pPix)
|
|
|
|
|
|
|
|
#define damageGetGCPriv(pGC) \
|
2007-08-28 15:28:25 +02:00
|
|
|
dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey)
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
#define damageGCPriv(pGC) \
|
|
|
|
DamageGCPrivPtr pGCPriv = damageGetGCPriv(pGC)
|
|
|
|
|
|
|
|
#define damageGetWinPriv(pWin) \
|
2007-08-28 15:28:25 +02:00
|
|
|
((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey))
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
#define damageSetWinPriv(pWin,d) \
|
2007-08-28 15:28:25 +02:00
|
|
|
dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d)
|
2004-07-29 16:42:24 +02:00
|
|
|
|
|
|
|
#endif /* _DAMAGESTR_H_ */
|