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