105b261ecSmrg/*
205b261ecSmrg * Copyright © 2003 Keith Packard
305b261ecSmrg *
405b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
505b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
605b261ecSmrg * the above copyright notice appear in all copies and that both that
705b261ecSmrg * copyright notice and this permission notice appear in supporting
805b261ecSmrg * documentation, and that the name of Keith Packard not be used in
905b261ecSmrg * advertising or publicity pertaining to distribution of the software without
1005b261ecSmrg * specific, written prior permission.  Keith Packard makes no
1105b261ecSmrg * representations about the suitability of this software for any purpose.  It
1205b261ecSmrg * is provided "as is" without express or implied warranty.
1305b261ecSmrg *
1405b261ecSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1505b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1605b261ecSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1705b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1805b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1905b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2005b261ecSmrg * PERFORMANCE OF THIS SOFTWARE.
2105b261ecSmrg */
2205b261ecSmrg
2305b261ecSmrg#ifdef HAVE_DIX_CONFIG_H
2405b261ecSmrg#include <dix-config.h>
2505b261ecSmrg#endif
2605b261ecSmrg
2705b261ecSmrg#ifndef _DAMAGESTR_H_
2805b261ecSmrg#define _DAMAGESTR_H_
2905b261ecSmrg
3005b261ecSmrg#include "damage.h"
3105b261ecSmrg#include "gcstruct.h"
324642e01fSmrg#include "privates.h"
3335c4bbdfSmrg#include "picturestr.h"
3405b261ecSmrg
3505b261ecSmrgtypedef struct _damage {
3635c4bbdfSmrg    DamagePtr pNext;
3735c4bbdfSmrg    DamagePtr pNextWin;
3835c4bbdfSmrg    RegionRec damage;
3935c4bbdfSmrg
4035c4bbdfSmrg    DamageReportLevel damageLevel;
4135c4bbdfSmrg    Bool isInternal;
4235c4bbdfSmrg    void *closure;
4335c4bbdfSmrg    Bool isWindow;
4435c4bbdfSmrg    DrawablePtr pDrawable;
4535c4bbdfSmrg
4635c4bbdfSmrg    DamageReportFunc damageReport;
4735c4bbdfSmrg    DamageDestroyFunc damageDestroy;
4835c4bbdfSmrg
4935c4bbdfSmrg    Bool reportAfter;
5035c4bbdfSmrg    RegionRec pendingDamage;    /* will be flushed post submission at the latest */
5135c4bbdfSmrg    ScreenPtr pScreen;
5205b261ecSmrg} DamageRec;
5305b261ecSmrg
5405b261ecSmrgtypedef struct _damageScrPriv {
5535c4bbdfSmrg    int internalLevel;
5605b261ecSmrg
5705b261ecSmrg    /*
5805b261ecSmrg     * For DDXen which don't provide GetScreenPixmap, this provides
5905b261ecSmrg     * a place to hook damage for windows on the screen
6005b261ecSmrg     */
6135c4bbdfSmrg    DamagePtr pScreenDamage;
6235c4bbdfSmrg
6335c4bbdfSmrg    CopyWindowProcPtr CopyWindow;
6435c4bbdfSmrg    CloseScreenProcPtr CloseScreen;
6535c4bbdfSmrg    CreateGCProcPtr CreateGC;
6635c4bbdfSmrg    DestroyPixmapProcPtr DestroyPixmap;
6735c4bbdfSmrg    SetWindowPixmapProcPtr SetWindowPixmap;
6835c4bbdfSmrg    DestroyWindowProcPtr DestroyWindow;
6935c4bbdfSmrg    CompositeProcPtr Composite;
7035c4bbdfSmrg    GlyphsProcPtr Glyphs;
7135c4bbdfSmrg    AddTrapsProcPtr AddTraps;
726747b715Smrg
736747b715Smrg    /* Table of wrappable function pointers */
7435c4bbdfSmrg    DamageScreenFuncsRec funcs;
7505b261ecSmrg} DamageScrPrivRec, *DamageScrPrivPtr;
7605b261ecSmrg
7705b261ecSmrgtypedef struct _damageGCPriv {
7835c4bbdfSmrg    const GCOps *ops;
7935c4bbdfSmrg    const GCFuncs *funcs;
8005b261ecSmrg} DamageGCPrivRec, *DamageGCPrivPtr;
8105b261ecSmrg
8205b261ecSmrg/* XXX should move these into damage.c, damageScrPrivateIndex is static */
834642e01fSmrg#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \
844642e01fSmrg    dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey))
8505b261ecSmrg
8605b261ecSmrg#define damageScrPriv(pScr) \
8705b261ecSmrg    DamageScrPrivPtr    pScrPriv = damageGetScrPriv(pScr)
8805b261ecSmrg
8905b261ecSmrg#define damageGetPixPriv(pPix) \
904642e01fSmrg    dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey)
9105b261ecSmrg
9205b261ecSmrg#define damgeSetPixPriv(pPix,v) \
934642e01fSmrg    dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v)
9405b261ecSmrg
9505b261ecSmrg#define damagePixPriv(pPix) \
9605b261ecSmrg    DamagePtr	    pDamage = damageGetPixPriv(pPix)
9705b261ecSmrg
9805b261ecSmrg#define damageGetGCPriv(pGC) \
994642e01fSmrg    dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey)
10005b261ecSmrg
10105b261ecSmrg#define damageGCPriv(pGC) \
10205b261ecSmrg    DamageGCPrivPtr  pGCPriv = damageGetGCPriv(pGC)
10305b261ecSmrg
10405b261ecSmrg#define damageGetWinPriv(pWin) \
1054642e01fSmrg    ((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey))
10605b261ecSmrg
10705b261ecSmrg#define damageSetWinPriv(pWin,d) \
1084642e01fSmrg    dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d)
10905b261ecSmrg
11035c4bbdfSmrg#endif                          /* _DAMAGESTR_H_ */
111