cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * All Rights Reserved.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Permission is hereby granted, free of charge, to any person obtaining
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * a copy of this software and associated documentation files (the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * "Software"), to deal in the Software without restriction, including
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * without limitation on the rights to use, copy, modify, merge,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * publish, distribute, sublicense, and/or sell copies of the Software,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * and to permit persons to whom the Software is furnished to do so,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * subject to the following conditions:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * The above copyright notice and this permission notice (including the
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * next paragraph) shall be included in all copies or substantial
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * portions of the Software.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * SOFTWARE.
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/*
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Authors:
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Kevin E. Martin <kem@redhat.com>
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync *
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** \file
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync * Interface for GC support. \see dmxgc.c */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#ifndef DMXGC_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMXGC_H
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#include "gcstruct.h"
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** GC private area. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsynctypedef struct _dmxGCPriv {
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync GCOps *ops;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync GCFuncs *funcs;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync XlibGC gc;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync Bool msc;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} dmxGCPrivRec, *dmxGCPrivPtr;
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxInitGC(ScreenPtr pScreen);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxCreateGC(GCPtr pGC);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxValidateGC(GCPtr pGC, unsigned long changes,
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DrawablePtr pDrawable);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxChangeGC(GCPtr pGC, unsigned long mask);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxCopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxDestroyGC(GCPtr pGC);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxDestroyClip(GCPtr pGC);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern void dmxBECreateGC(ScreenPtr pScreen, GCPtr pGC);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncextern Bool dmxBEFreeGC(GCPtr pGC);
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync/** Get private. */
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMX_GET_GC_PRIV(_pGC) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync (dmxGCPrivPtr)dixLookupPrivate(&(_pGC)->devPrivates, dmxGCPrivateKey)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMX_GC_FUNC_PROLOGUE(_pGC) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdo { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DMX_UNWRAP(funcs, _pGCPriv, (_pGC)); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (_pGCPriv->ops) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DMX_UNWRAP(ops, _pGCPriv, (_pGC)); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#define DMX_GC_FUNC_EPILOGUE(_pGC) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsyncdo { \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DMX_WRAP(funcs, &dmxGCFuncs, _pGCPriv, (_pGC)); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync if (_pGCPriv->ops) \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync DMX_WRAP(ops, &dmxGCOps, _pGCPriv, (_pGC)); \
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync} while (0)
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync
cabde247f900dcf6e58d009bbdd15099c028c6fcvboxsync#endif /* DMXGC_H */