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