#include "X.h"
#include "pixmap.h"
#include "region.h"
#include "gc.h"
#include "colormap.h"
#include "miscstruct.h"
#include "servermd.h"
#include "windowstr.h"
#include "mfb.h"
#undef PixelType
#include "iplmap.h"
extern int iplGCPrivateIndex;
extern int iplWindowPrivateIndex;
typedef struct {
unsigned char rop;
unsigned char ropOpStip;
unsigned char oneRect;
unsigned long xor, and;
unsigned short xorg[INTER_PLANES],andg[INTER_PLANES];
} iplPrivGC;
typedef iplPrivGC *iplPrivGCPtr;
#define iplGetGCPrivate(pGC) ((iplPrivGCPtr)\
(pGC)->devPrivates[iplGCPrivateIndex].ptr)
#define iplGetCompositeClip(pGC) ((pGC)->pCompositeClip)
typedef struct {
unsigned char rop;
unsigned long xor, and;
unsigned short xorg[INTER_PLANES],andg[INTER_PLANES];
} iplRRopRec, *iplRRopPtr;
typedef struct {
unsigned char fastBorder;
unsigned char fastBackground;
unsigned short unused;
DDXPointRec oldRotate;
PixmapPtr pRotatedBackground;
PixmapPtr pRotatedBorder;
} iplPrivWin;
#define iplGetWindowPrivate(_pWin) ((iplPrivWin *)\
(_pWin)->devPrivates[iplWindowPrivateIndex].ptr)
extern int iplSetStipple(
int ,
unsigned long ,
unsigned long
);
extern int iplSetOpaqueStipple(
int ,
unsigned long ,
unsigned long ,
unsigned long
);
extern int iplComputeClipMasks32(
BoxPtr ,
int ,
int ,
int ,
int ,
int ,
CARD32 *
);
extern void iplCopyImagePlane(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void iplCopyPlane8to1(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long ,
unsigned long
);
extern int ipl8LineSS1RectCopy(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr ,
DDXPointPtr ,
int * ,
int * ,
int * ,
int *
);
extern void ipl8LineSS1Rect(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void ipl8ClippedLineCopy(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
BoxPtr ,
Bool
);
extern int ipl8LineSS1RectPreviousCopy(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr ,
DDXPointPtr ,
int * ,
int * ,
int * ,
int *
);
extern int ipl8LineSS1RectGeneral(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr ,
DDXPointPtr ,
int * ,
int * ,
int * ,
int *
);
extern void ipl8ClippedLineGeneral(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
BoxPtr ,
Bool
);
extern int ipl8LineSS1RectXor(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr ,
DDXPointPtr ,
int * ,
int * ,
int * ,
int *
);
extern void ipl8ClippedLineXor(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
BoxPtr ,
Bool
);
extern int ipl8SegmentSS1RectCopy(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern int ipl8SegmentSS1RectShiftCopy(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void ipl8SegmentSS1Rect(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern int ipl8SegmentSS1RectGeneral(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern int ipl8SegmentSS1RectXor(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern Bool iplAllocatePrivates(
ScreenPtr ,
int * ,
int *
);
extern RegionPtr iplBitBlt(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int ,
void (* )(),
unsigned long
);
extern void iplDoBitblt(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern RegionPtr iplCopyArea(
DrawablePtr ,
DrawablePtr ,
GCPtr,
int ,
int ,
int ,
int ,
int ,
int
);
extern void iplCopyPlane1to8(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long ,
unsigned long
);
extern RegionPtr iplCopyPlane(
DrawablePtr ,
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
unsigned long
);
extern void iplDoBitbltCopy(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void iplDoBitbltGeneral(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void iplDoBitbltOr(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void iplDoBitbltXor(
DrawablePtr ,
DrawablePtr ,
int ,
RegionPtr ,
DDXPointPtr ,
unsigned long
);
extern void iplBresS(
int ,
unsigned short * ,
unsigned short * ,
unsigned short * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int
);
extern void iplBresD(
iplRRopPtr ,
int * ,
unsigned char * ,
int ,
int * ,
int ,
unsigned short * ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
int
);
extern void iplSaveAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern void iplRestoreAreas(
PixmapPtr ,
RegionPtr ,
int ,
int ,
WindowPtr
);
extern int iplListInstalledColormaps(
ScreenPtr ,
Colormap *
);
extern void iplInstallColormap(
ColormapPtr
);
extern void iplUninstallColormap(
ColormapPtr
);
extern void iplResolveColor(
unsigned short * ,
unsigned short * ,
unsigned short * ,
VisualPtr
);
extern Bool iplInitializeColormap(
ColormapPtr
);
extern int iplExpandDirectColors(
ColormapPtr ,
int ,
xColorItem * ,
xColorItem *
);
extern Bool iplCreateDefColormap(
ScreenPtr
);
extern Bool iplSetVisualTypes(
int ,
int ,
int
);
extern Bool iplInitVisuals(
VisualPtr * ,
DepthPtr * ,
int * ,
int * ,
int * ,
VisualID * ,
unsigned long ,
int
);
extern void iplPolyFillArcSolidCopy(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void iplPolyFillArcSolidGeneral(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void iplFillBoxTileOdd(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int
);
extern void iplFillRectTileOdd(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void iplPolyFillRect(
DrawablePtr ,
GCPtr ,
int ,
xRectangle *
);
extern void iplUnnaturalTileFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void iplUnnaturalStippleFS(
DrawablePtr ,
GCPtr,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ipl8Stipple32FS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void ipl8OpaqueStipple32FS(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern GCOpsPtr iplMatchCommon(
GCPtr ,
iplPrivGCPtr
);
extern Bool iplCreateGC(
GCPtr
);
extern void iplValidateGC(
GCPtr ,
unsigned long ,
DrawablePtr
);
extern void iplGetSpans(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
int ,
char *
);
extern void iplPolyGlyphBlt8(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void iplPolyGlyphRop8(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern int iplHorzS(
int ,
unsigned short * ,
unsigned short * ,
unsigned short * ,
int ,
int ,
int ,
int
);
extern int iplVertS(
int ,
unsigned short * ,
unsigned short * ,
unsigned short * ,
int ,
int ,
int ,
int
);
extern void iplImageGlyphBlt8(
DrawablePtr ,
GCPtr ,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void iplPutImage(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
int ,
int ,
int ,
int ,
char *
);
extern void iplGetImage(
DrawablePtr ,
int ,
int ,
int ,
int ,
unsigned int ,
unsigned long ,
char *
);
extern void iplLineSS(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern void iplLineSD(
DrawablePtr ,
GCPtr ,
int ,
int ,
DDXPointPtr
);
extern PixmapPtr iplCreatePixmap(
ScreenPtr ,
int ,
int ,
int
);
extern Bool iplDestroyPixmap(
PixmapPtr
);
extern PixmapPtr iplCopyPixmap(
PixmapPtr
);
extern void iplPadPixmap(
PixmapPtr
);
extern void iplXRotatePixmap(
PixmapPtr ,
int
);
extern void iplYRotatePixmap(
PixmapPtr ,
int
);
extern void iplCopyRotatePixmap(
PixmapPtr ,
PixmapPtr * ,
int ,
int
);
extern void iplFillPoly1RectCopy(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void iplFillPoly1RectGeneral(
DrawablePtr ,
GCPtr ,
int ,
int ,
int ,
DDXPointPtr
);
extern void iplPaintWindow(
WindowPtr ,
RegionPtr ,
int
);
extern void iplFillBoxSolid(
DrawablePtr ,
int ,
BoxPtr ,
unsigned long
);
extern void iplFillBoxTile32(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr
);
extern void iplPolyPoint(
DrawablePtr ,
GCPtr ,
int ,
int ,
xPoint *
);
extern void iplPushPixels8(
GCPtr ,
PixmapPtr ,
DrawablePtr ,
int ,
int ,
int ,
int
);
extern void ipl8FillRectOpaqueStippled32(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void ipl8FillRectTransparentStippled32(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void ipl8FillRectStippledUnnatural(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern int iplReduceRasterOp(
int ,
unsigned long ,
unsigned long ,
unsigned short * ,
unsigned short *
);
extern Bool iplCloseScreen(
int ,
ScreenPtr
);
extern Bool iplSetupScreen(
ScreenPtr ,
pointer ,
int ,
int ,
int ,
int ,
int
);
extern int iplFinishScreenInit(
ScreenPtr ,
pointer ,
int ,
int ,
int ,
int ,
int
);
extern Bool iplScreenInit(
ScreenPtr ,
pointer ,
int ,
int ,
int ,
int ,
int
);
extern PixmapPtr iplGetScreenPixmap(
ScreenPtr
);
extern void iplSetScreenPixmap(
PixmapPtr
);
extern void iplSegmentSS(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern void iplSegmentSD(
DrawablePtr ,
GCPtr ,
int ,
xSegment *
);
extern int iplSetScanline(
int ,
int ,
int ,
int ,
unsigned int * ,
int ,
unsigned short * ,
int ,
unsigned long
);
extern void iplSetSpans(
DrawablePtr ,
GCPtr ,
char * ,
DDXPointPtr ,
int * ,
int ,
int
);
extern void iplFillRectSolidCopy(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void iplSolidSpansCopy(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void iplFillRectSolidGeneral(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void iplSolidSpansGeneral(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void iplFillRectSolidXor(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void iplSolidSpansXor(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void iplTEGlyphBlt8(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void iplTEGlyphBlt(
DrawablePtr ,
GCPtr,
int ,
int ,
unsigned int ,
CharInfoPtr * ,
pointer
);
extern void iplFillRectTile32Copy(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void iplTile32FSCopy(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void iplFillRectTile32General(
DrawablePtr ,
GCPtr ,
int ,
BoxPtr
);
extern void iplTile32FSGeneral(
DrawablePtr ,
GCPtr ,
int ,
DDXPointPtr ,
int * ,
int
);
extern void iplFillBoxTileOddCopy(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillSpanTileOddCopy(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillBoxTile32sCopy(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillSpanTile32sCopy(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillBoxTileOddGeneral(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillSpanTileOddGeneral(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillBoxTile32sGeneral(
DrawablePtr ,
int ,
BoxPtr ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern void iplFillSpanTile32sGeneral(
DrawablePtr ,
int ,
DDXPointPtr ,
int * ,
PixmapPtr ,
int ,
int ,
int ,
unsigned long
);
extern Bool iplCreateWindow(
WindowPtr
);
extern Bool iplDestroyWindow(
WindowPtr
);
extern Bool iplMapWindow(
WindowPtr
);
extern Bool iplPositionWindow(
WindowPtr ,
int ,
int
);
extern Bool iplUnmapWindow(
WindowPtr
);
extern void iplCopyWindow(
WindowPtr ,
DDXPointRec ,
RegionPtr
);
extern Bool iplChangeWindowAttributes(
WindowPtr ,
unsigned long
);
extern void iplZeroPolyArcSS8Copy(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void iplZeroPolyArcSS8General(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
extern void iplZeroPolyArcSS8Xor(
DrawablePtr ,
GCPtr ,
int ,
xArc *
);
#if (!defined(SINGLEDEPTH) && PSZ != 8) || defined(FORCE_SEPARATE_PRIVATE)
#define CFB_NEED_SCREEN_PRIVATE
extern int iplScreenPrivateIndex;
#endif
#define iplGetWindowPixmap(d) \
((* ((DrawablePtr)(d))->pScreen->GetWindowPixmap)((WindowPtr)(d)))
#define iplGetTypedWidth(pDrawable,wtype) (\
(((pDrawable)->type != DRAWABLE_PIXMAP) ? \
(int) (iplGetWindowPixmap(pDrawable)->devKind) : \
(int)(((PixmapPtr)pDrawable)->devKind)) / sizeof (wtype))
#define iplGetByteWidth(pDrawable) iplGetTypedWidth(pDrawable, unsigned char)
#define iplGetPixelWidth(pDrawable) iplGetTypedWidth(pDrawable, PixelType)
#define iplGetLongWidth(pDrawable) iplGetTypedWidth(pDrawable, unsigned long)
#define iplGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\
PixmapPtr _pPix; \
if ((pDrawable)->type != DRAWABLE_PIXMAP) \
_pPix = iplGetWindowPixmap(pDrawable); \
else \
_pPix = (PixmapPtr) (pDrawable); \
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
}
#define iplGetByteWidthAndPointer(pDrawable, width, pointer) \
iplGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)
#define iplGetLongWidthAndPointer(pDrawable, width, pointer) \
iplGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned long, unsigned long)
#define iplGetPixelWidthAndPointer(pDrawable, width, pointer) \
iplGetTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
#define iplGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\
PixmapPtr _pPix = iplGetWindowPixmap((DrawablePtr) (pWin)); \
(pointer) = (ptype *) _pPix->devPrivate.ptr; \
(width) = ((int) _pPix->devKind) / sizeof (wtype); \
}
#define iplGetWindowLongWidthAndPointer(pWin, width, pointer) \
iplGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned long, unsigned long)
#define iplGetWindowByteWidthAndPointer(pWin, width, pointer) \
iplGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned char, unsigned char)
#define iplGetWindowPixelWidthAndPointer(pDrawable, width, pointer) \
iplGetWindowTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType)
#if defined(mips) || defined(sparc) || defined(__alpha) || defined(__alpha__)
#define GetHighWord(x) (((int) (x)) >> 16)
#else
#define GetHighWord(x) (((int) (x)) / 65536)
#endif
#if IMAGE_BYTE_ORDER == MSBFirst
#define intToCoord(i,x,y) (((x) = GetHighWord(i)), ((y) = (int) ((short) (i))))
#define coordToInt(x,y) (((x) << 16) | (y))
#define intToX(i) (GetHighWord(i))
#define intToY(i) ((int) ((short) i))
#else
#define intToCoord(i,x,y) (((x) = (int) ((short) (i))), ((y) = GetHighWord(i)))
#define coordToInt(x,y) (((y) << 16) | (x))
#define intToX(i) ((int) ((short) (i)))
#define intToY(i) (GetHighWord(i))
#endif