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