📄 cfb.h
字号:
/************************************************************Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. All Rights ReservedPermission to use, copy, modify, and distribute thissoftware and its documentation for any purpose and withoutfee is hereby granted, provided that the above copyright no-tice appear in all copies and that both that copyright no-tice and this permission notice appear in supporting docu-mentation, and that the names of Sun or MIT not be used inadvertising or publicity pertaining to distribution of thesoftware without specific prior written permission. Sun andM.I.T. make no representations about the suitability of thissoftware for any purpose. It is provided "as is" without anyexpress or implied warranty.SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI-ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ORANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA ORPROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OROTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITHTHE USE OR PERFORMANCE OF THIS SOFTWARE.********************************************************/#include "pixmap.h"#include "region.h"#include "gc.h"#include "colormap.h"#include "miscstruct.h"#include "servermd.h"#include "mfb.h"extern Bool cfbScreenInit();extern void cfbQueryBestSize();extern Bool cfbCreateWindow();extern Bool cfbPositionWindow();extern Bool cfbChangeWindowAttributes();extern Bool cfbMapWindow();extern Bool cfbUnmapWindow();extern Bool cfbDestroyWindow();extern Bool cfbRealizeFont();extern Bool cfbUnrealizeFont();extern Bool cfbRealizeCursor();extern Bool cfbUnrealizeCursor();extern Bool cfbScreenSaver();extern Bool cfbCreateGC();extern PixmapPtr cfbCreatePixmap();extern Bool cfbDestroyPixmap();extern void cfbCopyWindow();extern void cfbPaintWindow();extern void miPolyFillRect();extern void cfbPolyFillRect();extern void miPolyFillArc();extern void cfbZeroPolyArcSS8Copy(), cfbZeroPolyArcSS8Xor();extern void cfbZeroPolyArcSS8General();extern void cfbLineSS(), cfbLineSD(), cfbSegmentSS(), cfbSegmentSD();extern void cfb8LineSS1Rect(), cfb8SegmentSS1Rect ();extern RegionPtr cfbCopyPlane();extern void cfbPolyFillArcSolidCopy(),cfbPolyFillArcSolidXor();extern void cfbPolyFillArcSolidGeneral();extern RegionPtr cfbCopyArea();extern void cfbFillPoly1RectCopy(), cfbFillPoly1RectGeneral();extern void cfbPushPixels8();extern void cfbSetSpans();extern void cfbGetSpans();extern void cfbSolidSpansCopy(), cfbSolidSpansXor(), cfbSolidSpansGeneral();extern void cfbUnnaturalTileFS();extern void cfbUnnaturalStippleFS();extern void cfbTile32FSCopy(), cfbTile32FSGeneral();extern void cfb8Stipple32FS(), cfb8OpaqueStipple32FS();extern void cfbFillBoxTileOdd();extern void cfbFillBoxTile32();extern void cfbFillBoxSolid();extern void cfbTEGlyphBlt();extern void cfbTEGlyphBlt8();extern void cfbPolyGlyphBlt8();extern void cfbPolyGlyphRop8();extern void cfbImageGlyphBlt8();extern void cfbSaveAreas();extern void cfbRestoreAreas();/* included from mfb.h; we can't include mfb.h directly because of other * conflicts */extern void mfbPushPixels();extern void mfbSetSpans();extern void mfbGetSpans();extern void mfbUnnaturalTileFS();extern void mfbUnnaturalStippleFS();extern Bool mfbRealizeFont();extern Bool mfbUnrealizeFont();extern void mfbQueryBestSize();extern RegionPtr mfbPixmapToRegion();extern void mfbCopyRotatePixmap();extern PixmapPtr cfbCopyPixmap();extern void cfbConvertRects();extern void miPolyArc();extern void miFillPolyArc();extern void cfbPutImage();extern void cfbGetImage();extern RegionPtr miCopyArea();extern RegionPtr miCopyPlane();extern void cfbPolyPoint();extern void miPushPixels();#ifdef STATIC_COLORextern void cfbInstallColormap();extern void cfbUninstallColormap();extern int cfbListInstalledColormaps();#endifextern void cfbResolveColor();extern Bool cfbInitializeColormap();extern Bool cfbCreateDefColormap();extern void cfbCopyRotatePixmap();extern void cfbYRotatePixmap();extern void cfbXRotatePixmap();extern void cfbPadPixmap();/* private filed of pixmap pixmap.devPrivate = (unsigned int *)pointer_to_bits pixmap.devKind = width_of_pixmap_in_bytes*/extern int cfbGCPrivateIndex;extern int cfbWindowPrivateIndex;/* private field of GC */typedef struct { unsigned char rop; /* special case rop values */ /* next two values unused in cfb, included for compatibility with mfb */ unsigned char ropOpStip; /* rop for opaque stipple */ /* this value is ropFillArea in mfb, usurped for cfb */ unsigned char oneRect; /* drawable has one clip rect */ unsigned fExpose:1; /* callexposure handling ? */ unsigned freeCompClip:1; PixmapPtr pRotatedPixmap; RegionPtr pCompositeClip; /* FREE_CC or REPLACE_CC */ unsigned long xor, and; /* reduced rop values */ } cfbPrivGC;typedef cfbPrivGC *cfbPrivGCPtr;#define cfbGetGCPrivate(pGC) ((cfbPrivGCPtr)\ (pGC)->devPrivates[cfbGCPrivateIndex].ptr)/* way to carry RROP info around */typedef struct { unsigned char rop; unsigned long xor, and;} cfbRRopRec, *cfbRRopPtr;/* private field of window */typedef struct { unsigned char fastBorder; /* non-zero if border is 32 bits wide */ unsigned char fastBackground; unsigned short unused; /* pad for alignment with Sun compiler */ DDXPointRec oldRotate; PixmapPtr pRotatedBackground; PixmapPtr pRotatedBorder; } cfbPrivWin;/* Common macros for extracting drawing information */#define cfbGetTypedWidth(pDrawable,wtype) (\ (((pDrawable)->type == DRAWABLE_WINDOW) ? \ (int) getPrivScreenPtr((pDrawable)->pScreen)->stride : \ (int) getPrivPixmapPtr(pDrawable)->stride / sizeof (wtype))#define cfbGetByteWidth(pDrawable) cfbGetTypedWidth(pDrawable, unsigned char)#define cfbGetLongWidth(pDrawable) cfbGetTypedWidth(pDrawable, unsigned long) #define cfbGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\ if ((pDrawable)->type == DRAWABLE_WINDOW) \ {\ (pointer) = (ptype *) getPrivScreenPtr((pDrawable)->pScreen)->bits; \ (width) = ((int) getPrivScreenPtr((pDrawable)->pScreen)->stride) / sizeof (wtype); \ }\ else \ {\ (pointer) = (ptype *) getPrivPixmapPtr(pDrawable)->bits; \ (width) = ((int) getPrivPixmapPtr(pDrawable)->stride) / sizeof (wtype); \ }\}#define cfbGetByteWidthAndPointer(pDrawable, width, pointer) \ cfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char)#define cfbGetLongWidthAndPointer(pDrawable, width, pointer) \ cfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned long, unsigned long)#define cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\ hpPrivScreenPtr _pPix = (hpPrivScreenPtr) (pWin)->drawable.pScreen->devPrivate; \ (pointer) = (ptype *) _pPix->bits; \ (width) = ((int) _pPix->stride) / sizeof (wtype); \}#define cfbGetWindowLongWidthAndPointer(pWin, width, pointer) \ cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned long, unsigned long)#define cfbGetWindowByteWidthAndPointer(pWin, width, pointer) \ cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned char, unsigned char)/* Macros which handle a coordinate in a single register *//* Most compilers will convert divide by 65536 into a shift, if signed * shifts exist. If your machine does arithmetic shifts and your compiler * can't get it right, add to this line. *//* mips compiler - what a joke - it CSEs the 65536 constant into a reg * forcing as to use div instead of shift. Let's be explicit. */#if defined(mips) || defined(sparc)#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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -