00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00037 #ifndef DMXGC_H
00038 #define DMXGC_H
00039
00040 #include "gcstruct.h"
00041
00043 typedef struct _dmxGCPriv {
00044 GCOps *ops;
00045 GCFuncs *funcs;
00046 XlibGC gc;
00047 Bool msc;
00048 } dmxGCPrivRec, *dmxGCPrivPtr;
00049
00050
00051 extern Bool dmxInitGC(ScreenPtr pScreen);
00052
00053 extern Bool dmxCreateGC(GCPtr pGC);
00054 extern void dmxValidateGC(GCPtr pGC, unsigned long changes,
00055 DrawablePtr pDrawable);
00056 extern void dmxChangeGC(GCPtr pGC, unsigned long mask);
00057 extern void dmxCopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst);
00058 extern void dmxDestroyGC(GCPtr pGC);
00059 extern void dmxChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
00060 extern void dmxDestroyClip(GCPtr pGC);
00061 extern void dmxCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
00062
00063 extern void dmxBECreateGC(ScreenPtr pScreen, GCPtr pGC);
00064 extern Bool dmxBEFreeGC(GCPtr pGC);
00065
00067 extern DevPrivateKey dmxGCPrivateKey;
00068
00070 #define DMX_GET_GC_PRIV(_pGC) \
00071 (dmxGCPrivPtr)dixLookupPrivate(&(_pGC)->devPrivates, dmxGCPrivateKey)
00072
00073 #define DMX_GC_FUNC_PROLOGUE(_pGC) \
00074 do { \
00075 dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \
00076 DMX_UNWRAP(funcs, _pGCPriv, (_pGC)); \
00077 if (_pGCPriv->ops) \
00078 DMX_UNWRAP(ops, _pGCPriv, (_pGC)); \
00079 } while (0)
00080
00081 #define DMX_GC_FUNC_EPILOGUE(_pGC) \
00082 do { \
00083 dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \
00084 DMX_WRAP(funcs, &dmxGCFuncs, _pGCPriv, (_pGC)); \
00085 if (_pGCPriv->ops) \
00086 DMX_WRAP(ops, &dmxGCOps, _pGCPriv, (_pGC)); \
00087 } while (0)
00088
00089 #endif