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

📄 cfbsolid.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
		while(h--){#if RROP == GXcopy		    *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);		    *pdst-- = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXxor		    *pdst++ ^= (piQxelXor[0] & 0xFF000000);		    *pdst-- ^= (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXand		    *pdst++ &= (piQxelAnd[0] | 0xFFFFFF);		    *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);#endif#if RROP == GXor		    *pdst++ |= (piQxelOr[0] & 0xFF000000);		    *pdst-- |= (piQxelOr[1] & 0xFFFF);#endif#if RROP == GXset		    *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);		    pdst++;		    *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);		    pdst--;#endif		    pdst += widthDst;		  }		break;	    case 0: /*case 2 leftIndex == 0 */		while(h--){#if RROP == GXcopy		    *pdst++ = piQxelXor[0];		    *pdst-- = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXxor		    *pdst++ ^= piQxelXor[0];		    *pdst-- ^= (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXand		    *pdst++ &= piQxelAnd[0];		    *pdst-- &= (piQxelAnd[1] | 0xFFFF0000);#endif#if RROP == GXor		    *pdst++ |= piQxelOr[0];		    *pdst-- |= (piQxelOr[1] & 0xFFFF);#endif#if RROP == GXset		    *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);		    pdst++;		    *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);		    pdst--;#endif		    pdst += widthDst;		}		break;	    }	    break;	case 1: /*only if leftIndex = 0 and w = 1*/	    while(h--){#if RROP == GXcopy		*pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXxor		*pdst ^= (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXand		*pdst &= (piQxelAnd[0] | 0xFF000000);#endif#if RROP == GXor		*pdst |= (piQxelOr[0] & 0xFFFFFF);#endif#if RROP == GXset		*pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);#endif		pdst += widthDst;	    }	    break;	case 0: /*never*/	    break;	default:	    {		while(h--){		    pdst = pdstRect;		    switch(leftIndex){		    case 0:			break;		    case 1:#if RROP == GXcopy			*pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);			*pdst++ = piQxelXor[1];			*pdst++ = piQxelXor[2];#endif#if RROP == GXxor			*pdst++ ^= (piQxelXor[0] & 0xFF000000);			*pdst++ ^= piQxelXor[1];			*pdst++ ^= piQxelXor[2];#endif#if RROP == GXand			*pdst++ &= (piQxelAnd[0] | 0xFFFFFF);			*pdst++ &= piQxelAnd[1];			*pdst++ &= piQxelAnd[2];#endif#if RROP == GXor			*pdst++ |= (piQxelOr[0] & 0xFF000000);			*pdst++ |= piQxelOr[1];			*pdst++ |= piQxelOr[2];#endif#if RROP == GXset			*pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000);			pdst++;			*pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);			pdst++;			*pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);			pdst++;#endif		    break;		    case 2:#if RROP == GXcopy			*pdst++ = (((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000));			*pdst++ = piQxelXor[2];#endif#if RROP == GXxor			*pdst++ ^=(piQxelXor[1] & 0xFFFF0000);			*pdst++ ^= piQxelXor[2];#endif#if RROP == GXand			*pdst++ &= (piQxelAnd[1] | 0xFFFF);			*pdst++ &= piQxelAnd[2];#endif#if RROP == GXor			*pdst++ |= (piQxelOr[1] & 0xFFFF0000);			*pdst++ |= piQxelOr[2];#endif#if RROP == GXset			*pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000);			pdst++;			*pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);			pdst++;#endif			break;		    case 3:#if RROP == GXcopy			*pdst++ = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00);#endif#if RROP == GXxor			*pdst++ ^= (piQxelXor[2] & 0xFFFFFF00);#endif#if RROP == GXand			*pdst++ &= (piQxelAnd[2] | 0xFF);#endif#if RROP == GXor			*pdst++ |= (piQxelOr[2] & 0xFFFFFF00);#endif#if RROP == GXset			*pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00);			pdst++;#endif			break;		      }		    m = nmiddle;		    while(m--){#if RROP == GXcopy			*pdst++ = piQxelXor[0];			*pdst++ = piQxelXor[1];			*pdst++ = piQxelXor[2];#endif#if RROP == GXxor			*pdst++ ^= piQxelXor[0];			*pdst++ ^= piQxelXor[1];			*pdst++ ^= piQxelXor[2];#endif#if RROP == GXand			*pdst++ &= piQxelAnd[0];			*pdst++ &= piQxelAnd[1];			*pdst++ &= piQxelAnd[2];#endif#if RROP == GXor			*pdst++ |= piQxelOr[0];			*pdst++ |= piQxelOr[1];			*pdst++ |= piQxelOr[2];#endif#if RROP == GXset			*pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);			pdst++;			*pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);			pdst++;			*pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);			pdst++;#endif		}		switch(rightIndex){		case 0:		  break;		case 1:#if RROP == GXcopy		  *pdst++ = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXxor		  *pdst++ ^= (piQxelXor[0] & 0xFFFFFF);#endif#if RROP == GXand		  *pdst++ &= (piQxelAnd[0] | 0xFF);#endif#if RROP == GXor		  *pdst++ |= (piQxelOr[0] & 0xFFFFFF);#endif#if RROP == GXset		  *pdst++ = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF);#endif		  break;		case 2:#if RROP == GXcopy		  *pdst++ = piQxelXor[0];		  *pdst++ = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXxor		  *pdst++ ^= piQxelXor[0];		  *pdst++ ^= (piQxelXor[1] & 0xFFFF);#endif#if RROP == GXand		  *pdst++ &= piQxelAnd[0];		  *pdst++ &= (piQxelAnd[1] | 0xFFFF0000);#endif#if RROP == GXor		  *pdst++ |= piQxelOr[0];		  *pdst++ |= (piQxelOr[1] & 0xFFFF);#endif#if RROP == GXset		  *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);		  *pdst++;		  *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF);		  *pdst++;#endif		  break;		case 3:#if RROP == GXcopy		  *pdst++ = piQxelXor[0];		  *pdst++ = piQxelXor[1];		  *pdst++ = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF);#endif#if RROP == GXxor		  *pdst++ ^= piQxelXor[0];		  *pdst++ ^= piQxelXor[1];		  *pdst++ ^= (piQxelXor[2] & 0xFF);#endif#if RROP == GXand		  *pdst++ &= piQxelAnd[0];		  *pdst++ &= piQxelAnd[1];		  *pdst++ &= (piQxelAnd[2] | 0xFFFFFF00);#endif#if RROP == GXor		  *pdst++ |= piQxelOr[0];		  *pdst++ |= piQxelOr[1];		  *pdst++ |= (piQxelOr[2] & 0xFF);#endif#if RROP == GXset		  *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);		  pdst++;		  *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);		  pdst++;		  *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF);		  pdst++;#endif		  break;		}		pdstRect += widthDst;	    }	}	}#else /* PSZ != 24 */	pdstRect += (pBox->x1 >> PWSH);	if ((pBox->x1 & PIM) + w <= PPW)	{	    maskpartialbits(pBox->x1, w, leftMask);	    pdst = pdstRect;	    while (h--) {		RROP_SOLID_MASK (pdst, leftMask);		pdst += widthDst;	    }	}	else	{	    maskbits (pBox->x1, w, leftMask, rightMask, nmiddle);	    if (leftMask)	    {		if (rightMask)	/* left mask and right mask */		{		    Expand(RROP_SOLID_MASK (pdst, leftMask); pdst++;,			   RROP_SOLID_MASK (pdst, rightMask);, 1)		}		else	/* left mask and no right mask */		{		    Expand(RROP_SOLID_MASK (pdst, leftMask); pdst++;,			   ;, 1)		}	    }	    else	    {		if (rightMask)	/* no left mask and right mask */		{		    Expand(;,			   RROP_SOLID_MASK (pdst, rightMask);, 0)		}		else	/* no left mask and no right mask */		{		    Expand(;,			    ;, 0)		}	    }	}#endif#if PSZ == 8	}#endif    }}voidRROP_NAME(cfbSolidSpans) (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted)    DrawablePtr pDrawable;    GCPtr	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;{    unsigned long   *pdstBase;    int		    widthDst;    RROP_DECLARE        register unsigned long  *pdst;    register int	    nlmiddle;    register unsigned long  startmask, endmask;    register int	    w;    int			    x;    				/* next three parameters are post-clip */    int		    n;		/* number of spans to fill */    DDXPointPtr	    ppt;	/* pointer to list of start points */    int		    *pwidthFree;/* copies of the pointers to free */    DDXPointPtr	    pptFree;    int		    *pwidth;    cfbPrivGCPtr    devPriv;#if PSZ == 24    int leftIndex, rightIndex, xOffset;#endif    devPriv = cfbGetGCPrivate(pGC);    RROP_FETCH_GCPRIV(devPriv)    n = nInit * miFindMaxBand(devPriv->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(devPriv->pCompositeClip,		     pptInit, pwidthInit, nInit,		     ppt, pwidth, fSorted);    cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase)    while (n--)    {	x = ppt->x;	pdst = pdstBase + (ppt->y * widthDst);	++ppt;	w = *pwidth++;	if (!w)	    continue;#if PSZ == 24	leftIndex = x &3;/*	rightIndex = ((leftIndex+w)<5)?0:(x+w)&3;*/	rightIndex = (x+w)&3;	nlmiddle = w - rightIndex;	if(leftIndex){	  nlmiddle -= (4 - leftIndex);	}/*	nlmiddle += 3;*/	nlmiddle >>= 2;	if(nlmiddle < 0)	  nlmiddle = 0;	pdst += (x >> 2)*3;	pdst += leftIndex? (leftIndex -1):0;	switch(leftIndex+w){	case 4:	    switch(leftIndex){	    case 0:#if RROP == GXcopy		    *pdst++ = piQxelXor[0];		    *pdst++ = piQxelXor[1];		    *pdst-- = piQxelXor[2];#endif#if RROP == GXxor		    *pdst++ ^= piQxelXor[0];		    *pdst++ ^= piQxelXor[1];		    *pdst-- ^= piQxelXor[2];#endif#if RROP == GXand		    *pdst++ &= piQxelAnd[0];		    *pdst++ &= piQxelAnd[1];		    *pdst-- &= piQxelAnd[2];#endif#if RROP == GXor		    *pdst++ |= piQxelOr[0];		    *pdst++ |= piQxelOr[1];		    *pdst-- |= piQxelOr[2];#endif#if RROP == GXset		    *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]);		    pdst++;		    *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]);		    pdst++;		    *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]);		    pdst--;#endif		    pdst--;		break;	    case 1:#if RROP == GXcopy		    *pdst++ = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000);		    *pdst++ = piQxelXor[1];		    *pdst-- = piQxelXor[2];#endif#if RROP == GXxor		    *pdst++ ^= (piQxelXor[0] & 0xFF000000);		    *pdst++ ^= piQxelXor[1];		    *pdst-- ^= piQxelXor[2];#endif#if RROP == GXand		    *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF);		    *pdst++ &= piQxelAnd[1];		    *pdst-- &= piQxelAnd[2];#endif#if RROP == GXor		    *pdst++ |= (piQxelOr[0] & 0xFF000000);		    *pdst++ |= piQxelOr[1];		    *pdst-- |= piQxelOr[2];#endif

⌨️ 快捷键说明

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