⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfbfillsp.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
    ppt = pptFree;    n = miClipSpans(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip,		    pptInit, pwidthInit, nInit, 		    ppt, pwidth, fSorted);    mfbGetPixelWidthAndPointer(pDrawable, nlwidth, addrlBase);    pStipple = ((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pRotatedPixmap;    tileHeight = pStipple->drawable.height;    psrc = (PixelType *)(pStipple->devPrivate.ptr);    while (n--)    {        addrl = mfbScanline(addrlBase, ppt->x, ppt->y, nlwidth);	src = psrc[ppt->y % tileHeight];        /* all bits inside same longword */        if ( ((ppt->x & PIM) + *pwidth) < PPW)        {	    maskpartialbits(ppt->x, *pwidth, startmask);	    *addrl |= (src & startmask);        }        else        {	    maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);	    if (startmask)		*addrl++ |= (src & startmask);	    Duff (nlmiddle, *addrl++ |= src);	    if (endmask)		*addrl |= (src & endmask);        }	pwidth++;	ppt++;    }    DEALLOCATE_LOCAL(pptFree);    DEALLOCATE_LOCAL(pwidthFree);}void mfbBlackStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)    DrawablePtr pDrawable;    GC *pGC;    int nInit;			/* number of spans to fill */    DDXPointPtr pptInit;	/* pointer to list of start points */    int *pwidthInit;		/* pointer to list of n widths */    int fSorted;{				/* next three parameters are post-clip */    int n;			/* number of spans to fill */    register DDXPointPtr ppt;	/* pointer to list of start points */    register int *pwidth;	/* pointer to list of n widths */    PixelType *addrlBase;	/* pointer to start of bitmap */    int nlwidth;		/* width in longwords of bitmap */    register PixelType *addrl;	/* pointer to current longword in bitmap */    register PixelType src;    register int nlmiddle;    register PixelType startmask;    register PixelType endmask;    PixmapPtr pStipple;    PixelType *psrc;    int tileHeight;    int *pwidthFree;		/* copies of the pointers to free */    DDXPointPtr pptFree;    if (!(pGC->planemask & 1))	return;    n = nInit * miFindMaxBand(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip);    pwidthFree = (int *)ALLOCATE_LOCAL(n * sizeof(int));    pptFree = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec));    if(!pptFree || !pwidthFree)    {	if (pptFree) DEALLOCATE_LOCAL(pptFree);	if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree);	return;    }    pwidth = pwidthFree;    ppt = pptFree;    n = miClipSpans(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip,		    pptInit, pwidthInit, nInit, 		    ppt, pwidth, fSorted);    mfbGetPixelWidthAndPointer(pDrawable, nlwidth, addrlBase);    pStipple = ((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pRotatedPixmap;    tileHeight = pStipple->drawable.height;    psrc = (PixelType *)(pStipple->devPrivate.ptr);    while (n--)    {        addrl = mfbScanline(addrlBase, ppt->x, ppt->y, nlwidth);	src = psrc[ppt->y % tileHeight];        /* all bits inside same longword */        if ( ((ppt->x & PIM) + *pwidth) < PPW)        {	    maskpartialbits(ppt->x, *pwidth, startmask);	    *addrl &= ~(src & startmask);        }        else        {	    maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);	    if (startmask)		*addrl++ &= ~(src & startmask);	    Duff (nlmiddle, *addrl++ &= ~src);	    if (endmask)		*addrl &= ~(src & endmask);        }	pwidth++;	ppt++;    }    DEALLOCATE_LOCAL(pptFree);    DEALLOCATE_LOCAL(pwidthFree);}void mfbInvertStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)    DrawablePtr pDrawable;    GC *pGC;    int nInit;			/* number of spans to fill */    DDXPointPtr pptInit;	/* pointer to list of start points */    int *pwidthInit;		/* pointer to list of n widths */    int fSorted;{				/* next three parameters are post-clip */    int n;			/* number of spans to fill */    register DDXPointPtr ppt;	/* pointer to list of start points */    register int *pwidth;	/* pointer to list of n widths */    PixelType *addrlBase;	/* pointer to start of bitmap */    int nlwidth;		/* width in longwords of bitmap */    register PixelType *addrl;	/* pointer to current longword in bitmap */    register PixelType src;    register int nlmiddle;    register PixelType startmask;    register PixelType endmask;    PixmapPtr pStipple;    PixelType *psrc;    int tileHeight;    int *pwidthFree;		/* copies of the pointers to free */    DDXPointPtr pptFree;    if (!(pGC->planemask & 1))	return;    n = nInit * miFindMaxBand(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip);    pwidthFree = (int *)ALLOCATE_LOCAL(n * sizeof(int));    pptFree = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec));    if(!pptFree || !pwidthFree)    {	if (pptFree) DEALLOCATE_LOCAL(pptFree);	if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree);	return;    }    pwidth = pwidthFree;    ppt = pptFree;    n = miClipSpans(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip,		    pptInit, pwidthInit, nInit, 		    ppt, pwidth, fSorted);    mfbGetPixelWidthAndPointer(pDrawable, nlwidth, addrlBase);    pStipple = ((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pRotatedPixmap;    tileHeight = pStipple->drawable.height;    psrc = (PixelType *)(pStipple->devPrivate.ptr);    while (n--)    {        addrl = mfbScanline(addrlBase, ppt->x, ppt->y, nlwidth);	src = psrc[ppt->y % tileHeight];        /* all bits inside same longword */        if ( ((ppt->x & PIM) + *pwidth) < PPW)        {	    maskpartialbits(ppt->x, *pwidth, startmask);	    *addrl ^= (src & startmask);        }        else        {	    maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);	    if (startmask)		*addrl++ ^= (src & startmask);	    Duff(nlmiddle, *addrl++ ^= src);	    if (endmask)		*addrl ^= (src & endmask);        }	pwidth++;	ppt++;    }    DEALLOCATE_LOCAL(pptFree);    DEALLOCATE_LOCAL(pwidthFree);}/* this works with tiles of width == PPW */#define FILLSPANPPW(ROP) \    while (n--) \    { \	if (*pwidth) \	{ \            addrl = mfbScanline(addrlBase, ppt->x, ppt->y, nlwidth); \	    src = psrc[ppt->y % tileHeight]; \            if ( ((ppt->x & PIM) + *pwidth) < PPW) \            { \	        maskpartialbits(ppt->x, *pwidth, startmask); \	        *addrl = (*addrl & ~startmask) | \		         (ROP(src, *addrl) & startmask); \            } \            else \            { \	        maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle); \	        if (startmask) \	        { \	            *addrl = (*addrl & ~startmask) | \			     (ROP(src, *addrl) & startmask); \		    addrl++; \	        } \	        while (nlmiddle--) \	        { \		    *addrl = ROP(src, *addrl); \		    addrl++; \	        } \	        if (endmask) \	            *addrl = (*addrl & ~endmask) | \			     (ROP(src, *addrl) & endmask); \            } \	} \	pwidth++; \	ppt++; \    }voidmfbTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)    DrawablePtr pDrawable;    GC *pGC;    int nInit;			/* number of spans to fill */    DDXPointPtr pptInit;	/* pointer to list of start points */    int *pwidthInit;		/* pointer to list of n widths */    int fSorted;{				/* next three parameters are post-clip */    int n;			/* number of spans to fill */    register DDXPointPtr ppt;	/* pointer to list of start points */    register int *pwidth;	/* pointer to list of n widths */    PixelType *addrlBase;	/* pointer to start of bitmap */    int nlwidth;		/* width in longwords of bitmap */    register PixelType *addrl;	/* pointer to current longword in bitmap */    register PixelType src;    register int nlmiddle;    register PixelType startmask;    register PixelType endmask;    PixmapPtr pTile;    PixelType *psrc;    int tileHeight;    int rop;    int *pwidthFree;		/* copies of the pointers to free */    DDXPointPtr pptFree;    unsigned long   flip;    if (!(pGC->planemask & 1))	return;    n = nInit * miFindMaxBand(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip);    pwidthFree = (int *)ALLOCATE_LOCAL(n * sizeof(int));    pptFree = (DDXPointRec *)ALLOCATE_LOCAL(n * sizeof(DDXPointRec));    if(!pptFree || !pwidthFree)    {	if (pptFree) DEALLOCATE_LOCAL(pptFree);	if (pwidthFree) DEALLOCATE_LOCAL(pwidthFree);	return;    }    pwidth = pwidthFree;    ppt = pptFree;    n = miClipSpans(((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pCompositeClip,		    pptInit, pwidthInit, nInit, 		    ppt, pwidth, fSorted);    mfbGetPixelWidthAndPointer(pDrawable, nlwidth, addrlBase);    pTile = ((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->pRotatedPixmap;    tileHeight = pTile->drawable.height;    psrc = (PixelType *)(pTile->devPrivate.ptr);    if (pGC->fillStyle == FillTiled)	rop = pGC->alu;    else	rop = ((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->ropOpStip;    flip = 0;    switch(rop)    {      case GXcopyInverted:  /* for opaque stipples */	flip = ~0;      case GXcopy:	{#define DoMaskCopyRop(src,dst,mask)	((dst) & ~(mask) | (src) & (mask))	    while (n--)	    {	    	if (*pwidth)	    	{            	    addrl = mfbScanline(addrlBase, ppt->x, ppt->y, nlwidth);	    	    src = psrc[ppt->y % tileHeight] ^ flip;            	    if ( ((ppt->x & PIM) + *pwidth) < PPW)            	    {	            	maskpartialbits(ppt->x, *pwidth, startmask);			*addrl = DoMaskCopyRop (src, *addrl, startmask);            	    }            	    else            	    {	            	maskbits(ppt->x, *pwidth, startmask, endmask, nlmiddle);	            	if (startmask)	            	{			    *addrl = DoMaskCopyRop (src, *addrl, startmask);		    	    addrl++;	            	}	            	while (nlmiddle--)	            	{			    *addrl = src;		    	    addrl++;	            	}	            	if (endmask)			    *addrl = DoMaskCopyRop (src, *addrl, endmask);            	    }	    	}	    	pwidth++;	    	ppt++;	    }	}	break;      default:	{	    register DeclareMergeRop ();	    InitializeMergeRop(rop,~0);	    while (n--)	    {	    	if (*pwidth)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -