1
/* $XFree86: xc/programs/Xserver/hw/xfree86/xf8_32bpp/xf86overlay.c,v 1.8 2000/03/25 20:14:43 mvojkovi Exp $ */
4
Copyright (C) 1998. The XFree86 Project Inc.
6
Written by Mark Vojkovich (mvojkovi@ucsd.edu)
9
#ifdef HAVE_XORG_CONFIG_H
10
#include <xorg-config.h>
15
#include "xf86_ansic.h"
16
#include "xf86_OSproc.h"
19
#include "scrnintstr.h"
20
#include "regionstr.h"
21
#include "windowstr.h"
25
#include "pixmapstr.h"
26
#include "colormapst.h"
32
/** Screen Functions **/
34
static Bool OverlayCloseScreen (int, ScreenPtr);
35
static Bool OverlayCreateGC(GCPtr pGC);
36
static Bool OverlayDestroyPixmap(PixmapPtr);
37
static PixmapPtr OverlayCreatePixmap(ScreenPtr, int, int, int);
38
static Bool OverlayChangeWindowAttributes(WindowPtr, unsigned long);
39
static void OverlayPaintWindow(WindowPtr, RegionPtr, int);
42
static void OverlayValidateGC(GCPtr, unsigned long, DrawablePtr);
43
static void OverlayChangeGC(GCPtr, unsigned long);
44
static void OverlayCopyGC(GCPtr, unsigned long, GCPtr);
45
static void OverlayDestroyGC(GCPtr);
46
static void OverlayChangeClip(GCPtr, int, pointer, int);
47
static void OverlayDestroyClip(GCPtr);
48
static void OverlayCopyClip(GCPtr, GCPtr);
51
static PixmapPtr OverlayRefreshPixmap(PixmapPtr);
53
static GCFuncs OverlayGCFuncs = {
54
OverlayValidateGC, OverlayChangeGC,
55
OverlayCopyGC, OverlayDestroyGC,
56
OverlayChangeClip, OverlayDestroyClip,
62
static void PixmapFillSpans(DrawablePtr, GCPtr, int, DDXPointPtr, int *,
64
static void PixmapSetSpans(DrawablePtr, GCPtr, char *, DDXPointPtr,
66
static void PixmapPutImage(DrawablePtr, GCPtr, int, int, int, int, int,
68
static void PixmapPushPixels(GCPtr, PixmapPtr, DrawablePtr, int, int,
70
static RegionPtr PixmapCopyArea(DrawablePtr, DrawablePtr, GCPtr, int, int,
72
static RegionPtr PixmapCopyPlane(DrawablePtr, DrawablePtr, GCPtr, int, int,
73
int, int, int, int, unsigned long);
74
static void PixmapPolyPoint(DrawablePtr, GCPtr, int, int, xPoint *);
75
static void PixmapPolylines(DrawablePtr, GCPtr, int, int, DDXPointPtr);
76
static void PixmapPolySegment(DrawablePtr, GCPtr, int, xSegment *);
77
static void PixmapPolyRectangle(DrawablePtr, GCPtr, int, xRectangle *);
78
static void PixmapPolyArc(DrawablePtr, GCPtr, int, xArc *);
79
static void PixmapFillPolygon(DrawablePtr, GCPtr, int, int, int,
81
static void PixmapPolyFillRect(DrawablePtr, GCPtr, int, xRectangle *);
82
static void PixmapPolyFillArc(DrawablePtr, GCPtr, int, xArc *);
83
static int PixmapPolyText8(DrawablePtr, GCPtr, int, int, int, char *);
84
static int PixmapPolyText16(DrawablePtr, GCPtr, int, int, int,
86
static void PixmapImageText8(DrawablePtr, GCPtr, int, int, int, char *);
87
static void PixmapImageText16(DrawablePtr, GCPtr, int, int, int,
89
static void PixmapImageGlyphBlt(DrawablePtr, GCPtr, int, int,
90
unsigned int, CharInfoPtr *, pointer);
91
static void PixmapPolyGlyphBlt(DrawablePtr, GCPtr, int, int,
92
unsigned int, CharInfoPtr *, pointer);
94
static GCOps PixmapGCOps = {
95
PixmapFillSpans, PixmapSetSpans,
96
PixmapPutImage, PixmapCopyArea,
97
PixmapCopyPlane, PixmapPolyPoint,
98
PixmapPolylines, PixmapPolySegment,
99
PixmapPolyRectangle, PixmapPolyArc,
100
PixmapFillPolygon, PixmapPolyFillRect,
101
PixmapPolyFillArc, PixmapPolyText8,
102
PixmapPolyText16, PixmapImageText8,
103
PixmapImageText16, PixmapImageGlyphBlt,
104
PixmapPolyGlyphBlt, PixmapPushPixels,
105
#ifdef NEED_LINEHELPER
108
{NULL} /* devPrivate */
113
static void WindowFillSpans(DrawablePtr, GCPtr, int, DDXPointPtr, int *,
115
static void WindowSetSpans(DrawablePtr, GCPtr, char *, DDXPointPtr,
117
static void WindowPutImage(DrawablePtr, GCPtr, int, int, int, int, int,
119
static void WindowPushPixels(GCPtr, PixmapPtr, DrawablePtr, int, int,
121
static RegionPtr WindowCopyArea(DrawablePtr, DrawablePtr, GCPtr, int, int,
123
static RegionPtr WindowCopyPlane(DrawablePtr, DrawablePtr, GCPtr, int, int,
124
int, int, int, int, unsigned long);
125
static void WindowPolyPoint(DrawablePtr, GCPtr, int, int, xPoint *);
126
static void WindowPolylines(DrawablePtr, GCPtr, int, int, DDXPointPtr);
127
static void WindowPolySegment(DrawablePtr, GCPtr, int, xSegment *);
128
static void WindowPolyRectangle(DrawablePtr, GCPtr, int, xRectangle *);
129
static void WindowPolyArc(DrawablePtr, GCPtr, int, xArc *);
130
static void WindowFillPolygon(DrawablePtr, GCPtr, int, int, int,
132
static void WindowPolyFillRect(DrawablePtr, GCPtr, int, xRectangle *);
133
static void WindowPolyFillArc(DrawablePtr, GCPtr, int, xArc *);
134
static int WindowPolyText8(DrawablePtr, GCPtr, int, int, int, char *);
135
static int WindowPolyText16(DrawablePtr, GCPtr, int, int, int,
137
static void WindowImageText8(DrawablePtr, GCPtr, int, int, int, char *);
138
static void WindowImageText16(DrawablePtr, GCPtr, int, int, int,
140
static void WindowImageGlyphBlt(DrawablePtr, GCPtr, int, int,
141
unsigned int, CharInfoPtr *, pointer);
142
static void WindowPolyGlyphBlt(DrawablePtr, GCPtr, int, int,
143
unsigned int, CharInfoPtr *, pointer);
145
static GCOps WindowGCOps = {
146
WindowFillSpans, WindowSetSpans,
147
WindowPutImage, WindowCopyArea,
148
WindowCopyPlane, WindowPolyPoint,
149
WindowPolylines, WindowPolySegment,
150
WindowPolyRectangle, WindowPolyArc,
151
WindowFillPolygon, WindowPolyFillRect,
152
WindowPolyFillArc, WindowPolyText8,
153
WindowPolyText16, WindowImageText8,
154
WindowImageText16, WindowImageGlyphBlt,
155
WindowPolyGlyphBlt, WindowPushPixels,
156
#ifdef NEED_LINEHELPER
159
{NULL} /* devPrivate */
165
CloseScreenProcPtr CloseScreen;
166
CreateGCProcPtr CreateGC;
167
CreatePixmapProcPtr CreatePixmap;
168
DestroyPixmapProcPtr DestroyPixmap;
169
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
170
PaintWindowBackgroundProcPtr PaintWindowBackground;
171
PaintWindowBorderProcPtr PaintWindowBorder;
173
} OverlayScreenRec, *OverlayScreenPtr;
183
} OverlayGCRec, *OverlayGCPtr;
188
} OverlayPixmapRec, *OverlayPixmapPtr;
191
static int OverlayScreenIndex = -1;
192
static int OverlayGCIndex = -1;
193
static int OverlayPixmapIndex = -1;
194
static unsigned long OverlayGeneration = 0;
198
#define TILE_EXISTS(pGC) (!(pGC)->tileIsPixel && (pGC)->tile.pixmap)
200
#define OVERLAY_GET_PIXMAP_PRIVATE(pPix) \
201
(OverlayPixmapPtr)((pPix)->devPrivates[OverlayPixmapIndex].ptr)
203
#define OVERLAY_GET_SCREEN_PRIVATE(pScreen) \
204
(OverlayScreenPtr)((pScreen)->devPrivates[OverlayScreenIndex].ptr)
206
#define OVERLAY_GET_GC_PRIVATE(pGC) \
207
(OverlayGCPtr)((pGC)->devPrivates[OverlayGCIndex].ptr)
209
#define OVERLAY_GC_FUNC_PROLOGUE(pGC)\
210
OverlayGCPtr pGCPriv = OVERLAY_GET_GC_PRIVATE(pGC);\
211
(pGC)->funcs = pGCPriv->wrapFuncs;\
212
if(pGCPriv->overlayOps) \
213
(pGC)->ops = pGCPriv->wrapOps
215
#define OVERLAY_GC_FUNC_EPILOGUE(pGC)\
216
pGCPriv->wrapFuncs = (pGC)->funcs;\
217
(pGC)->funcs = &OverlayGCFuncs;\
218
if(pGCPriv->overlayOps) { \
219
pGCPriv->wrapOps = (pGC)->ops;\
220
(pGC)->ops = pGCPriv->overlayOps;\
223
#define WINDOW_GC_OP_PROLOGUE(pGC)\
224
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE((pGC)->pScreen);\
225
OverlayGCPtr pGCPriv = OVERLAY_GET_GC_PRIVATE(pGC);\
226
unsigned long oldfg = (pGC)->fgPixel;\
227
unsigned long oldbg = (pGC)->bgPixel;\
228
unsigned long oldpm = (pGC)->planemask;\
229
PixmapPtr oldtile = (pGC)->tile.pixmap;\
230
(pGC)->fgPixel = pGCPriv->fg;\
231
(pGC)->bgPixel = pGCPriv->bg;\
232
(pGC)->planemask = pGCPriv->pm;\
233
if(pGCPriv->tile) (pGC)->tile.pixmap = pGCPriv->tile;\
234
(pGC)->funcs = pGCPriv->wrapFuncs;\
235
(pGC)->ops = pGCPriv->wrapOps;\
236
pScreenPriv->LockPrivate++
239
#define WINDOW_GC_OP_EPILOGUE(pGC)\
240
pGCPriv->wrapOps = (pGC)->ops;\
241
pGCPriv->wrapFuncs = (pGC)->funcs;\
242
(pGC)->fgPixel = oldfg;\
243
(pGC)->bgPixel = oldbg;\
244
(pGC)->planemask = oldpm;\
245
(pGC)->tile.pixmap = oldtile;\
246
(pGC)->funcs = &OverlayGCFuncs;\
247
(pGC)->ops = &WindowGCOps;\
248
pScreenPriv->LockPrivate--
251
#define PIXMAP_GC_OP_PROLOGUE(pGC)\
252
OverlayGCPtr pGCPriv = OVERLAY_GET_GC_PRIVATE(pGC);\
253
OverlayPixmapPtr pPixPriv = OVERLAY_GET_PIXMAP_PRIVATE((PixmapPtr)pDraw);\
254
pGC->funcs = pGCPriv->wrapFuncs;\
255
pGC->ops = pGCPriv->wrapOps
257
#define PIXMAP_GC_OP_EPILOGUE(pGC)\
258
pGCPriv->wrapOps = pGC->ops;\
259
pGC->funcs = &OverlayGCFuncs;\
260
pGC->ops = &PixmapGCOps;\
261
pPixPriv->dirty |= IS_DIRTY
265
xf86Overlay8Plus32Init (ScreenPtr pScreen)
267
OverlayScreenPtr pScreenPriv;
269
if(OverlayGeneration != serverGeneration) {
270
if(((OverlayScreenIndex = AllocateScreenPrivateIndex()) < 0) ||
271
((OverlayGCIndex = AllocateGCPrivateIndex()) < 0) ||
272
((OverlayPixmapIndex = AllocatePixmapPrivateIndex()) < 0))
275
OverlayGeneration = serverGeneration;
278
if (!AllocateGCPrivate(pScreen, OverlayGCIndex, sizeof(OverlayGCRec)))
281
if (!AllocatePixmapPrivate(pScreen, OverlayPixmapIndex,
282
sizeof(OverlayPixmapRec)))
285
if (!(pScreenPriv = xalloc(sizeof(OverlayScreenRec))))
288
pScreen->devPrivates[OverlayScreenIndex].ptr = (pointer)pScreenPriv;
290
pScreenPriv->CreateGC = pScreen->CreateGC;
291
pScreenPriv->CloseScreen = pScreen->CloseScreen;
292
pScreenPriv->CreatePixmap = pScreen->CreatePixmap;
293
pScreenPriv->DestroyPixmap = pScreen->DestroyPixmap;
294
pScreenPriv->ChangeWindowAttributes = pScreen->ChangeWindowAttributes;
295
pScreenPriv->PaintWindowBackground = pScreen->PaintWindowBackground;
296
pScreenPriv->PaintWindowBorder = pScreen->PaintWindowBorder;
298
pScreen->CreateGC = OverlayCreateGC;
299
pScreen->CloseScreen = OverlayCloseScreen;
300
pScreen->CreatePixmap = OverlayCreatePixmap;
301
pScreen->DestroyPixmap = OverlayDestroyPixmap;
302
pScreen->ChangeWindowAttributes = OverlayChangeWindowAttributes;
303
pScreen->PaintWindowBackground = OverlayPaintWindow;
304
pScreen->PaintWindowBorder = OverlayPaintWindow;
306
pScreenPriv->LockPrivate = 0;
308
/* allocate the key in the default map */
309
if(pScreen->defColormap) {
310
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
314
pmap = (ColormapPtr)LookupIDByType(pScreen->defColormap, RT_COLORMAP);
316
pmap->red[pScrn->colorKey].refcnt = AllocPrivate;
317
pmap->red[pScrn->colorKey].fShared = FALSE;
320
color.red = color.blue = color.green = 0;
321
color.pixel = pScrn->colorKey;
322
color.flags = DoRed | DoGreen | DoBlue;
324
StoreColors(pmap, 1, &color);
331
/*********************** Screen Funcs ***********************/
334
OverlayCreateGC(GCPtr pGC)
336
ScreenPtr pScreen = pGC->pScreen;
337
OverlayGCPtr pGCPriv = OVERLAY_GET_GC_PRIVATE(pGC);
338
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
341
pScreen->CreateGC = pScreenPriv->CreateGC;
343
if((ret = (*pScreen->CreateGC)(pGC)) && (pGC->depth != 1)) {
344
pGCPriv->wrapFuncs = pGC->funcs;
345
pGC->funcs = &OverlayGCFuncs;
346
pGCPriv->wrapOps = NULL;
347
pGCPriv->overlayOps = NULL;
348
pGCPriv->tile = NULL;
351
pScreen->CreateGC = OverlayCreateGC;
357
OverlayCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
359
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
362
pScreen->CreatePixmap = pScreenPriv->CreatePixmap;
363
pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth);
364
pScreen->CreatePixmap = OverlayCreatePixmap;
366
/* We initialize all the privates */
368
OverlayPixmapPtr pPriv = OVERLAY_GET_PIXMAP_PRIVATE(pPix);
370
pPriv->dirty = IS_DIRTY;
372
pPriv->dirty |= IS_SHARED;
379
OverlayDestroyPixmap(PixmapPtr pPix)
381
ScreenPtr pScreen = pPix->drawable.pScreen;
382
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
385
pScreen->DestroyPixmap = pScreenPriv->DestroyPixmap;
387
if((pPix->refcnt == 1) && (pPix->drawable.bitsPerPixel == 8)) {
388
OverlayPixmapPtr pPriv = OVERLAY_GET_PIXMAP_PRIVATE(pPix);
390
if(pPriv->pix32->refcnt != 1)
391
ErrorF("Warning! private pix refcnt = %i\n", pPriv->pix32->refcnt);
392
(*pScreen->DestroyPixmap)(pPriv->pix32);
397
result = (*pScreen->DestroyPixmap) (pPix);
398
pScreen->DestroyPixmap = OverlayDestroyPixmap;
404
OverlayCloseScreen (int i, ScreenPtr pScreen)
406
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
408
pScreen->CreateGC = pScreenPriv->CreateGC;
409
pScreen->CloseScreen = pScreenPriv->CloseScreen;
410
pScreen->CreatePixmap = pScreenPriv->CreatePixmap;
411
pScreen->DestroyPixmap = pScreenPriv->DestroyPixmap;
412
pScreen->ChangeWindowAttributes = pScreenPriv->ChangeWindowAttributes;
413
pScreen->PaintWindowBackground = pScreenPriv->PaintWindowBackground;
414
pScreen->PaintWindowBorder = pScreenPriv->PaintWindowBorder;
416
xfree ((pointer) pScreenPriv);
418
return (*pScreen->CloseScreen) (i, pScreen);
424
OverlayChangeWindowAttributes (WindowPtr pWin, unsigned long mask)
426
ScreenPtr pScreen = pWin->drawable.pScreen;
427
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
430
if(pWin->drawable.depth == 8) {
431
if((mask & CWBackPixmap) &&
432
(pWin->backgroundState == BackgroundPixmap))
433
OverlayRefreshPixmap(pWin->background.pixmap);
435
if((mask & CWBorderPixmap) && !pWin->borderIsPixel)
436
OverlayRefreshPixmap(pWin->border.pixmap);
439
pScreen->ChangeWindowAttributes = pScreenPriv->ChangeWindowAttributes;
440
result = (*pScreen->ChangeWindowAttributes) (pWin, mask);
441
pScreen->ChangeWindowAttributes = OverlayChangeWindowAttributes;
452
ScreenPtr pScreen = pWin->drawable.pScreen;
453
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
454
OverlayPixmapPtr pixPriv;
455
PixmapPtr oldPix = NULL;
457
if(what == PW_BACKGROUND) {
458
if(pWin->drawable.depth == 8) {
459
if(pWin->backgroundState == ParentRelative) {
462
} while (pWin->backgroundState == ParentRelative);
465
if(pWin->backgroundState == BackgroundPixmap) {
466
oldPix = pWin->background.pixmap;
467
pixPriv = OVERLAY_GET_PIXMAP_PRIVATE(oldPix);
468
/* have to do this here because alot of applications
469
incorrectly assume changes to a pixmap that is
470
a window background go into effect immediatedly */
471
if(pixPriv->dirty & IS_DIRTY)
472
OverlayRefreshPixmap(pWin->background.pixmap);
473
pWin->background.pixmap = pixPriv->pix32;
477
pScreen->PaintWindowBackground = pScreenPriv->PaintWindowBackground;
478
(*pScreen->PaintWindowBackground) (pWin, pReg, what);
479
pScreen->PaintWindowBackground = OverlayPaintWindow;
482
pWin->background.pixmap = oldPix;
484
if((pWin->drawable.depth == 8) && !pWin->borderIsPixel) {
485
oldPix = pWin->border.pixmap;
486
pixPriv = OVERLAY_GET_PIXMAP_PRIVATE(oldPix);
487
if(pixPriv->dirty & IS_DIRTY)
488
OverlayRefreshPixmap(pWin->border.pixmap);
489
pWin->border.pixmap = pixPriv->pix32;
492
pScreen->PaintWindowBorder = pScreenPriv->PaintWindowBorder;
493
(*pScreen->PaintWindowBorder) (pWin, pReg, what);
494
pScreen->PaintWindowBorder = OverlayPaintWindow;
497
pWin->border.pixmap = oldPix;
502
/*********************** GC Funcs *****************************/
506
OverlayRefreshPixmap(PixmapPtr pix8)
508
OverlayPixmapPtr pixPriv = OVERLAY_GET_PIXMAP_PRIVATE(pix8);
509
ScreenPtr pScreen = pix8->drawable.pScreen;
511
if(!pixPriv->pix32) {
514
newPix = (*pScreen->CreatePixmap)(pScreen, pix8->drawable.width,
515
pix8->drawable.height, 24);
516
newPix->drawable.depth = 8; /* Bad Mark! Bad Mark! */
517
pixPriv->pix32 = newPix;
521
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pScreen);
524
pGC = GetScratchGC(8, pScreen);
526
pScreenPriv->LockPrivate++; /* don't modify this one */
527
ValidateGC((DrawablePtr)pixPriv->pix32, pGC);
529
(*pGC->ops->CopyArea)((DrawablePtr)pix8, (DrawablePtr)pixPriv->pix32,
530
pGC, 0, 0, pix8->drawable.width, pix8->drawable.height, 0, 0);
531
pScreenPriv->LockPrivate--;
534
pixPriv->dirty &= ~IS_DIRTY;
535
pixPriv->pix32->drawable.serialNumber = NEXT_SERIAL_NUMBER;
538
return pixPriv->pix32;
545
unsigned long changes,
548
OverlayScreenPtr pScreenPriv = OVERLAY_GET_SCREEN_PRIVATE(pGC->pScreen);
549
OVERLAY_GC_FUNC_PROLOGUE (pGC);
551
if(pScreenPriv->LockPrivate < 0) {
552
ErrorF("Something is wrong in OverlayValidateGC!\n");
553
pScreenPriv->LockPrivate = 0;
556
if(pGC->depth == 24) {
557
unsigned long oldpm = pGC->planemask;
558
pGCPriv->overlayOps = NULL;
560
if(pDraw->type == DRAWABLE_WINDOW)
561
pGC->planemask &= 0x00ffffff;
563
pGC->planemask |= 0xff000000;
565
if(oldpm != pGC->planemask) changes |= GCPlaneMask;
567
(*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
569
} else { /* depth == 8 */
570
unsigned long newChanges = 0;
572
if(pDraw->bitsPerPixel == 32) {
574
if(pGC->fillStyle == FillTiled)
575
pGCPriv->tile = OverlayRefreshPixmap(pGC->tile.pixmap);
576
else pGCPriv->tile = NULL;
578
if(pGCPriv->overlayOps != &WindowGCOps) {
579
newChanges = GCForeground | GCBackground | GCPlaneMask;
581
newChanges |= GCTile;
583
pGCPriv->overlayOps = &WindowGCOps;
585
if(!pScreenPriv->LockPrivate) {
586
unsigned long oldfg = pGC->fgPixel;
587
unsigned long oldbg = pGC->bgPixel;
588
unsigned long oldpm = pGC->planemask;
589
PixmapPtr oldtile = pGC->tile.pixmap;
591
pGC->fgPixel = pGCPriv->fg = oldfg << 24;
592
pGC->bgPixel = pGCPriv->bg = oldbg << 24;
593
pGC->planemask = pGCPriv->pm = oldpm << 24;
595
pGC->tile.pixmap = pGCPriv->tile;
597
(*pGC->funcs->ValidateGC)(pGC, changes | newChanges, pDraw);
599
pGC->fgPixel = oldfg;
600
pGC->bgPixel = oldbg;
601
pGC->planemask = oldpm;
602
pGC->tile.pixmap = oldtile;
604
pGCPriv->fg = pGC->fgPixel;
605
pGCPriv->bg = pGC->bgPixel;
606
pGCPriv->pm = pGC->planemask;
608
(*pGC->funcs->ValidateGC)(pGC, changes | newChanges, pDraw);
611
} else { /* bitsPerPixel == 8 */
612
if(pGCPriv->overlayOps == &WindowGCOps) {
613
newChanges = GCForeground | GCBackground | GCPlaneMask;
615
newChanges |= GCTile;
617
pGCPriv->overlayOps = &PixmapGCOps;
619
(*pGC->funcs->ValidateGC)(pGC, changes | newChanges, pDraw);
623
OVERLAY_GC_FUNC_EPILOGUE (pGC);
628
OverlayDestroyGC(GCPtr pGC)
630
OVERLAY_GC_FUNC_PROLOGUE (pGC);
631
(*pGC->funcs->DestroyGC)(pGC);
632
OVERLAY_GC_FUNC_EPILOGUE (pGC);
640
OVERLAY_GC_FUNC_PROLOGUE (pGC);
641
(*pGC->funcs->ChangeGC) (pGC, mask);
642
OVERLAY_GC_FUNC_EPILOGUE (pGC);
651
OVERLAY_GC_FUNC_PROLOGUE (pGCDst);
652
(*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
653
OVERLAY_GC_FUNC_EPILOGUE (pGCDst);
662
OVERLAY_GC_FUNC_PROLOGUE (pGC);
663
(*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
664
OVERLAY_GC_FUNC_EPILOGUE (pGC);
668
OverlayCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
670
OVERLAY_GC_FUNC_PROLOGUE (pgcDst);
671
(* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
672
OVERLAY_GC_FUNC_EPILOGUE (pgcDst);
676
OverlayDestroyClip(GCPtr pGC)
678
OVERLAY_GC_FUNC_PROLOGUE (pGC);
679
(* pGC->funcs->DestroyClip)(pGC);
680
OVERLAY_GC_FUNC_EPILOGUE (pGC);
685
/******************* Window GC ops ***********************/
696
WINDOW_GC_OP_PROLOGUE(pGC);
697
(*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
698
WINDOW_GC_OP_EPILOGUE(pGC);
706
register DDXPointPtr ppt,
711
WINDOW_GC_OP_PROLOGUE(pGC);
712
(*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
713
WINDOW_GC_OP_EPILOGUE(pGC);
721
int x, int y, int w, int h,
726
WINDOW_GC_OP_PROLOGUE(pGC);
727
(*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
728
leftPad, format, pImage);
729
WINDOW_GC_OP_EPILOGUE(pGC);
738
int width, int height,
743
WINDOW_GC_OP_PROLOGUE(pGC);
744
ret = (*pGC->ops->CopyArea)(pSrc, pDst,
745
pGC, srcx, srcy, width, height, dstx, dsty);
746
WINDOW_GC_OP_EPILOGUE(pGC);
756
int width, int height,
758
unsigned long bitPlane
762
WINDOW_GC_OP_PROLOGUE(pGC);
763
ret = (*pGC->ops->CopyPlane)(pSrc, pDst,
764
pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
765
WINDOW_GC_OP_EPILOGUE(pGC);
777
WINDOW_GC_OP_PROLOGUE(pGC);
778
(*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
779
WINDOW_GC_OP_EPILOGUE(pGC);
790
WINDOW_GC_OP_PROLOGUE(pGC);
791
(*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
792
WINDOW_GC_OP_EPILOGUE(pGC);
802
WINDOW_GC_OP_PROLOGUE(pGC);
803
(*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
804
WINDOW_GC_OP_EPILOGUE(pGC);
812
xRectangle *pRectsInit
814
WINDOW_GC_OP_PROLOGUE(pGC);
815
(*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
816
WINDOW_GC_OP_EPILOGUE(pGC);
826
WINDOW_GC_OP_PROLOGUE(pGC);
827
(*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
828
WINDOW_GC_OP_EPILOGUE(pGC);
840
WINDOW_GC_OP_PROLOGUE(pGC);
841
(*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
842
WINDOW_GC_OP_EPILOGUE(pGC);
850
xRectangle *prectInit
852
WINDOW_GC_OP_PROLOGUE(pGC);
853
(*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
854
WINDOW_GC_OP_EPILOGUE(pGC);
864
WINDOW_GC_OP_PROLOGUE(pGC);
865
(*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
866
WINDOW_GC_OP_EPILOGUE(pGC);
880
WINDOW_GC_OP_PROLOGUE(pGC);
881
ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
882
WINDOW_GC_OP_EPILOGUE(pGC);
893
unsigned short *chars
897
WINDOW_GC_OP_PROLOGUE(pGC);
898
ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
899
WINDOW_GC_OP_EPILOGUE(pGC);
912
WINDOW_GC_OP_PROLOGUE(pGC);
913
(*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
914
WINDOW_GC_OP_EPILOGUE(pGC);
924
unsigned short *chars
926
WINDOW_GC_OP_PROLOGUE(pGC);
927
(*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
928
WINDOW_GC_OP_EPILOGUE(pGC);
935
int xInit, int yInit,
940
WINDOW_GC_OP_PROLOGUE(pGC);
941
(*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph,
943
WINDOW_GC_OP_EPILOGUE(pGC);
950
int xInit, int yInit,
955
WINDOW_GC_OP_PROLOGUE(pGC);
956
(*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph,
958
WINDOW_GC_OP_EPILOGUE(pGC);
966
int dx, int dy, int xOrg, int yOrg
968
WINDOW_GC_OP_PROLOGUE(pGC);
969
(*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
970
WINDOW_GC_OP_EPILOGUE(pGC);
974
/******************* Pixmap GC ops ***********************/
985
PIXMAP_GC_OP_PROLOGUE(pGC);
986
(*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
987
PIXMAP_GC_OP_EPILOGUE(pGC);
995
register DDXPointPtr ppt,
1000
PIXMAP_GC_OP_PROLOGUE(pGC);
1001
(*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
1002
PIXMAP_GC_OP_EPILOGUE(pGC);
1010
int x, int y, int w, int h,
1015
PIXMAP_GC_OP_PROLOGUE(pGC);
1016
(*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
1017
leftPad, format, pImage);
1018
PIXMAP_GC_OP_EPILOGUE(pGC);
1027
int width, int height,
1032
PIXMAP_GC_OP_PROLOGUE(pGC);
1033
ret = (*pGC->ops->CopyArea)(pSrc, pDraw,
1034
pGC, srcx, srcy, width, height, dstx, dsty);
1035
PIXMAP_GC_OP_EPILOGUE(pGC);
1045
int width, int height,
1047
unsigned long bitPlane
1051
PIXMAP_GC_OP_PROLOGUE(pGC);
1052
ret = (*pGC->ops->CopyPlane)(pSrc, pDraw,
1053
pGC, srcx, srcy, width, height, dstx, dsty, bitPlane);
1054
PIXMAP_GC_OP_EPILOGUE(pGC);
1066
PIXMAP_GC_OP_PROLOGUE(pGC);
1067
(*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
1068
PIXMAP_GC_OP_EPILOGUE(pGC);
1079
PIXMAP_GC_OP_PROLOGUE(pGC);
1080
(*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
1081
PIXMAP_GC_OP_EPILOGUE(pGC);
1091
PIXMAP_GC_OP_PROLOGUE(pGC);
1092
(*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
1093
PIXMAP_GC_OP_EPILOGUE(pGC);
1097
PixmapPolyRectangle(
1101
xRectangle *pRectsInit
1103
PIXMAP_GC_OP_PROLOGUE(pGC);
1104
(*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
1105
PIXMAP_GC_OP_EPILOGUE(pGC);
1115
PIXMAP_GC_OP_PROLOGUE(pGC);
1116
(*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
1117
PIXMAP_GC_OP_EPILOGUE(pGC);
1129
PIXMAP_GC_OP_PROLOGUE(pGC);
1130
(*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
1131
PIXMAP_GC_OP_EPILOGUE(pGC);
1139
xRectangle *prectInit
1141
PIXMAP_GC_OP_PROLOGUE(pGC);
1142
(*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
1143
PIXMAP_GC_OP_EPILOGUE(pGC);
1153
PIXMAP_GC_OP_PROLOGUE(pGC);
1154
(*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
1155
PIXMAP_GC_OP_EPILOGUE(pGC);
1169
PIXMAP_GC_OP_PROLOGUE(pGC);
1170
ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
1171
PIXMAP_GC_OP_EPILOGUE(pGC);
1182
unsigned short *chars
1186
PIXMAP_GC_OP_PROLOGUE(pGC);
1187
ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
1188
PIXMAP_GC_OP_EPILOGUE(pGC);
1201
PIXMAP_GC_OP_PROLOGUE(pGC);
1202
(*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
1203
PIXMAP_GC_OP_EPILOGUE(pGC);
1213
unsigned short *chars
1215
PIXMAP_GC_OP_PROLOGUE(pGC);
1216
(*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
1217
PIXMAP_GC_OP_EPILOGUE(pGC);
1221
PixmapImageGlyphBlt(
1224
int xInit, int yInit,
1225
unsigned int nglyph,
1229
PIXMAP_GC_OP_PROLOGUE(pGC);
1230
(*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph,
1232
PIXMAP_GC_OP_EPILOGUE(pGC);
1239
int xInit, int yInit,
1240
unsigned int nglyph,
1244
PIXMAP_GC_OP_PROLOGUE(pGC);
1245
(*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit, nglyph,
1247
PIXMAP_GC_OP_EPILOGUE(pGC);
1255
int dx, int dy, int xOrg, int yOrg
1257
PIXMAP_GC_OP_PROLOGUE(pGC);
1258
(*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
1259
PIXMAP_GC_OP_EPILOGUE(pGC);