1
/* $XFree86: xc/programs/Xserver/hw/xfree86/xf24_32bpp/cfbgcmisc.c,v 1.1 1999/01/23 09:56:14 dawes Exp $ */
12
#include "fontstruct.h"
13
#include "dixfontstr.h"
15
#include "windowstr.h"
16
#include "pixmapstr.h"
17
#include "scrnintstr.h"
25
static void cfb24_32ValidateGC(GCPtr, unsigned long, DrawablePtr);
26
static void cfb24_32DestroyGC(GCPtr pGC);
27
static void cfb24_32ChangeGC(GCPtr pGC, unsigned long mask);
28
static void cfb24_32CopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst);
31
GCFuncs cfb24_32GCFuncs = {
42
cfb24_32DestroyGC(GCPtr pGC)
44
cfb24_32GCPtr pGCPriv = CFB24_32_GET_GC_PRIVATE(pGC);
46
if (pGC->freeCompClip)
47
REGION_DESTROY(pGC->pScreen, pGC->pCompositeClip);
49
miDestroyGCOps(pGCPriv->Ops24bpp);
51
miDestroyGCOps(pGCPriv->Ops32bpp);
60
if((mask & GCTile) && pGC->tile.pixmap && !pGC->tileIsPixel) {
61
PixmapPtr pPix = pGC->tile.pixmap;
62
cfb24_32PixmapPtr pixPriv = CFB24_32_GET_PIXMAP_PRIVATE(pPix);
64
if(pixPriv->pix && (pPix->refcnt != pixPriv->pix->refcnt))
65
pixPriv->pix->refcnt = pPix->refcnt;
74
unsigned long changes,
77
if((changes & GCTile) && pGCDst->tile.pixmap && !pGCDst->tileIsPixel) {
78
PixmapPtr pPix = pGCDst->tile.pixmap;
79
cfb24_32PixmapPtr pixPriv = CFB24_32_GET_PIXMAP_PRIVATE(pPix);
81
if(pixPriv->pix && (pPix->refcnt != pixPriv->pix->refcnt))
82
pixPriv->pix->refcnt = pPix->refcnt;
91
cfb24_32CreateGC(GCPtr pGC)
93
cfb24_32GCPtr pGCPriv;
96
if (PixmapWidthPaddingInfo[pGC->depth].padPixelsLog2 == LOG2_BITMAP_PAD)
97
return (mfbCreateGC(pGC));
99
pGC->clientClip = NULL;
100
pGC->clientClipType = CT_NONE;
101
pGC->miTranslate = 1;
103
pGC->freeCompClip = FALSE;
104
pGC->pRotatedPixmap = (PixmapPtr) NULL;
106
pPriv = cfbGetGCPrivate(pGC);
107
pPriv->rop = pGC->alu;
108
pPriv->oneRect = FALSE;
111
pGC->funcs = &cfb24_32GCFuncs;
113
pGCPriv = CFB24_32_GET_GC_PRIVATE(pGC);
114
pGCPriv->Ops24bpp = NULL;
115
pGCPriv->Ops32bpp = NULL;
116
pGCPriv->OpsAre24bpp = FALSE;
117
pGCPriv->changes = 0;
126
unsigned long changes,
129
cfb24_32GCPtr pGCPriv = CFB24_32_GET_GC_PRIVATE(pGC);
131
if(pDraw->bitsPerPixel == 32) {
132
if(pGCPriv->OpsAre24bpp) {
133
int origChanges = changes;
134
pGC->ops = pGCPriv->Ops32bpp;
135
changes |= pGCPriv->changes;
136
pGCPriv->changes = origChanges;
137
pGCPriv->OpsAre24bpp = FALSE;
139
pGCPriv->changes |= changes;
141
if((pGC->fillStyle == FillTiled) &&
142
(pGC->tile.pixmap->drawable.bitsPerPixel == 24)){
143
pGC->tile.pixmap = cfb24_32RefreshPixmap(pGC->tile.pixmap);
147
cfb24_32ValidateGC32(pGC, changes, pDraw);
148
pGCPriv->Ops32bpp = pGC->ops;
149
} else { /* bitsPerPixel == 24 */
150
if(!pGCPriv->OpsAre24bpp) {
151
int origChanges = changes;
152
pGC->ops = pGCPriv->Ops24bpp;
153
changes |= pGCPriv->changes;
154
pGCPriv->changes = origChanges;
155
pGCPriv->OpsAre24bpp = TRUE;
157
pGCPriv->changes |= changes;
159
if((pGC->fillStyle == FillTiled) &&
160
(pGC->tile.pixmap->drawable.bitsPerPixel == 32)){
161
pGC->tile.pixmap = cfb24_32RefreshPixmap(pGC->tile.pixmap);
165
cfb24_32ValidateGC24(pGC, changes, pDraw);
166
pGCPriv->Ops24bpp = pGC->ops;