a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/*
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Copyright © 2003 Keith Packard
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * Permission to use, copy, modify, distribute, and sell this software and its
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * documentation for any purpose is hereby granted without fee, provided that
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * the above copyright notice appear in all copies and that both that
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * copyright notice and this permission notice appear in supporting
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * documentation, and that the name of Keith Packard not be used in
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * advertising or publicity pertaining to distribution of the software without
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * specific, written prior permission. Keith Packard makes no
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * representations about the suitability of this software for any purpose. It
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * is provided "as is" without express or implied warranty.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync *
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * PERFORMANCE OF THIS SOFTWARE.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#ifdef HAVE_DIX_CONFIG_H
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include <dix-config.h>
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#endif
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#ifndef _DAMAGESTR_H_
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define _DAMAGESTR_H_
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "damage.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "gcstruct.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "privates.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#include "picturestr.h"
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct _damage {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamagePtr pNext;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamagePtr pNextWin;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync RegionRec damage;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportLevel damageLevel;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync Bool isInternal;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync void *closure;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync Bool isWindow;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DrawablePtr pDrawable;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageReportFunc damageReport;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageDestroyFunc damageDestroy;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync Bool reportAfter;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync RegionRec pendingDamage; /* will be flushed post submission at the latest */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync ScreenPtr pScreen;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync PrivateRec *devPrivates;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} DamageRec;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct _damageScrPriv {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int internalLevel;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /*
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * For DDXen which don't provide GetScreenPixmap, this provides
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync * a place to hook damage for windows on the screen
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamagePtr pScreenDamage;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CopyWindowProcPtr CopyWindow;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CloseScreenProcPtr CloseScreen;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CreateGCProcPtr CreateGC;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DestroyPixmapProcPtr DestroyPixmap;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync SetWindowPixmapProcPtr SetWindowPixmap;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DestroyWindowProcPtr DestroyWindow;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync CompositeProcPtr Composite;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync GlyphsProcPtr Glyphs;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync AddTrapsProcPtr AddTraps;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync /* Table of wrappable function pointers */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageScreenFuncsRec funcs;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} DamageScrPrivRec, *DamageScrPrivPtr;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct _damageGCPriv {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync const GCOps *ops;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync const GCFuncs *funcs;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} DamageGCPrivRec, *DamageGCPrivPtr;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* XXX should move these into damage.c, damageScrPrivateIndex is static */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageScrPriv(pScr) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageScrPrivPtr pScrPriv = damageGetScrPriv(pScr)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageGetPixPriv(pPix) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damgeSetPixPriv(pPix,v) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damagePixPriv(pPix) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamagePtr pDamage = damageGetPixPriv(pPix)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageGetGCPriv(pGC) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageGCPriv(pGC) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync DamageGCPrivPtr pGCPriv = damageGetGCPriv(pGC)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageGetWinPriv(pWin) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync ((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define damageSetWinPriv(pWin,d) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d)
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#endif /* _DAMAGESTR_H_ */