xenocara/xserver/hw/xfree86/xaa/xaaOverlayDF.c

907 lines
32 KiB
C

/*
Copyright (c) 1999 - The XFree86 Project Inc.
Written by Mark Vojkovich
*/
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "misc.h"
#include "xf86.h"
#include "xf86_OSproc.h"
#include <X11/X.h>
#include "scrnintstr.h"
#include "pixmapstr.h"
#include "windowstr.h"
#include "xf86str.h"
#include "mi.h"
#include "miline.h"
#include "xaa.h"
#include "xaalocal.h"
#include "xaawrap.h"
#include "servermd.h"
/* Screen funcs */
static void XAAOverCopyWindow(WindowPtr, DDXPointRec, RegionPtr);
static void XAAOverWindowExposures(WindowPtr, RegionPtr, RegionPtr);
static int XAAOverStippledFillChooser(GCPtr);
static int XAAOverOpaqueStippledFillChooser(GCPtr);
static int XAAOverTiledFillChooser(GCPtr);
/* GC funcs */
static RegionPtr XAAOverCopyArea(DrawablePtr, DrawablePtr, GC *,
int, int, int, int, int, int);
static RegionPtr XAAOverCopyPlane(DrawablePtr, DrawablePtr, GCPtr,
int, int, int, int, int, int, unsigned long);
static void XAAOverPushPixelsSolid(GCPtr, PixmapPtr, DrawablePtr, int,
int, int, int);
static void XAAOverPolyFillRectSolid(DrawablePtr, GCPtr, int, xRectangle *);
static void XAAOverPolyFillRectStippled(DrawablePtr, GCPtr, int, xRectangle *);
static void XAAOverPolyFillRectOpaqueStippled(DrawablePtr, GCPtr,
int, xRectangle *);
static void XAAOverPolyFillRectTiled(DrawablePtr, GCPtr, int, xRectangle *);
static void XAAOverFillSpansSolid(DrawablePtr, GCPtr, int, DDXPointPtr,
int *, int);
static void XAAOverFillSpansStippled(DrawablePtr, GCPtr, int, DDXPointPtr,
int *, int);
static void XAAOverFillSpansOpaqueStippled(DrawablePtr, GCPtr, int,
DDXPointPtr, int *, int);
static void XAAOverFillSpansTiled(DrawablePtr, GCPtr, int, DDXPointPtr,
int *, int);
static int XAAOverPolyText8TE(DrawablePtr, GCPtr, int, int, int, char *);
static int XAAOverPolyText16TE(DrawablePtr, GCPtr, int, int, int,
unsigned short *);
static void XAAOverImageText8TE(DrawablePtr, GCPtr, int, int, int, char *);
static void XAAOverImageText16TE(DrawablePtr, GCPtr, int, int, int,
unsigned short *);
static void XAAOverImageGlyphBltTE(DrawablePtr, GCPtr, int, int,
unsigned int, CharInfoPtr *, pointer);
static void XAAOverPolyGlyphBltTE(DrawablePtr, GCPtr, int, int,
unsigned int, CharInfoPtr *, pointer);
static int XAAOverPolyText8NonTE(DrawablePtr, GCPtr, int, int, int, char *);
static int XAAOverPolyText16NonTE(DrawablePtr, GCPtr, int, int, int,
unsigned short *);
static void XAAOverImageText8NonTE(DrawablePtr, GCPtr, int, int, int, char *);
static void XAAOverImageText16NonTE(DrawablePtr, GCPtr, int, int, int,
unsigned short *);
static void XAAOverImageGlyphBltNonTE(DrawablePtr, GCPtr, int, int,
unsigned int, CharInfoPtr *, pointer);
static void XAAOverPolyGlyphBltNonTE(DrawablePtr, GCPtr, int, int,
unsigned int, CharInfoPtr *, pointer);
static void XAAOverPolyRectangleThinSolid(DrawablePtr, GCPtr, int,
xRectangle *);
static void XAAOverPolylinesWideSolid(DrawablePtr, GCPtr, int, int,
DDXPointPtr);
static void XAAOverPolylinesThinSolid(DrawablePtr, GCPtr, int, int,
DDXPointPtr);
static void XAAOverPolySegmentThinSolid(DrawablePtr, GCPtr, int, xSegment *);
static void XAAOverPolylinesThinDashed(DrawablePtr, GCPtr, int, int,
DDXPointPtr);
static void XAAOverPolySegmentThinDashed(DrawablePtr, GCPtr, int, xSegment *);
static void XAAOverFillPolygonSolid(DrawablePtr, GCPtr, int, int, int,
DDXPointPtr);
static void XAAOverFillPolygonStippled(DrawablePtr, GCPtr, int, int, int,
DDXPointPtr);
static void XAAOverFillPolygonOpaqueStippled(DrawablePtr, GCPtr, int, int, int,
DDXPointPtr);
static void XAAOverFillPolygonTiled(DrawablePtr, GCPtr, int, int, int,
DDXPointPtr);
static void XAAOverPolyFillArcSolid(DrawablePtr, GCPtr, int, xArc *);
static void XAAOverPutImage(DrawablePtr, GCPtr, int, int, int, int, int,
int, int, char *);
typedef struct {
ScrnInfoPtr pScrn;
DepthChangeFuncPtr callback;
int currentDepth;
/* GC funcs */
RegionPtr (*CopyArea) (DrawablePtr, DrawablePtr, GC *,
int, int, int, int, int, int);
RegionPtr (*CopyPlane) (DrawablePtr, DrawablePtr, GCPtr,
int, int, int, int, int, int, unsigned long);
void (*PushPixelsSolid) (GCPtr, PixmapPtr, DrawablePtr, int, int, int, int);
void (*PolyFillRectSolid) (DrawablePtr, GCPtr, int, xRectangle *);
void (*PolyFillRectStippled) (DrawablePtr, GCPtr, int, xRectangle *);
void (*PolyFillRectOpaqueStippled) (DrawablePtr, GCPtr, int, xRectangle *);
void (*PolyFillRectTiled) (DrawablePtr, GCPtr, int, xRectangle *);
void (*FillSpansSolid) (DrawablePtr, GCPtr, int, DDXPointPtr, int *, int);
void (*FillSpansStippled) (DrawablePtr, GCPtr, int, DDXPointPtr, int *,
int);
void (*FillSpansOpaqueStippled) (DrawablePtr, GCPtr, int, DDXPointPtr,
int *, int);
void (*FillSpansTiled) (DrawablePtr, GCPtr, int, DDXPointPtr, int *, int);
int (*PolyText8TE) (DrawablePtr, GCPtr, int, int, int, char *);
int (*PolyText16TE) (DrawablePtr, GCPtr, int, int, int, unsigned short *);
void (*ImageText8TE) (DrawablePtr, GCPtr, int, int, int, char *);
void (*ImageText16TE) (DrawablePtr, GCPtr, int, int, int, unsigned short *);
void (*ImageGlyphBltTE) (DrawablePtr, GCPtr, int, int, unsigned int,
CharInfoPtr *, pointer);
void (*PolyGlyphBltTE) (DrawablePtr, GCPtr, int, int, unsigned int,
CharInfoPtr *, pointer);
int (*PolyText8NonTE) (DrawablePtr, GCPtr, int, int, int, char *);
int (*PolyText16NonTE) (DrawablePtr, GCPtr, int, int, int,
unsigned short *);
void (*ImageText8NonTE) (DrawablePtr, GCPtr, int, int, int, char *);
void (*ImageText16NonTE) (DrawablePtr, GCPtr, int, int, int,
unsigned short *);
void (*ImageGlyphBltNonTE) (DrawablePtr, GCPtr, int, int, unsigned int,
CharInfoPtr *, pointer);
void (*PolyGlyphBltNonTE) (DrawablePtr, GCPtr, int, int, unsigned int,
CharInfoPtr *, pointer);
void (*PolyRectangleThinSolid) (DrawablePtr, GCPtr, int, xRectangle *);
void (*PolylinesWideSolid) (DrawablePtr, GCPtr, int, int, DDXPointPtr);
void (*PolylinesThinSolid) (DrawablePtr, GCPtr, int, int, DDXPointPtr);
void (*PolySegmentThinSolid) (DrawablePtr, GCPtr, int, xSegment *);
void (*PolylinesThinDashed) (DrawablePtr, GCPtr, int, int, DDXPointPtr);
void (*PolySegmentThinDashed) (DrawablePtr, GCPtr, int, xSegment *);
void (*FillPolygonSolid) (DrawablePtr, GCPtr, int, int, int, DDXPointPtr);
void (*FillPolygonStippled) (DrawablePtr, GCPtr, int, int, int,
DDXPointPtr);
void (*FillPolygonOpaqueStippled) (DrawablePtr, GCPtr, int, int, int,
DDXPointPtr);
void (*FillPolygonTiled) (DrawablePtr, GCPtr, int, int, int, DDXPointPtr);
void (*PolyFillArcSolid) (DrawablePtr, GCPtr, int, xArc *);
void (*PutImage) (DrawablePtr, GCPtr, int, int, int, int, int, int,
int, char *);
int (*StippledFillChooser) (GCPtr);
int (*OpaqueStippledFillChooser) (GCPtr);
int (*TiledFillChooser) (GCPtr);
} XAAOverlayRec, *XAAOverlayPtr;
static DevPrivateKeyRec XAAOverlayKeyRec;
#define XAAOverlayKey (&XAAOverlayKeyRec)
#define GET_OVERLAY_PRIV(pScreen) \
(XAAOverlayPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAOverlayKey)
#define SWITCH_DEPTH(d) \
if(pOverPriv->currentDepth != d) { \
(*pOverPriv->callback)(pOverPriv->pScrn, d); \
pOverPriv->currentDepth = d; \
}
Bool
XAAInitDualFramebufferOverlay(ScreenPtr pScreen, DepthChangeFuncPtr callback)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
XAAOverlayPtr pOverPriv;
if (!dixRegisterPrivateKey(&XAAOverlayKeyRec, PRIVATE_SCREEN, 0))
return FALSE;
if (!(pOverPriv = malloc(sizeof(XAAOverlayRec))))
return FALSE;
dixSetPrivate(&pScreen->devPrivates, XAAOverlayKey, pOverPriv);
pOverPriv->pScrn = pScrn;
pOverPriv->callback = callback;
pOverPriv->currentDepth = -1;
/* Overwrite key screen functions. The XAA core will clean up */
pScreen->CopyWindow = XAAOverCopyWindow;
pScreen->WindowExposures = XAAOverWindowExposures;
pOverPriv->StippledFillChooser = infoRec->StippledFillChooser;
pOverPriv->OpaqueStippledFillChooser = infoRec->OpaqueStippledFillChooser;
pOverPriv->TiledFillChooser = infoRec->TiledFillChooser;
infoRec->StippledFillChooser = XAAOverStippledFillChooser;
infoRec->OpaqueStippledFillChooser = XAAOverOpaqueStippledFillChooser;
infoRec->TiledFillChooser = XAAOverTiledFillChooser;
/* wrap all XAA GC rendering */
pOverPriv->CopyArea = infoRec->CopyArea;
pOverPriv->CopyPlane = infoRec->CopyPlane;
pOverPriv->PushPixelsSolid = infoRec->PushPixelsSolid;
pOverPriv->PolyFillRectSolid = infoRec->PolyFillRectSolid;
pOverPriv->PolyFillRectStippled = infoRec->PolyFillRectStippled;
pOverPriv->PolyFillRectOpaqueStippled = infoRec->PolyFillRectOpaqueStippled;
pOverPriv->PolyFillRectTiled = infoRec->PolyFillRectTiled;
pOverPriv->FillSpansSolid = infoRec->FillSpansSolid;
pOverPriv->FillSpansStippled = infoRec->FillSpansStippled;
pOverPriv->FillSpansOpaqueStippled = infoRec->FillSpansOpaqueStippled;
pOverPriv->FillSpansTiled = infoRec->FillSpansTiled;
pOverPriv->PolyText8TE = infoRec->PolyText8TE;
pOverPriv->PolyText16TE = infoRec->PolyText16TE;
pOverPriv->ImageText8TE = infoRec->ImageText8TE;
pOverPriv->ImageText16TE = infoRec->ImageText16TE;
pOverPriv->ImageGlyphBltTE = infoRec->ImageGlyphBltTE;
pOverPriv->PolyGlyphBltTE = infoRec->PolyGlyphBltTE;
pOverPriv->PolyText8NonTE = infoRec->PolyText8NonTE;
pOverPriv->PolyText16NonTE = infoRec->PolyText16NonTE;
pOverPriv->ImageText8NonTE = infoRec->ImageText8NonTE;
pOverPriv->ImageText16NonTE = infoRec->ImageText16NonTE;
pOverPriv->ImageGlyphBltNonTE = infoRec->ImageGlyphBltNonTE;
pOverPriv->PolyGlyphBltNonTE = infoRec->PolyGlyphBltNonTE;
pOverPriv->PolyRectangleThinSolid = infoRec->PolyRectangleThinSolid;
pOverPriv->PolylinesWideSolid = infoRec->PolylinesWideSolid;
pOverPriv->PolylinesThinSolid = infoRec->PolylinesThinSolid;
pOverPriv->PolySegmentThinSolid = infoRec->PolySegmentThinSolid;
pOverPriv->PolylinesThinDashed = infoRec->PolylinesThinDashed;
pOverPriv->PolySegmentThinDashed = infoRec->PolySegmentThinDashed;
pOverPriv->FillPolygonSolid = infoRec->FillPolygonSolid;
pOverPriv->FillPolygonStippled = infoRec->FillPolygonStippled;
pOverPriv->FillPolygonOpaqueStippled = infoRec->FillPolygonOpaqueStippled;
pOverPriv->FillPolygonTiled = infoRec->FillPolygonTiled;
pOverPriv->PolyFillArcSolid = infoRec->PolyFillArcSolid;
pOverPriv->PutImage = infoRec->PutImage;
if (infoRec->CopyArea)
infoRec->CopyArea = XAAOverCopyArea;
if (infoRec->CopyPlane)
infoRec->CopyPlane = XAAOverCopyPlane;
if (infoRec->PushPixelsSolid)
infoRec->PushPixelsSolid = XAAOverPushPixelsSolid;
if (infoRec->PolyFillRectSolid)
infoRec->PolyFillRectSolid = XAAOverPolyFillRectSolid;
if (infoRec->PolyFillRectStippled)
infoRec->PolyFillRectStippled = XAAOverPolyFillRectStippled;
if (infoRec->PolyFillRectOpaqueStippled)
infoRec->PolyFillRectOpaqueStippled = XAAOverPolyFillRectOpaqueStippled;
if (infoRec->PolyFillRectTiled)
infoRec->PolyFillRectTiled = XAAOverPolyFillRectTiled;
if (infoRec->FillSpansSolid)
infoRec->FillSpansSolid = XAAOverFillSpansSolid;
if (infoRec->FillSpansStippled)
infoRec->FillSpansStippled = XAAOverFillSpansStippled;
if (infoRec->FillSpansOpaqueStippled)
infoRec->FillSpansOpaqueStippled = XAAOverFillSpansOpaqueStippled;
if (infoRec->FillSpansTiled)
infoRec->FillSpansTiled = XAAOverFillSpansTiled;
if (infoRec->PolyText8TE)
infoRec->PolyText8TE = XAAOverPolyText8TE;
if (infoRec->PolyText16TE)
infoRec->PolyText16TE = XAAOverPolyText16TE;
if (infoRec->ImageText8TE)
infoRec->ImageText8TE = XAAOverImageText8TE;
if (infoRec->ImageText16TE)
infoRec->ImageText16TE = XAAOverImageText16TE;
if (infoRec->ImageGlyphBltTE)
infoRec->ImageGlyphBltTE = XAAOverImageGlyphBltTE;
if (infoRec->PolyGlyphBltTE)
infoRec->PolyGlyphBltTE = XAAOverPolyGlyphBltTE;
if (infoRec->PolyText8NonTE)
infoRec->PolyText8NonTE = XAAOverPolyText8NonTE;
if (infoRec->PolyText16NonTE)
infoRec->PolyText16NonTE = XAAOverPolyText16NonTE;
if (infoRec->ImageText8NonTE)
infoRec->ImageText8NonTE = XAAOverImageText8NonTE;
if (infoRec->ImageText16NonTE)
infoRec->ImageText16NonTE = XAAOverImageText16NonTE;
if (infoRec->ImageGlyphBltNonTE)
infoRec->ImageGlyphBltNonTE = XAAOverImageGlyphBltNonTE;
if (infoRec->PolyGlyphBltNonTE)
infoRec->PolyGlyphBltNonTE = XAAOverPolyGlyphBltNonTE;
if (infoRec->PolyRectangleThinSolid)
infoRec->PolyRectangleThinSolid = XAAOverPolyRectangleThinSolid;
if (infoRec->PolylinesWideSolid)
infoRec->PolylinesWideSolid = XAAOverPolylinesWideSolid;
if (infoRec->PolylinesThinSolid)
infoRec->PolylinesThinSolid = XAAOverPolylinesThinSolid;
if (infoRec->PolySegmentThinSolid)
infoRec->PolySegmentThinSolid = XAAOverPolySegmentThinSolid;
if (infoRec->PolylinesThinDashed)
infoRec->PolylinesThinDashed = XAAOverPolylinesThinDashed;
if (infoRec->PolySegmentThinDashed)
infoRec->PolySegmentThinDashed = XAAOverPolySegmentThinDashed;
if (infoRec->FillPolygonSolid)
infoRec->FillPolygonSolid = XAAOverFillPolygonSolid;
if (infoRec->FillPolygonStippled)
infoRec->FillPolygonStippled = XAAOverFillPolygonStippled;
if (infoRec->FillPolygonOpaqueStippled)
infoRec->FillPolygonOpaqueStippled = XAAOverFillPolygonOpaqueStippled;
if (infoRec->FillPolygonTiled)
infoRec->FillPolygonTiled = XAAOverFillPolygonTiled;
if (infoRec->PolyFillArcSolid)
infoRec->PolyFillArcSolid = XAAOverPolyFillArcSolid;
if (infoRec->PutImage)
infoRec->PutImage = XAAOverPutImage;
return TRUE;
}
/*********************** Screen functions ************************/
void
XAAOverCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pScreen);
ScrnInfoPtr pScrn = infoRec->pScrn;
DDXPointPtr ppt, pptSrc;
RegionRec rgnDst;
BoxPtr pbox;
int i, nbox, dx, dy;
WindowPtr pRoot = pScreen->root;
if (!pScrn->vtSema || !infoRec->ScreenToScreenBitBlt) {
XAA_SCREEN_PROLOGUE(pScreen, CopyWindow);
if (pScrn->vtSema && infoRec->NeedToSync) {
(*infoRec->Sync) (pScrn);
infoRec->NeedToSync = FALSE;
}
(*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
XAA_SCREEN_EPILOGUE(pScreen, CopyWindow, XAAOverCopyWindow);
return;
}
infoRec->ScratchGC.alu = GXcopy;
infoRec->ScratchGC.planemask = ~0;
RegionNull(&rgnDst);
dx = ptOldOrg.x - pWin->drawable.x;
dy = ptOldOrg.y - pWin->drawable.y;
RegionTranslate(prgnSrc, -dx, -dy);
RegionIntersect(&rgnDst, &pWin->borderClip, prgnSrc);
nbox = RegionNumRects(&rgnDst);
if (nbox && (pptSrc = (DDXPointPtr) malloc(nbox * sizeof(DDXPointRec)))) {
pbox = RegionRects(&rgnDst);
for (i = nbox, ppt = pptSrc; i--; ppt++, pbox++) {
ppt->x = pbox->x1 + dx;
ppt->y = pbox->y1 + dy;
}
SWITCH_DEPTH(8);
XAADoBitBlt((DrawablePtr) pRoot, (DrawablePtr) pRoot,
&(infoRec->ScratchGC), &rgnDst, pptSrc);
if (pWin->drawable.bitsPerPixel != 8) {
SWITCH_DEPTH(pScrn->depth);
XAADoBitBlt((DrawablePtr) pRoot, (DrawablePtr) pRoot,
&(infoRec->ScratchGC), &rgnDst, pptSrc);
}
free(pptSrc);
}
RegionUninit(&rgnDst);
if (pWin->drawable.depth == 8) {
RegionNull(&rgnDst);
miSegregateChildren(pWin, &rgnDst, pScrn->depth);
if (RegionNotEmpty(&rgnDst)) {
RegionIntersect(&rgnDst, &rgnDst, prgnSrc);
nbox = RegionNumRects(&rgnDst);
if (nbox &&
(pptSrc = (DDXPointPtr) malloc(nbox * sizeof(DDXPointRec)))) {
pbox = RegionRects(&rgnDst);
for (i = nbox, ppt = pptSrc; i--; ppt++, pbox++) {
ppt->x = pbox->x1 + dx;
ppt->y = pbox->y1 + dy;
}
SWITCH_DEPTH(pScrn->depth);
XAADoBitBlt((DrawablePtr) pRoot, (DrawablePtr) pRoot,
&(infoRec->ScratchGC), &rgnDst, pptSrc);
free(pptSrc);
}
}
RegionUninit(&rgnDst);
}
}
void
XAAOverWindowExposures(WindowPtr pWin, RegionPtr pReg, RegionPtr pOtherReg)
{
ScreenPtr pScreen = pWin->drawable.pScreen;
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
if ((pWin->drawable.bitsPerPixel != 8) && infoRec->pScrn->vtSema) {
if (RegionNumRects(pReg) && infoRec->FillSolidRects) {
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pScreen);
SWITCH_DEPTH(8);
(*infoRec->FillSolidRects) (infoRec->pScrn,
infoRec->pScrn->colorKey, GXcopy, ~0,
RegionNumRects(pReg),
RegionRects(pReg));
miWindowExposures(pWin, pReg, pOtherReg);
return;
}
else if (infoRec->NeedToSync) {
(*infoRec->Sync) (infoRec->pScrn);
infoRec->NeedToSync = FALSE;
}
}
XAA_SCREEN_PROLOGUE(pScreen, WindowExposures);
(*pScreen->WindowExposures) (pWin, pReg, pOtherReg);
XAA_SCREEN_EPILOGUE(pScreen, WindowExposures, XAAOverWindowExposures);
}
/********************* Choosers *************************/
static int
XAAOverStippledFillChooser(GCPtr pGC)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
int ret;
ret = (*pOverPriv->StippledFillChooser) (pGC);
if ((pGC->depth == 8) && ((ret == DO_COLOR_8x8) || (ret == DO_CACHE_BLT))) {
ret = 0;
}
return ret;
}
static int
XAAOverOpaqueStippledFillChooser(GCPtr pGC)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
int ret;
ret = (*pOverPriv->OpaqueStippledFillChooser) (pGC);
if ((pGC->depth == 8) && ((ret == DO_COLOR_8x8) || (ret == DO_CACHE_BLT))) {
ret = 0;
}
return ret;
}
static int
XAAOverTiledFillChooser(GCPtr pGC)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
int ret;
ret = (*pOverPriv->TiledFillChooser) (pGC);
if ((pGC->depth == 8) && ((ret == DO_COLOR_8x8) || (ret == DO_CACHE_BLT))) {
ret = 0;
}
return ret;
}
/**************************** GC Functions **************************/
static RegionPtr
XAAOverCopyArea(DrawablePtr pSrc,
DrawablePtr pDst,
GC * pGC,
int srcx, int srcy, int width, int height, int dstx, int dsty)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
return (*pOverPriv->CopyArea) (pSrc, pDst,
pGC, srcx, srcy, width, height, dstx, dsty);
}
static RegionPtr
XAAOverCopyPlane(DrawablePtr pSrc,
DrawablePtr pDst,
GCPtr pGC,
int srcx, int srcy,
int width, int height,
int dstx, int dsty, unsigned long bitPlane)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
return (*pOverPriv->CopyPlane) (pSrc, pDst,
pGC, srcx, srcy, width, height, dstx, dsty,
bitPlane);
}
static void
XAAOverPushPixelsSolid(GCPtr pGC,
PixmapPtr pBitMap,
DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PushPixelsSolid) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
}
static void
XAAOverPolyFillRectSolid(DrawablePtr pDraw,
GCPtr pGC, int nrectFill, xRectangle *prectInit)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyFillRectSolid) (pDraw, pGC, nrectFill, prectInit);
}
static void
XAAOverPolyFillRectStippled(DrawablePtr pDraw,
GCPtr pGC, int nrectFill, xRectangle *prectInit)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyFillRectStippled) (pDraw, pGC, nrectFill, prectInit);
}
static void
XAAOverPolyFillRectOpaqueStippled(DrawablePtr pDraw,
GCPtr pGC,
int nrectFill, xRectangle *prectInit)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyFillRectOpaqueStippled) (pDraw, pGC, nrectFill, prectInit);
}
static void
XAAOverPolyFillRectTiled(DrawablePtr pDraw,
GCPtr pGC, int nrectFill, xRectangle *prectInit)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyFillRectTiled) (pDraw, pGC, nrectFill, prectInit);
}
static void
XAAOverFillSpansSolid(DrawablePtr pDraw,
GCPtr pGC,
int nInit, DDXPointPtr ppt, int *pwidth, int fSorted)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillSpansSolid) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
}
static void
XAAOverFillSpansStippled(DrawablePtr pDraw,
GCPtr pGC,
int nInit, DDXPointPtr ppt, int *pwidth, int fSorted)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillSpansStippled) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
}
static void
XAAOverFillSpansOpaqueStippled(DrawablePtr pDraw,
GCPtr pGC,
int nInit,
DDXPointPtr ppt, int *pwidth, int fSorted)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillSpansOpaqueStippled) (pDraw, pGC, nInit, ppt, pwidth,
fSorted);
}
static void
XAAOverFillSpansTiled(DrawablePtr pDraw,
GCPtr pGC,
int nInit, DDXPointPtr ppt, int *pwidth, int fSorted)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillSpansTiled) (pDraw, pGC, nInit, ppt, pwidth, fSorted);
}
static int
XAAOverPolyText8TE(DrawablePtr pDraw,
GCPtr pGC, int x, int y, int count, char *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
return (*pOverPriv->PolyText8TE) (pDraw, pGC, x, y, count, chars);
}
static int
XAAOverPolyText16TE(DrawablePtr pDraw,
GCPtr pGC, int x, int y, int count, unsigned short *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
return (*pOverPriv->PolyText16TE) (pDraw, pGC, x, y, count, chars);
}
static void
XAAOverImageText8TE(DrawablePtr pDraw,
GCPtr pGC, int x, int y, int count, char *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->ImageText8TE) (pDraw, pGC, x, y, count, chars);
}
static void
XAAOverImageText16TE(DrawablePtr pDraw,
GCPtr pGC, int x, int y, int count, unsigned short *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->ImageText16TE) (pDraw, pGC, x, y, count, chars);
}
static void
XAAOverImageGlyphBltTE(DrawablePtr pDraw,
GCPtr pGC,
int xInit, int yInit,
unsigned int nglyph,
CharInfoPtr * ppci, pointer pglyphBase)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->ImageGlyphBltTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
pglyphBase);
}
static void
XAAOverPolyGlyphBltTE(DrawablePtr pDraw,
GCPtr pGC,
int xInit, int yInit,
unsigned int nglyph,
CharInfoPtr * ppci, pointer pglyphBase)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyGlyphBltTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
pglyphBase);
}
static int
XAAOverPolyText8NonTE(DrawablePtr pDraw,
GCPtr pGC, int x, int y, int count, char *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
return (*pOverPriv->PolyText8NonTE) (pDraw, pGC, x, y, count, chars);
}
static int
XAAOverPolyText16NonTE(DrawablePtr pDraw,
GCPtr pGC,
int x, int y, int count, unsigned short *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
return (*pOverPriv->PolyText16NonTE) (pDraw, pGC, x, y, count, chars);
}
static void
XAAOverImageText8NonTE(DrawablePtr pDraw,
GCPtr pGC, int x, int y, int count, char *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->ImageText8NonTE) (pDraw, pGC, x, y, count, chars);
}
static void
XAAOverImageText16NonTE(DrawablePtr pDraw,
GCPtr pGC,
int x, int y, int count, unsigned short *chars)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->ImageText16NonTE) (pDraw, pGC, x, y, count, chars);
}
static void
XAAOverImageGlyphBltNonTE(DrawablePtr pDraw,
GCPtr pGC,
int xInit, int yInit,
unsigned int nglyph,
CharInfoPtr * ppci, pointer pglyphBase)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->ImageGlyphBltNonTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
pglyphBase);
}
static void
XAAOverPolyGlyphBltNonTE(DrawablePtr pDraw,
GCPtr pGC,
int xInit, int yInit,
unsigned int nglyph,
CharInfoPtr * ppci, pointer pglyphBase)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyGlyphBltNonTE) (pDraw, pGC, xInit, yInit, nglyph, ppci,
pglyphBase);
}
static void
XAAOverPolyRectangleThinSolid(DrawablePtr pDraw,
GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyRectangleThinSolid) (pDraw, pGC, nRectsInit, pRectsInit);
}
static void
XAAOverPolylinesWideSolid(DrawablePtr pDraw,
GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolylinesWideSolid) (pDraw, pGC, mode, npt, pPts);
}
static void
XAAOverPolylinesThinSolid(DrawablePtr pDraw,
GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolylinesThinSolid) (pDraw, pGC, mode, npt, pPts);
}
static void
XAAOverPolySegmentThinSolid(DrawablePtr pDraw,
GCPtr pGC, int nseg, xSegment * pSeg)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolySegmentThinSolid) (pDraw, pGC, nseg, pSeg);
}
static void
XAAOverPolylinesThinDashed(DrawablePtr pDraw,
GCPtr pGC, int mode, int npt, DDXPointPtr pPts)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolylinesThinDashed) (pDraw, pGC, mode, npt, pPts);
}
static void
XAAOverPolySegmentThinDashed(DrawablePtr pDraw,
GCPtr pGC, int nseg, xSegment * pSeg)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolySegmentThinDashed) (pDraw, pGC, nseg, pSeg);
}
static void
XAAOverFillPolygonSolid(DrawablePtr pDraw,
GCPtr pGC,
int shape, int mode, int count, DDXPointPtr ptsIn)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillPolygonSolid) (pDraw, pGC, shape, mode, count, ptsIn);
}
static void
XAAOverFillPolygonStippled(DrawablePtr pDraw,
GCPtr pGC,
int shape, int mode, int count, DDXPointPtr ptsIn)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillPolygonStippled) (pDraw, pGC, shape, mode, count, ptsIn);
}
static void
XAAOverFillPolygonOpaqueStippled(DrawablePtr pDraw,
GCPtr pGC,
int shape,
int mode, int count, DDXPointPtr ptsIn)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillPolygonOpaqueStippled) (pDraw, pGC, shape, mode, count,
ptsIn);
}
static void
XAAOverFillPolygonTiled(DrawablePtr pDraw,
GCPtr pGC,
int shape, int mode, int count, DDXPointPtr ptsIn)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->FillPolygonTiled) (pDraw, pGC, shape, mode, count, ptsIn);
}
static void
XAAOverPolyFillArcSolid(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PolyFillArcSolid) (pDraw, pGC, narcs, parcs);
}
static void
XAAOverPutImage(DrawablePtr pDraw,
GCPtr pGC,
int depth,
int x,
int y, int w, int h, int leftPad, int format, char *pImage)
{
XAAOverlayPtr pOverPriv = GET_OVERLAY_PRIV(pGC->pScreen);
SWITCH_DEPTH(pGC->depth);
(*pOverPriv->PutImage) (pDraw, pGC, depth, x, y, w, h,
leftPad, format, pImage);
}