282 lines
7.9 KiB
C
282 lines
7.9 KiB
C
|
|
#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 "xf86str.h"
|
|
#include "xaa.h"
|
|
#include "xaalocal.h"
|
|
#include "gcstruct.h"
|
|
#include "pixmapstr.h"
|
|
#include "xaawrap.h"
|
|
|
|
static void
|
|
XAAFillSpansFallback(DrawablePtr pDraw,
|
|
GC * pGC,
|
|
int nInit,
|
|
DDXPointPtr pptInit, int *pwidthInit, int fSorted)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->FillSpans) (pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAASetSpansFallback(DrawablePtr pDraw,
|
|
GCPtr pGC,
|
|
char *pcharsrc,
|
|
register DDXPointPtr ppt,
|
|
int *pwidth, int nspans, int fSorted)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->SetSpans) (pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPutImageFallback(DrawablePtr pDraw,
|
|
GCPtr pGC,
|
|
int depth,
|
|
int x, int y, int w, int h,
|
|
int leftPad, int format, char *pImage)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h,
|
|
leftPad, format, pImage);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static RegionPtr
|
|
XAACopyAreaFallback(DrawablePtr pSrc,
|
|
DrawablePtr pDst,
|
|
GC * pGC,
|
|
int srcx, int srcy,
|
|
int width, int height, int dstx, int dsty)
|
|
{
|
|
RegionPtr ret;
|
|
|
|
XAA_GC_OP_PROLOGUE(pGC);
|
|
if ((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
|
|
IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
|
|
SYNC_CHECK(pGC);
|
|
}
|
|
ret = (*pGC->ops->CopyArea) (pSrc, pDst,
|
|
pGC, srcx, srcy, width, height, dstx, dsty);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
return ret;
|
|
}
|
|
|
|
static RegionPtr
|
|
XAACopyPlaneFallback(DrawablePtr pSrc,
|
|
DrawablePtr pDst,
|
|
GCPtr pGC,
|
|
int srcx, int srcy,
|
|
int width, int height,
|
|
int dstx, int dsty, unsigned long bitPlane)
|
|
{
|
|
RegionPtr ret;
|
|
|
|
XAA_GC_OP_PROLOGUE(pGC);
|
|
if ((pSrc->type == DRAWABLE_WINDOW) || (pDst->type == DRAWABLE_WINDOW) ||
|
|
IS_OFFSCREEN_PIXMAP(pSrc) || IS_OFFSCREEN_PIXMAP(pDst)) {
|
|
SYNC_CHECK(pGC);
|
|
}
|
|
ret = (*pGC->ops->CopyPlane) (pSrc, pDst,
|
|
pGC, srcx, srcy, width, height, dstx, dsty,
|
|
bitPlane);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
return ret;
|
|
}
|
|
|
|
static void
|
|
XAAPolyPointFallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int mode, int npt, xPoint * pptInit)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolyPoint) (pDraw, pGC, mode, npt, pptInit);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolylinesFallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->Polylines) (pDraw, pGC, mode, npt, pptInit);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolySegmentFallback(DrawablePtr pDraw, GCPtr pGC, int nseg, xSegment * pSeg)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolySegment) (pDraw, pGC, nseg, pSeg);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolyRectangleFallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolyRectangle) (pDraw, pGC, nRectsInit, pRectsInit);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolyArcFallback(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolyArc) (pDraw, pGC, narcs, parcs);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAFillPolygonFallback(DrawablePtr pDraw,
|
|
GCPtr pGC,
|
|
int shape, int mode, int count, DDXPointPtr ptsIn)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolyFillRectFallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int nrectFill, xRectangle *prectInit)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolyFillArcFallback(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, parcs);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static int
|
|
XAAPolyText8Fallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int x, int y, int count, char *chars)
|
|
{
|
|
int ret;
|
|
|
|
XAA_GC_OP_PROLOGUE(pGC);
|
|
SYNC_CHECK(pGC);
|
|
ret = (*pGC->ops->PolyText8) (pDraw, pGC, x, y, count, chars);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
return ret;
|
|
}
|
|
|
|
static int
|
|
XAAPolyText16Fallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int x, int y, int count, unsigned short *chars)
|
|
{
|
|
int ret;
|
|
|
|
XAA_GC_OP_PROLOGUE(pGC);
|
|
SYNC_CHECK(pGC);
|
|
ret = (*pGC->ops->PolyText16) (pDraw, pGC, x, y, count, chars);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
return ret;
|
|
}
|
|
|
|
static void
|
|
XAAImageText8Fallback(DrawablePtr pDraw,
|
|
GCPtr pGC, int x, int y, int count, char *chars)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->ImageText8) (pDraw, pGC, x, y, count, chars);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAImageText16Fallback(DrawablePtr pDraw,
|
|
GCPtr pGC,
|
|
int x, int y, int count, unsigned short *chars)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->ImageText16) (pDraw, pGC, x, y, count, chars);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAImageGlyphBltFallback(DrawablePtr pDraw,
|
|
GCPtr pGC,
|
|
int xInit, int yInit,
|
|
unsigned int nglyph,
|
|
CharInfoPtr * ppci, pointer pglyphBase)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->ImageGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph, ppci,
|
|
pglyphBase);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPolyGlyphBltFallback(DrawablePtr pDraw,
|
|
GCPtr pGC,
|
|
int xInit, int yInit,
|
|
unsigned int nglyph,
|
|
CharInfoPtr * ppci, pointer pglyphBase)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PolyGlyphBlt) (pDraw, pGC, xInit, yInit, nglyph, ppci,
|
|
pglyphBase);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
static void
|
|
XAAPushPixelsFallback(GCPtr pGC,
|
|
PixmapPtr pBitMap,
|
|
DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
|
|
{
|
|
XAA_GC_OP_PROLOGUE_WITH_RETURN(pGC);
|
|
SYNC_CHECK(pGC);
|
|
(*pGC->ops->PushPixels) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
|
|
XAA_GC_OP_EPILOGUE(pGC);
|
|
}
|
|
|
|
GCOps XAAFallbackOps = {
|
|
XAAFillSpansFallback, XAASetSpansFallback,
|
|
XAAPutImageFallback, XAACopyAreaFallback,
|
|
XAACopyPlaneFallback, XAAPolyPointFallback,
|
|
XAAPolylinesFallback, XAAPolySegmentFallback,
|
|
XAAPolyRectangleFallback, XAAPolyArcFallback,
|
|
XAAFillPolygonFallback, XAAPolyFillRectFallback,
|
|
XAAPolyFillArcFallback, XAAPolyText8Fallback,
|
|
XAAPolyText16Fallback, XAAImageText8Fallback,
|
|
XAAImageText16Fallback, XAAImageGlyphBltFallback,
|
|
XAAPolyGlyphBltFallback, XAAPushPixelsFallback,
|
|
};
|
|
|
|
GCOps *
|
|
XAAGetFallbackOps(void)
|
|
{
|
|
return &XAAFallbackOps;
|
|
}
|