/* * * Copyright © 1998 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _FB_H_ #define _FB_H_ #include #include "scrnintstr.h" #include "pixmap.h" #include "pixmapstr.h" #include "region.h" #include "gcstruct.h" #include "colormap.h" #include "miscstruct.h" #include "servermd.h" #include "windowstr.h" #include "mi.h" #include "migc.h" #include "picturestr.h" /* * This single define controls the basic size of data manipulated * by this software; it must be log2(sizeof (FbBits) * 8) */ #ifndef FB_SHIFT #define FB_SHIFT LOG2_BITMAP_PAD #endif #if FB_SHIFT < LOG2_BITMAP_PAD error FB_SHIFT must be >= LOG2_BITMAP_PAD #endif #define FB_UNIT (1 << FB_SHIFT) #define FB_HALFUNIT (1 << (FB_SHIFT-1)) #define FB_MASK (FB_UNIT - 1) #define FB_ALLONES ((FbBits) -1) #if GLYPHPADBYTES != 4 #error "GLYPHPADBYTES must be 4" #endif #define FB_STIP_SHIFT LOG2_BITMAP_PAD #define FB_STIP_UNIT (1 << FB_STIP_SHIFT) #define FB_STIP_MASK (FB_STIP_UNIT - 1) #define FB_STIP_ALLONES ((FbStip) -1) #define FB_STIP_ODDSTRIDE(s) (((s) & (FB_MASK >> FB_STIP_SHIFT)) != 0) #define FB_STIP_ODDPTR(p) ((((long) (p)) & (FB_MASK >> 3)) != 0) #define FbStipStrideToBitsStride(s) (((s) >> (FB_SHIFT - FB_STIP_SHIFT))) #define FbBitsStrideToStipStride(s) (((s) << (FB_SHIFT - FB_STIP_SHIFT))) #define FbFullMask(n) ((n) == FB_UNIT ? FB_ALLONES : ((((FbBits) 1) << n) - 1)) #if FB_SHIFT == 6 # if defined(__alpha__) || defined(__alpha) || \ defined(ia64) || defined(__ia64__) || \ defined(__sparc64__) || defined(_LP64) || \ defined(__s390x__) || \ defined(amd64) || defined (__amd64__) || \ defined (__powerpc64__) || \ (defined(sgi) && (_MIPS_SZLONG == 64)) typedef unsigned long FbBits; # else typedef unsigned long long FbBits; # endif #endif #if FB_SHIFT == 5 typedef CARD32 FbBits; #endif #if FB_SHIFT == 4 typedef CARD16 FbBits; #endif #if LOG2_BITMAP_PAD == FB_SHIFT typedef FbBits FbStip; #else #if LOG2_BITMAP_PAD == 5 typedef CARD32 FbStip; #endif #endif typedef int FbStride; #ifdef FB_DEBUG extern _X_EXPORT void fbValidateDrawable(DrawablePtr d); extern _X_EXPORT void fbInitializeDrawable(DrawablePtr d); extern _X_EXPORT void fbSetBits(FbStip * bits, int stride, FbStip data); #define FB_HEAD_BITS (FbStip) (0xbaadf00d) #define FB_TAIL_BITS (FbStip) (0xbaddf0ad) #else #define fbValidateDrawable(d) #define fdInitializeDrawable(d) #endif #include "fbrop.h" #if BITMAP_BIT_ORDER == LSBFirst #define FbScrLeft(x,n) ((x) >> (n)) #define FbScrRight(x,n) ((x) << (n)) /* #define FbLeftBits(x,n) ((x) & ((((FbBits) 1) << (n)) - 1)) */ #define FbLeftStipBits(x,n) ((x) & ((((FbStip) 1) << (n)) - 1)) #define FbStipMoveLsb(x,s,n) (FbStipRight (x,(s)-(n))) #define FbPatternOffsetBits 0 #else #define FbScrLeft(x,n) ((x) << (n)) #define FbScrRight(x,n) ((x) >> (n)) /* #define FbLeftBits(x,n) ((x) >> (FB_UNIT - (n))) */ #define FbLeftStipBits(x,n) ((x) >> (FB_STIP_UNIT - (n))) #define FbStipMoveLsb(x,s,n) (x) #define FbPatternOffsetBits (sizeof (FbBits) - 1) #endif #include "micoord.h" #define FbStipLeft(x,n) FbScrLeft(x,n) #define FbStipRight(x,n) FbScrRight(x,n) #define FbRotLeft(x,n) FbScrLeft(x,n) | (n ? FbScrRight(x,FB_UNIT-n) : 0) #define FbRotRight(x,n) FbScrRight(x,n) | (n ? FbScrLeft(x,FB_UNIT-n) : 0) #define FbRotStipLeft(x,n) FbStipLeft(x,n) | (n ? FbStipRight(x,FB_STIP_UNIT-n) : 0) #define FbRotStipRight(x,n) FbStipRight(x,n) | (n ? FbStipLeft(x,FB_STIP_UNIT-n) : 0) #define FbLeftMask(x) ( ((x) & FB_MASK) ? \ FbScrRight(FB_ALLONES,(x) & FB_MASK) : 0) #define FbRightMask(x) ( ((FB_UNIT - (x)) & FB_MASK) ? \ FbScrLeft(FB_ALLONES,(FB_UNIT - (x)) & FB_MASK) : 0) #define FbLeftStipMask(x) ( ((x) & FB_STIP_MASK) ? \ FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) : 0) #define FbRightStipMask(x) ( ((FB_STIP_UNIT - (x)) & FB_STIP_MASK) ? \ FbScrLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - (x)) & FB_STIP_MASK) : 0) #define FbBitsMask(x,w) (FbScrRight(FB_ALLONES,(x) & FB_MASK) & \ FbScrLeft(FB_ALLONES,(FB_UNIT - ((x) + (w))) & FB_MASK)) #define FbStipMask(x,w) (FbStipRight(FB_STIP_ALLONES,(x) & FB_STIP_MASK) & \ FbStipLeft(FB_STIP_ALLONES,(FB_STIP_UNIT - ((x)+(w))) & FB_STIP_MASK)) #define FbMaskBits(x,w,l,n,r) { \ n = (w); \ r = FbRightMask((x)+n); \ l = FbLeftMask(x); \ if (l) { \ n -= FB_UNIT - ((x) & FB_MASK); \ if (n < 0) { \ n = 0; \ l &= r; \ r = 0; \ } \ } \ n >>= FB_SHIFT; \ } #define FbByteMaskInvalid 0x10 #define FbPatternOffset(o,t) ((o) ^ (FbPatternOffsetBits & ~(sizeof (t) - 1))) #define FbPtrOffset(p,o,t) ((t *) ((CARD8 *) (p) + (o))) #define FbSelectPatternPart(xor,o,t) ((xor) >> (FbPatternOffset (o,t) << 3)) #define FbStorePart(dst,off,t,xor) (*FbPtrOffset(dst,off,t) = \ FbSelectPart(xor,off,t)) #ifndef FbSelectPart #define FbSelectPart(x,o,t) FbSelectPatternPart(x,o,t) #endif #define FbMaskBitsBytes(x,w,copy,l,lb,n,r,rb) { \ n = (w); \ lb = 0; \ rb = 0; \ r = FbRightMask((x)+n); \ if (r) { \ /* compute right byte length */ \ if ((copy) && (((x) + n) & 7) == 0) { \ rb = (((x) + n) & FB_MASK) >> 3; \ } else { \ rb = FbByteMaskInvalid; \ } \ } \ l = FbLeftMask(x); \ if (l) { \ /* compute left byte length */ \ if ((copy) && ((x) & 7) == 0) { \ lb = ((x) & FB_MASK) >> 3; \ } else { \ lb = FbByteMaskInvalid; \ } \ /* subtract out the portion painted by leftMask */ \ n -= FB_UNIT - ((x) & FB_MASK); \ if (n < 0) { \ if (lb != FbByteMaskInvalid) { \ if (rb == FbByteMaskInvalid) { \ lb = FbByteMaskInvalid; \ } else if (rb) { \ lb |= (rb - lb) << (FB_SHIFT - 3); \ rb = 0; \ } \ } \ n = 0; \ l &= r; \ r = 0; \ }\ } \ n >>= FB_SHIFT; \ } #if FB_SHIFT == 6 #define FbDoLeftMaskByteRRop6Cases(dst,xor) \ case (sizeof (FbBits) - 7) | (1 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ break; \ case (sizeof (FbBits) - 7) | (2 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \ break; \ case (sizeof (FbBits) - 7) | (3 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ break; \ case (sizeof (FbBits) - 7) | (4 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ break; \ case (sizeof (FbBits) - 7) | (5 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ break; \ case (sizeof (FbBits) - 7) | (6 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ break; \ case (sizeof (FbBits) - 7): \ FbStorePart(dst,sizeof (FbBits) - 7,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ break; \ case (sizeof (FbBits) - 6) | (1 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 6,CARD8,xor); \ break; \ case (sizeof (FbBits) - 6) | (2 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ break; \ case (sizeof (FbBits) - 6) | (3 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ break; \ case (sizeof (FbBits) - 6) | (4 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ break; \ case (sizeof (FbBits) - 6) | (5 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ break; \ case (sizeof (FbBits) - 6): \ FbStorePart(dst,sizeof (FbBits) - 6,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ break; \ case (sizeof (FbBits) - 5) | (1 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ break; \ case (sizeof (FbBits) - 5) | (2 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ break; \ case (sizeof (FbBits) - 5) | (3 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ break; \ case (sizeof (FbBits) - 5) | (4 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ break; \ case (sizeof (FbBits) - 5): \ FbStorePart(dst,sizeof (FbBits) - 5,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ break; \ case (sizeof (FbBits) - 4) | (1 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 4,CARD8,xor); \ break; \ case (sizeof (FbBits) - 4) | (2 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ break; \ case (sizeof (FbBits) - 4) | (3 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 4,CARD16,xor); \ FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ break; \ case (sizeof (FbBits) - 4): \ FbStorePart(dst,sizeof (FbBits) - 4,CARD32,xor); \ break; #define FbDoRightMaskByteRRop6Cases(dst,xor) \ case 4: \ FbStorePart(dst,0,CARD32,xor); \ break; \ case 5: \ FbStorePart(dst,0,CARD32,xor); \ FbStorePart(dst,4,CARD8,xor); \ break; \ case 6: \ FbStorePart(dst,0,CARD32,xor); \ FbStorePart(dst,4,CARD16,xor); \ break; \ case 7: \ FbStorePart(dst,0,CARD32,xor); \ FbStorePart(dst,4,CARD16,xor); \ FbStorePart(dst,6,CARD8,xor); \ break; #else #define FbDoLeftMaskByteRRop6Cases(dst,xor) #define FbDoRightMaskByteRRop6Cases(dst,xor) #endif #define FbDoLeftMaskByteRRop(dst,lb,l,and,xor) { \ switch (lb) { \ FbDoLeftMaskByteRRop6Cases(dst,xor) \ case (sizeof (FbBits) - 3) | (1 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ break; \ case (sizeof (FbBits) - 3) | (2 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ break; \ case (sizeof (FbBits) - 2) | (1 << (FB_SHIFT - 3)): \ FbStorePart(dst,sizeof (FbBits) - 2,CARD8,xor); \ break; \ case sizeof (FbBits) - 3: \ FbStorePart(dst,sizeof (FbBits) - 3,CARD8,xor); \ case sizeof (FbBits) - 2: \ FbStorePart(dst,sizeof (FbBits) - 2,CARD16,xor); \ break; \ case sizeof (FbBits) - 1: \ FbStorePart(dst,sizeof (FbBits) - 1,CARD8,xor); \ break; \ default: \ *dst = FbDoMaskRRop(*dst, and, xor, l); \ break; \ } \ } #define FbDoRightMaskByteRRop(dst,rb,r,and,xor) { \ switch (rb) { \ case 1: \ FbStorePart(dst,0,CARD8,xor); \ break; \ case 2: \ FbStorePart(dst,0,CARD16,xor); \ break; \ case 3: \ FbStorePart(dst,0,CARD16,xor); \ FbStorePart(dst,2,CARD8,xor); \ break; \ FbDoRightMaskByteRRop6Cases(dst,xor) \ default: \ *dst = FbDoMaskRRop (*dst, and, xor, r); \ } \ } #define FbMaskStip(x,w,l,n,r) { \ n = (w); \ r = FbRightStipMask((x)+n); \ l = FbLeftStipMask(x); \ if (l) { \ n -= FB_STIP_UNIT - ((x) & FB_STIP_MASK); \ if (n < 0) { \ n = 0; \ l &= r; \ r = 0; \ } \ } \ n >>= FB_STIP_SHIFT; \ } /* * These macros are used to transparently stipple * in copy mode; the expected usage is with 'n' constant * so all of the conditional parts collapse into a minimal * sequence of partial word writes * * 'n' is the bytemask of which bytes to store, 'a' is the address * of the FbBits base unit, 'o' is the offset within that unit * * The term "lane" comes from the hardware term "byte-lane" which */ #define FbLaneCase1(n,a,o) ((n) == 0x01 ? \ (*(CARD8 *) ((a)+FbPatternOffset(o,CARD8)) = \ fgxor) : 0) #define FbLaneCase2(n,a,o) ((n) == 0x03 ? \ (*(CARD16 *) ((a)+FbPatternOffset(o,CARD16)) = \ fgxor) : \ ((void)FbLaneCase1((n)&1,a,o), \ FbLaneCase1((n)>>1,a,(o)+1))) #define FbLaneCase4(n,a,o) ((n) == 0x0f ? \ (*(CARD32 *) ((a)+FbPatternOffset(o,CARD32)) = \ fgxor) : \ ((void)FbLaneCase2((n)&3,a,o), \ FbLaneCase2((n)>>2,a,(o)+2))) #define FbLaneCase8(n,a,o) ((n) == 0x0ff ? (*(FbBits *) ((a)+(o)) = fgxor) : \ ((void)FbLaneCase4((n)&15,a,o), \ FbLaneCase4((n)>>4,a,(o)+4))) #if FB_SHIFT == 6 #define FbLaneCase(n,a) FbLaneCase8(n,(CARD8 *) (a),0) #endif #if FB_SHIFT == 5 #define FbLaneCase(n,a) FbLaneCase4(n,(CARD8 *) (a),0) #endif /* Rotate a filled pixel value to the specified alignement */ #define FbRot24(p,b) (FbScrRight(p,b) | FbScrLeft(p,24-(b))) #define FbRot24Stip(p,b) (FbStipRight(p,b) | FbStipLeft(p,24-(b))) /* step a filled pixel value to the next/previous FB_UNIT alignment */ #define FbNext24Pix(p) (FbRot24(p,(24-FB_UNIT%24))) #define FbPrev24Pix(p) (FbRot24(p,FB_UNIT%24)) #define FbNext24Stip(p) (FbRot24(p,(24-FB_STIP_UNIT%24))) #define FbPrev24Stip(p) (FbRot24(p,FB_STIP_UNIT%24)) /* step a rotation value to the next/previous rotation value */ #if FB_UNIT == 64 #define FbNext24Rot(r) ((r) == 16 ? 0 : (r) + 8) #define FbPrev24Rot(r) ((r) == 0 ? 16 : (r) - 8) #if IMAGE_BYTE_ORDER == MSBFirst #define FbFirst24Rot(x) (((x) + 8) % 24) #else #define FbFirst24Rot(x) ((x) % 24) #endif #endif #if FB_UNIT == 32 #define FbNext24Rot(r) ((r) == 0 ? 16 : (r) - 8) #define FbPrev24Rot(r) ((r) == 16 ? 0 : (r) + 8) #if IMAGE_BYTE_ORDER == MSBFirst #define FbFirst24Rot(x) (((x) + 16) % 24) #else #define FbFirst24Rot(x) ((x) % 24) #endif #endif #define FbNext24RotStip(r) ((r) == 0 ? 16 : (r) - 8) #define FbPrev24RotStip(r) ((r) == 16 ? 0 : (r) + 8) /* Whether 24-bit specific code is needed for this filled pixel value */ #define FbCheck24Pix(p) ((p) == FbNext24Pix(p)) /* Macros for dealing with dashing */ #define FbDashDeclare \ unsigned char *__dash, *__firstDash, *__lastDash #define FbDashInit(pGC,pPriv,dashOffset,dashlen,even) { \ (even) = TRUE; \ __firstDash = (pGC)->dash; \ __lastDash = __firstDash + (pGC)->numInDashList; \ (dashOffset) %= (pPriv)->dashLength; \ \ __dash = __firstDash; \ while ((dashOffset) >= ((dashlen) = *__dash)) \ { \ (dashOffset) -= (dashlen); \ (even) = 1-(even); \ if (++__dash == __lastDash) \ __dash = __firstDash; \ } \ (dashlen) -= (dashOffset); \ } #define FbDashNext(dashlen) { \ if (++__dash == __lastDash) \ __dash = __firstDash; \ (dashlen) = *__dash; \ } /* as numInDashList is always even, this case can skip a test */ #define FbDashNextEven(dashlen) { \ (dashlen) = *++__dash; \ } #define FbDashNextOdd(dashlen) FbDashNext(dashlen) #define FbDashStep(dashlen,even) { \ if (!--(dashlen)) { \ FbDashNext(dashlen); \ (even) = 1-(even); \ } \ } /* XXX fb*PrivateIndex should be static, but it breaks the ABI */ extern int fbGCPrivateIndex; extern int fbGetGCPrivateIndex(void); extern int fbWinPrivateIndex; extern int fbGetWinPrivateIndex(void); extern const GCOps fbGCOps; extern const GCFuncs fbGCFuncs; extern int fbScreenPrivateIndex; extern int fbGetScreenPrivateIndex(void); /* private field of a screen */ typedef struct { unsigned char win32bpp; /* window bpp for 32-bpp images */ unsigned char pix32bpp; /* pixmap bpp for 32-bpp images */ } FbScreenPrivRec, *FbScreenPrivPtr; #define fbGetScreenPrivate(pScreen) ((FbScreenPrivPtr) \ (pScreen)->devPrivates[fbGetScreenPrivateIndex()].ptr) /* private field of GC */ typedef struct { FbBits and, xor; /* reduced rop values */ FbBits bgand, bgxor; /* for stipples */ FbBits fg, bg, pm; /* expanded and filled */ unsigned int dashLength; /* total of all dash elements */ unsigned char oneRect; /* clip list is single rectangle */ unsigned char evenStipple; /* stipple is even */ unsigned char bpp; /* current drawable bpp */ } FbGCPrivRec, *FbGCPrivPtr; #define fbGetGCPrivate(pGC) ((FbGCPrivPtr)\ (pGC)->devPrivates[fbGetGCPrivateIndex()].ptr) #define fbGetCompositeClip(pGC) ((pGC)->pCompositeClip) #define fbGetExpose(pGC) ((pGC)->fExpose) #define fbGetFreeCompClip(pGC) ((pGC)->freeCompClip) #define fbGetRotatedPixmap(pGC) ((pGC)->pRotatedPixmap) #define fbGetScreenPixmap(s) ((PixmapPtr) (s)->devPrivate) #define fbGetWindowPixmap(pWin) ((PixmapPtr)\ ((WindowPtr) (pWin))->devPrivates[fbGetWinPrivateIndex()].ptr) #define __fbPixDrawableX(pPix) 0 #define __fbPixDrawableY(pPix) 0 #define __fbPixOffXWin(pPix) (__fbPixDrawableX(pPix)) #define __fbPixOffYWin(pPix) (__fbPixDrawableY(pPix)) #define __fbPixOffXPix(pPix) (__fbPixDrawableX(pPix)) #define __fbPixOffYPix(pPix) (__fbPixDrawableY(pPix)) #define fbGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ PixmapPtr _pPix; \ if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ _pPix = fbGetWindowPixmap(pDrawable); \ (xoff) = __fbPixOffXWin(_pPix); \ (yoff) = __fbPixOffYWin(_pPix); \ } else { \ _pPix = (PixmapPtr) (pDrawable); \ (xoff) = __fbPixOffXPix(_pPix); \ (yoff) = __fbPixOffYPix(_pPix); \ } \ (pointer) = (FbBits *) _pPix->devPrivate.ptr; \ (stride) = ((int) _pPix->devKind) / sizeof (FbBits); (void)(stride); \ (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \ } #define fbGetStipDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \ PixmapPtr _pPix; \ if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ _pPix = fbGetWindowPixmap(pDrawable); \ (xoff) = __fbPixOffXWin(_pPix); \ (yoff) = __fbPixOffYWin(_pPix); \ } else { \ _pPix = (PixmapPtr) (pDrawable); \ (xoff) = __fbPixOffXPix(_pPix); \ (yoff) = __fbPixOffYPix(_pPix); \ } \ (pointer) = (FbStip *) _pPix->devPrivate.ptr; \ (stride) = ((int) _pPix->devKind) / sizeof (FbStip); (void)(stride); \ (bpp) = _pPix->drawable.bitsPerPixel; (void)(bpp); \ } /* * XFree86 empties the root BorderClip when the VT is inactive, * here's a macro which uses that to disable GetImage and GetSpans */ #define fbWindowEnabled(pWin) \ REGION_NOTEMPTY(\ &WindowTable[(pWin)->drawable.pScreen->myNum]->borderClip) #define fbDrawableEnabled(pDrawable) \ ((pDrawable)->type == DRAWABLE_PIXMAP ? \ TRUE : fbWindowEnabled((WindowPtr) pDrawable)) #define FbPowerOfTwo(w) (((w) & ((w) - 1)) == 0) /* * Accelerated tiles are power of 2 width <= FB_UNIT */ #define FbEvenTile(w) ((w) <= FB_UNIT && FbPowerOfTwo(w)) /* * Accelerated stipples are power of 2 width and <= FB_UNIT/dstBpp * with dstBpp a power of 2 as well */ #define FbEvenStip(w,bpp) ((w) * (bpp) <= FB_UNIT && FbPowerOfTwo(w) && FbPowerOfTwo(bpp)) /* * fb24_32.c */ extern _X_EXPORT void fb24_32GetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart); extern _X_EXPORT void fb24_32SetSpans(DrawablePtr pDrawable, GCPtr pGC, char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted); extern _X_EXPORT void fb24_32PutZImage(DrawablePtr pDrawable, RegionPtr pClip, int alu, FbBits pm, int x, int y, int width, int height, CARD8 *src, FbStride srcStride); extern _X_EXPORT void fb24_32GetImage(DrawablePtr pDrawable, int x, int y, int w, int h, unsigned int format, unsigned long planeMask, char *d); extern _X_EXPORT void fb24_32CopyMtoN(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); extern _X_EXPORT PixmapPtr fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel); extern _X_EXPORT Bool fb24_32CreateScreenResources(ScreenPtr pScreen); extern _X_EXPORT Bool fb24_32ModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth, int bitsPerPixel, int devKind, pointer pPixData); /* * fballpriv.c */ extern _X_EXPORT Bool fbAllocatePrivates(ScreenPtr pScreen, int *pGCIndex); /* * fbarc.c */ extern _X_EXPORT void fbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs); /* * fbbits.c */ extern _X_EXPORT void fbBresSolid8(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbBresDash8(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbDots8(FbBits * dst, FbStride dstStride, int dstBpp, BoxPtr pBox, xPoint * pts, int npt, int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor); extern _X_EXPORT void fbArc8(FbBits * dst, FbStride dstStride, int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); extern _X_EXPORT void fbGlyph8(FbBits * dstLine, FbStride dstStride, int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); extern _X_EXPORT void fbPolyline8(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); extern _X_EXPORT void fbPolySegment8(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); extern _X_EXPORT void fbBresSolid16(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbBresDash16(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbDots16(FbBits * dst, FbStride dstStride, int dstBpp, BoxPtr pBox, xPoint * pts, int npt, int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor); extern _X_EXPORT void fbArc16(FbBits * dst, FbStride dstStride, int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); extern _X_EXPORT void fbGlyph16(FbBits * dstLine, FbStride dstStride, int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); extern _X_EXPORT void fbPolyline16(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); extern _X_EXPORT void fbPolySegment16(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); extern _X_EXPORT void fbBresSolid24(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbBresDash24(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbDots24(FbBits * dst, FbStride dstStride, int dstBpp, BoxPtr pBox, xPoint * pts, int npt, int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor); extern _X_EXPORT void fbArc24(FbBits * dst, FbStride dstStride, int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); extern _X_EXPORT void fbGlyph24(FbBits * dstLine, FbStride dstStride, int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); extern _X_EXPORT void fbPolyline24(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); extern _X_EXPORT void fbPolySegment24(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); extern _X_EXPORT void fbBresSolid32(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbBresDash32(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbDots32(FbBits * dst, FbStride dstStride, int dstBpp, BoxPtr pBox, xPoint * pts, int npt, int xorg, int yorg, int xoff, int yoff, FbBits and, FbBits xor); extern _X_EXPORT void fbArc32(FbBits * dst, FbStride dstStride, int dstBpp, xArc * arc, int dx, int dy, FbBits and, FbBits xor); extern _X_EXPORT void fbGlyph32(FbBits * dstLine, FbStride dstStride, int dstBpp, FbStip * stipple, FbBits fg, int height, int shift); extern _X_EXPORT void fbPolyline32(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ptsOrig); extern _X_EXPORT void fbPolySegment32(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); /* * fbblt.c */ extern _X_EXPORT void fbBlt(FbBits * src, FbStride srcStride, int srcX, FbBits * dst, FbStride dstStride, int dstX, int width, int height, int alu, FbBits pm, int bpp, Bool reverse, Bool upsidedown); extern _X_EXPORT void fbBlt24(FbBits * srcLine, FbStride srcStride, int srcX, FbBits * dstLine, FbStride dstStride, int dstX, int width, int height, int alu, FbBits pm, Bool reverse, Bool upsidedown); extern _X_EXPORT void fbBltStip(FbStip * src, FbStride srcStride, /* in FbStip units, not FbBits units */ int srcX, FbStip * dst, FbStride dstStride, /* in FbStip units, not FbBits units */ int dstX, int width, int height, int alu, FbBits pm, int bpp); /* * fbbltone.c */ extern _X_EXPORT void fbBltOne(FbStip * src, FbStride srcStride, int srcX, FbBits * dst, FbStride dstStride, int dstX, int dstBpp, int width, int height, FbBits fgand, FbBits fbxor, FbBits bgand, FbBits bgxor); extern _X_EXPORT void fbBltOne24(FbStip * src, FbStride srcStride, /* FbStip units per scanline */ int srcX, /* bit position of source */ FbBits * dst, FbStride dstStride, /* FbBits units per scanline */ int dstX, /* bit position of dest */ int dstBpp, /* bits per destination unit */ int width, /* width in bits of destination */ int height, /* height in scanlines */ FbBits fgand, /* rrop values */ FbBits fgxor, FbBits bgand, FbBits bgxor); extern _X_EXPORT void fbBltPlane(FbBits * src, FbStride srcStride, int srcX, int srcBpp, FbStip * dst, FbStride dstStride, int dstX, int width, int height, FbStip fgand, FbStip fgxor, FbStip bgand, FbStip bgxor, Pixel planeMask); /* * fbcmap.c */ int fbListInstalledColormaps(ScreenPtr pScreen, Colormap * pmaps); extern _X_EXPORT void fbInstallColormap(ColormapPtr pmap); extern _X_EXPORT void fbUninstallColormap(ColormapPtr pmap); extern _X_EXPORT void fbResolveColor(unsigned short *pred, unsigned short *pgreen, unsigned short *pblue, VisualPtr pVisual); extern _X_EXPORT Bool fbInitializeColormap(ColormapPtr pmap); extern _X_EXPORT int fbExpandDirectColors(ColormapPtr pmap, int ndef, xColorItem * indefs, xColorItem * outdefs); extern _X_EXPORT Bool fbCreateDefColormap(ScreenPtr pScreen); extern _X_EXPORT void fbClearVisualTypes(void); Bool fbSetVisualTypes(int depth, int visuals, int bitsPerRGB); extern _X_EXPORT Bool fbSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB, Pixel redMask, Pixel greenMask, Pixel blueMask); extern _X_EXPORT Bool fbInitVisuals(VisualPtr * visualp, DepthPtr * depthp, int *nvisualp, int *ndepthp, int *rootDepthp, VisualID * defaultVisp, unsigned long sizes, int bitsPerRGB); /* * fbcopy.c */ typedef void (*fbCopyProc) (DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pDstBox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); void fbCopyNtoN(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); extern _X_EXPORT void fbCopy1toN(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); extern _X_EXPORT void fbCopyNto1(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); void fbCopyRegion(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, RegionPtr pDstRegion, int dx, int dy, fbCopyProc copyProc, Pixel bitPlane, void *closure); RegionPtr fbDoCopy(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut, fbCopyProc copyProc, Pixel bitplane, void *closure); RegionPtr fbCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut); RegionPtr fbCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, int xIn, int yIn, int widthSrc, int heightSrc, int xOut, int yOut, unsigned long bitplane); /* * fbfill.c */ extern _X_EXPORT void fbFill(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int width, int height); extern _X_EXPORT void fbSolidBoxClipped(DrawablePtr pDrawable, RegionPtr pClip, int xa, int ya, int xb, int yb, FbBits and, FbBits xor); /* * fbfillrect.c */ extern _X_EXPORT void fbPolyFillRect(DrawablePtr pDrawable, GCPtr pGC, int nrectInit, xRectangle *prectInit); #define fbPolyFillArc miPolyFillArc #define fbFillPolygon miFillPolygon /* * fbfillsp.c */ extern _X_EXPORT void fbFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted); /* * fbgc.c */ extern _X_EXPORT Bool fbCreateGC(GCPtr pGC); extern _X_EXPORT void fbPadPixmap(PixmapPtr pPixmap); extern _X_EXPORT void fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); /* * fbgetsp.c */ extern _X_EXPORT void fbGetSpans(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart); /* * fbglyph.c */ extern _X_EXPORT Bool fbGlyphIn(RegionPtr pRegion, int x, int y, int width, int height); extern _X_EXPORT void fbPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase); extern _X_EXPORT void fbImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase); /* * fbimage.c */ extern _X_EXPORT void fbPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pImage); extern _X_EXPORT void fbPutZImage(DrawablePtr pDrawable, RegionPtr pClip, int alu, FbBits pm, int x, int y, int width, int height, FbStip * src, FbStride srcStride); extern _X_EXPORT void fbPutXYImage(DrawablePtr pDrawable, RegionPtr pClip, FbBits fg, FbBits bg, FbBits pm, int alu, Bool opaque, int x, int y, int width, int height, FbStip * src, FbStride srcStride, int srcX); extern _X_EXPORT void fbGetImage(DrawablePtr pDrawable, int x, int y, int w, int h, unsigned int format, unsigned long planeMask, char *d); /* * fbline.c */ extern _X_EXPORT void fbZeroLine(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ppt); extern _X_EXPORT void fbZeroSegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSegs); extern _X_EXPORT void fbPolyLine(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ppt); extern _X_EXPORT void fbFixCoordModePrevious(int npt, DDXPointPtr ppt); extern _X_EXPORT void fbPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pseg); #define fbPolyRectangle miPolyRectangle /* * fbpict.c */ Bool fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); /* * fbpixmap.c */ PixmapPtr fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp); PixmapPtr fbCreatePixmap(ScreenPtr pScreen, int width, int height, int depth); Bool fbDestroyPixmap(PixmapPtr pPixmap); RegionPtr fbPixmapToRegion(PixmapPtr pPix); /* * fbpoint.c */ void fbDots(FbBits * dstOrig, FbStride dstStride, int dstBpp, BoxPtr pBox, xPoint * pts, int npt, int xorg, int yorg, int xoff, int yoff, FbBits andOrig, FbBits xorOrig); extern _X_EXPORT void fbPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, xPoint * pptInit); /* * fbpush.c */ extern _X_EXPORT void fbPushPattern(DrawablePtr pDrawable, GCPtr pGC, FbStip * src, FbStride srcStride, int srcX, int x, int y, int width, int height); void fbPushFill(DrawablePtr pDrawable, GCPtr pGC, FbStip * src, FbStride srcStride, int srcX, int x, int y, int width, int height); void fbPush1toN(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); void fbPushImage(DrawablePtr pDrawable, GCPtr pGC, FbStip * src, FbStride srcStride, int srcX, int x, int y, int width, int height); void fbPushPixels(GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg); /* * fbscreen.c */ Bool fbCloseScreen(int indx, ScreenPtr pScreen); Bool fbRealizeFont(ScreenPtr pScreen, FontPtr pFont); Bool fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont); void fbQueryBestSize(int class, unsigned short *width, unsigned short *height, ScreenPtr pScreen); PixmapPtr _fbGetWindowPixmap(WindowPtr pWindow); void _fbSetWindowPixmap(WindowPtr pWindow, PixmapPtr pPixmap); Bool fbSetupScreen(ScreenPtr pScreen, pointer pbits, /* pointer to screen bitmap */ int xsize, /* in pixels */ int ysize, int dpix, /* dots per inch */ int dpiy, int width, /* pixel width of frame buffer */ int bpp); /* bits per pixel of frame buffer */ Bool fbFinishScreenInit(ScreenPtr pScreen, pointer pbits, int xsize, int ysize, int dpix, int dpiy, int width, int bpp); /* * fbseg.c */ typedef void FbBres(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); FbBres fbBresSolid, fbBresDash, fbBresFill, fbBresFillDash; /* * fbsetsp.c */ void fbSetSpans(DrawablePtr pDrawable, GCPtr pGC, char *src, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted); FbBres *fbSelectBres(DrawablePtr pDrawable, GCPtr pGC); void fbBres(DrawablePtr pDrawable, GCPtr pGC, int dashOffset, int signdx, int signdy, int axis, int x, int y, int e, int e1, int e3, int len); extern _X_EXPORT void fbSegment(DrawablePtr pDrawable, GCPtr pGC, int xa, int ya, int xb, int yb, Bool drawLast, int *dashOffset); /* * fbsolid.c */ extern _X_EXPORT void fbSolid(FbBits * dst, FbStride dstStride, int dstX, int bpp, int width, int height, FbBits and, FbBits xor); extern _X_EXPORT void fbSolid24(FbBits * dst, FbStride dstStride, int dstX, int width, int height, FbBits and, FbBits xor); /* * fbstipple.c */ extern _X_EXPORT void fbTransparentSpan(FbBits * dst, FbBits stip, FbBits fgxor, int n); extern _X_EXPORT void fbEvenStipple(FbBits * dst, FbStride dstStride, int dstX, int dstBpp, int width, int height, FbStip * stip, FbStride stipStride, int stipHeight, FbBits fgand, FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot); extern _X_EXPORT void fbOddStipple(FbBits * dst, FbStride dstStride, int dstX, int dstBpp, int width, int height, FbStip * stip, FbStride stipStride, int stipWidth, int stipHeight, FbBits fgand, FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot); extern _X_EXPORT void fbStipple(FbBits * dst, FbStride dstStride, int dstX, int dstBpp, int width, int height, FbStip * stip, FbStride stipStride, int stipWidth, int stipHeight, Bool even, FbBits fgand, FbBits fgxor, FbBits bgand, FbBits bgxor, int xRot, int yRot); /* * fbtile.c */ extern _X_EXPORT void fbEvenTile(FbBits * dst, FbStride dstStride, int dstX, int width, int height, FbBits * tile, int tileHeight, int alu, FbBits pm, int xRot, int yRot); void fbOddTile(FbBits * dst, FbStride dstStride, int dstX, int width, int height, FbBits * tile, FbStride tileStride, int tileWidth, int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot); extern _X_EXPORT void fbTile(FbBits * dst, FbStride dstStride, int dstX, int width, int height, FbBits * tile, FbStride tileStride, int tileWidth, int tileHeight, int alu, FbBits pm, int bpp, int xRot, int yRot); /* * fbutil.c */ FbBits fbReplicatePixel(Pixel p, int bpp); /* * fbwindow.c */ Bool fbCreateWindow(WindowPtr pWin); Bool fbDestroyWindow(WindowPtr pWin); Bool fbMapWindow(WindowPtr pWindow); Bool fbPositionWindow(WindowPtr pWin, int x, int y); Bool fbUnmapWindow(WindowPtr pWindow); void fbCopyWindowProc(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC, BoxPtr pbox, int nbox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); void fbCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); Bool fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask); void fbFillRegionSolid(DrawablePtr pDrawable, RegionPtr pRegion, FbBits and, FbBits xor); void fbFillRegionTiled(DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile); void fbPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what); #endif /* _FB_H_ */