damagestr.h revision 4642e01f
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"
3305b261ecSmrg#ifdef RENDER
3405b261ecSmrg# include "picturestr.h"
3505b261ecSmrg#endif
3605b261ecSmrg
3705b261ecSmrgtypedef struct _damage {
3805b261ecSmrg    DamagePtr		pNext;
3905b261ecSmrg    DamagePtr		pNextWin;
4005b261ecSmrg    RegionRec		damage;
4105b261ecSmrg
4205b261ecSmrg    DamageReportLevel	damageLevel;
4305b261ecSmrg    Bool		isInternal;
4405b261ecSmrg    void		*closure;
4505b261ecSmrg    Bool		isWindow;
4605b261ecSmrg    DrawablePtr		pDrawable;
4705b261ecSmrg
4805b261ecSmrg    DamageReportFunc	damageReport;
494642e01fSmrg    DamageReportFunc	damageReportPostRendering;
5005b261ecSmrg    DamageDestroyFunc	damageDestroy;
514642e01fSmrg    DamageMarkerFunc	damageMarker;
5205b261ecSmrg
5305b261ecSmrg    Bool		reportAfter;
544642e01fSmrg    RegionRec		pendingDamage; /* will be flushed post submission at the latest */
554642e01fSmrg    RegionRec		backupDamage; /* for use with damageMarker */
5605b261ecSmrg} DamageRec;
5705b261ecSmrg
5805b261ecSmrgtypedef struct _damageScrPriv {
5905b261ecSmrg    int				internalLevel;
6005b261ecSmrg
6105b261ecSmrg    /*
6205b261ecSmrg     * For DDXen which don't provide GetScreenPixmap, this provides
6305b261ecSmrg     * a place to hook damage for windows on the screen
6405b261ecSmrg     */
6505b261ecSmrg    DamagePtr			pScreenDamage;
6605b261ecSmrg
6705b261ecSmrg    CopyWindowProcPtr		CopyWindow;
6805b261ecSmrg    CloseScreenProcPtr		CloseScreen;
6905b261ecSmrg    CreateGCProcPtr		CreateGC;
7005b261ecSmrg    DestroyPixmapProcPtr	DestroyPixmap;
7105b261ecSmrg    SetWindowPixmapProcPtr	SetWindowPixmap;
7205b261ecSmrg    DestroyWindowProcPtr	DestroyWindow;
7305b261ecSmrg#ifdef RENDER
7405b261ecSmrg    CompositeProcPtr		Composite;
7505b261ecSmrg    GlyphsProcPtr		Glyphs;
764642e01fSmrg    AddTrapsProcPtr		AddTraps;
7705b261ecSmrg#endif
7805b261ecSmrg} DamageScrPrivRec, *DamageScrPrivPtr;
7905b261ecSmrg
8005b261ecSmrgtypedef struct _damageGCPriv {
8105b261ecSmrg    GCOps   *ops;
8205b261ecSmrg    GCFuncs *funcs;
8305b261ecSmrg} DamageGCPrivRec, *DamageGCPrivPtr;
8405b261ecSmrg
8505b261ecSmrg/* XXX should move these into damage.c, damageScrPrivateIndex is static */
864642e01fSmrg#define damageGetScrPriv(pScr) ((DamageScrPrivPtr) \
874642e01fSmrg    dixLookupPrivate(&(pScr)->devPrivates, damageScrPrivateKey))
8805b261ecSmrg
8905b261ecSmrg#define damageScrPriv(pScr) \
9005b261ecSmrg    DamageScrPrivPtr    pScrPriv = damageGetScrPriv(pScr)
9105b261ecSmrg
9205b261ecSmrg#define damageGetPixPriv(pPix) \
934642e01fSmrg    dixLookupPrivate(&(pPix)->devPrivates, damagePixPrivateKey)
9405b261ecSmrg
9505b261ecSmrg#define damgeSetPixPriv(pPix,v) \
964642e01fSmrg    dixSetPrivate(&(pPix)->devPrivates, damagePixPrivateKey, v)
9705b261ecSmrg
9805b261ecSmrg#define damagePixPriv(pPix) \
9905b261ecSmrg    DamagePtr	    pDamage = damageGetPixPriv(pPix)
10005b261ecSmrg
10105b261ecSmrg#define damageGetGCPriv(pGC) \
1024642e01fSmrg    dixLookupPrivate(&(pGC)->devPrivates, damageGCPrivateKey)
10305b261ecSmrg
10405b261ecSmrg#define damageGCPriv(pGC) \
10505b261ecSmrg    DamageGCPrivPtr  pGCPriv = damageGetGCPriv(pGC)
10605b261ecSmrg
10705b261ecSmrg#define damageGetWinPriv(pWin) \
1084642e01fSmrg    ((DamagePtr)dixLookupPrivate(&(pWin)->devPrivates, damageWinPrivateKey))
10905b261ecSmrg
11005b261ecSmrg#define damageSetWinPriv(pWin,d) \
1114642e01fSmrg    dixSetPrivate(&(pWin)->devPrivates, damageWinPrivateKey, d)
11205b261ecSmrg
11305b261ecSmrg#endif /* _DAMAGESTR_H_ */
114