1706f2543Smrg/*
2706f2543Smrg * Copyright © 2003 Keith Packard
3706f2543Smrg *
4706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its
5706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that
6706f2543Smrg * the above copyright notice appear in all copies and that both that
7706f2543Smrg * copyright notice and this permission notice appear in supporting
8706f2543Smrg * documentation, and that the name of Keith Packard not be used in
9706f2543Smrg * advertising or publicity pertaining to distribution of the software without
10706f2543Smrg * specific, written prior permission.  Keith Packard makes no
11706f2543Smrg * representations about the suitability of this software for any purpose.  It
12706f2543Smrg * is provided "as is" without express or implied warranty.
13706f2543Smrg *
14706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20706f2543Smrg * PERFORMANCE OF THIS SOFTWARE.
21706f2543Smrg */
22706f2543Smrg
23706f2543Smrg#ifdef HAVE_DIX_CONFIG_H
24706f2543Smrg#include <dix-config.h>
25706f2543Smrg#endif
26706f2543Smrg
27706f2543Smrg#ifndef _DAMAGESTR_H_
28706f2543Smrg#define _DAMAGESTR_H_
29706f2543Smrg
30706f2543Smrg#include "damage.h"
31706f2543Smrg#include "gcstruct.h"
32706f2543Smrg#include "privates.h"
33706f2543Smrg# include "picturestr.h"
34706f2543Smrg
35706f2543Smrgtypedef struct _damage {
36706f2543Smrg    DamagePtr		pNext;
37706f2543Smrg    DamagePtr		pNextWin;
38706f2543Smrg    RegionRec		damage;
39706f2543Smrg
40706f2543Smrg    DamageReportLevel	damageLevel;
41706f2543Smrg    Bool		isInternal;
42706f2543Smrg    void		*closure;
43706f2543Smrg    Bool		isWindow;
44706f2543Smrg    DrawablePtr		pDrawable;
45706f2543Smrg
46706f2543Smrg    DamageReportFunc	damageReport;
47706f2543Smrg    DamageReportFunc	damageReportPostRendering;
48706f2543Smrg    DamageDestroyFunc	damageDestroy;
49706f2543Smrg    DamageMarkerFunc	damageMarker;
50706f2543Smrg
51706f2543Smrg    Bool		reportAfter;
52706f2543Smrg    RegionRec		pendingDamage; /* will be flushed post submission at the latest */
53706f2543Smrg    RegionRec		backupDamage; /* for use with damageMarker */
54706f2543Smrg    ScreenPtr		pScreen;
55706f2543Smrg    PrivateRec		*devPrivates;
56706f2543Smrg} DamageRec;
57706f2543Smrg
58706f2543Smrgtypedef struct _damageScrPriv {
59706f2543Smrg    int				internalLevel;
60706f2543Smrg
61706f2543Smrg    /*
62706f2543Smrg     * For DDXen which don't provide GetScreenPixmap, this provides
63706f2543Smrg     * a place to hook damage for windows on the screen
64706f2543Smrg     */
65706f2543Smrg    DamagePtr			pScreenDamage;
66706f2543Smrg
67706f2543Smrg    CopyWindowProcPtr		CopyWindow;
68706f2543Smrg    CloseScreenProcPtr		CloseScreen;
69706f2543Smrg    CreateGCProcPtr		CreateGC;
70706f2543Smrg    DestroyPixmapProcPtr	DestroyPixmap;
71706f2543Smrg    SetWindowPixmapProcPtr	SetWindowPixmap;
72706f2543Smrg    DestroyWindowProcPtr	DestroyWindow;
73706f2543Smrg    CompositeProcPtr		Composite;
74706f2543Smrg    GlyphsProcPtr		Glyphs;
75706f2543Smrg    AddTrapsProcPtr		AddTraps;
76706f2543Smrg
77706f2543Smrg    /* Table of wrappable function pointers */
78706f2543Smrg    DamageScreenFuncsRec	funcs;
79706f2543Smrg} DamageScrPrivRec, *DamageScrPrivPtr;
80706f2543Smrg
81706f2543Smrgtypedef struct _damageGCPriv {
82706f2543Smrg    GCOps   *ops;
83706f2543Smrg    GCFuncs *funcs;
84706f2543Smrg} DamageGCPrivRec, *DamageGCPrivPtr;
85706f2543Smrg
86706f2543Smrg/* XXX should move these into damage.c, damageScrPrivateIndex is static */
87706f2543Smrg#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \
88706f2543Smrg    dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey))
89706f2543Smrg
90706f2543Smrg#define damageScrPriv(pScr) \
91706f2543Smrg    DamageScrPrivPtr    pScrPriv = damageGetScrPriv(pScr)
92706f2543Smrg
93706f2543Smrg#define damageGetPixPriv(pPix) \
94706f2543Smrg    dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey)
95706f2543Smrg
96706f2543Smrg#define damgeSetPixPriv(pPix,v) \
97706f2543Smrg    dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v)
98706f2543Smrg
99706f2543Smrg#define damagePixPriv(pPix) \
100706f2543Smrg    DamagePtr	    pDamage = damageGetPixPriv(pPix)
101706f2543Smrg
102706f2543Smrg#define damageGetGCPriv(pGC) \
103706f2543Smrg    dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey)
104706f2543Smrg
105706f2543Smrg#define damageGCPriv(pGC) \
106706f2543Smrg    DamageGCPrivPtr  pGCPriv = damageGetGCPriv(pGC)
107706f2543Smrg
108706f2543Smrg#define damageGetWinPriv(pWin) \
109706f2543Smrg    ((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey))
110706f2543Smrg
111706f2543Smrg#define damageSetWinPriv(pWin,d) \
112706f2543Smrg    dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d)
113706f2543Smrg
114706f2543Smrg#endif /* _DAMAGESTR_H_ */
115