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

📄 cfb8line.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
	      *addrp = ((*addrp)&0xFF)|(piQxelXor[2] & 0xFFFFFF00);	      break;	    case 1:	      *addrp = ((*addrp)&0xFFFFFF)|(piQxelXor[0] & 0xFF000000);	      *(addrp+1) = ((*(addrp+1))&0xFFFF0000)|(piQxelXor[1] & 0xFFFF);	      break;	    case 2:	      *addrp = ((*addrp)&0xFFFF)|(piQxelXor[1] & 0xFFFF0000);	      *(addrp+1) = ((*(addrp+1))&0xFFFFFF00)|(piQxelXor[2] & 0xFF);	      break;	    }#endif#if RROP == GXxor	    switch(xOffset & 3){	    case 0:	      *addrp ^= (piQxelXor[0] & 0xFFFFFF);	      break;	    case 3:	      *addrp ^= (piQxelXor[2] & 0xFFFFFF00);	      break;	    case 1:	      *addrp ^= (piQxelXor[0] & 0xFF000000);	      *(addrp+1) ^= (piQxelXor[1] & 0xFFFF);	      break;	    case 2:	      *addrp ^= (piQxelXor[1] & 0xFFFF0000);	      *(addrp+1) ^= (piQxelXor[2] & 0xFF);	      break;	    }#endif#if RROP == GXand	    switch(xOffset & 3){	    case 0:	      *addrp &= (piQxelAnd[0] | 0xFF000000);	      break;	    case 3:	      *addrp &= (piQxelAnd[2] | 0xFF);	      break;	    case 1:	      *addrp &= (0xFFFFFF|piQxelAnd[0]);	      *(addrp+1) &= (0xFFFF0000|piQxelAnd[1]);	      break;	    case 2:	      *addrp &= (0xFFFF|piQxelAnd[1]);	      *(addrp+1) &= (0xFFFFFF00|piQxelAnd[2]);	      break;	    }#endif#if RROP == GXor	    switch(xOffset & 3){	    case 0:	      *addrp |= (piQxelOr[0] & 0xFFFFFF);	      break;	    case 3:	      *addrp |= (piQxelOr[2] & 0xFFFFFF00);	      break;	    case 1:	      *addrp |= (piQxelOr[0] & 0xFF000000);	      *(addrp+1) |= (piQxelOr[1] & 0xFFFF);	      break;	    case 2:	      *addrp |= (piQxelOr[1] & 0xFFFF0000);	      *(addrp+1) |= (piQxelOr[2] & 0xFF);	      break;	    }#endif#if RROP == GXset	    switch(xOffset & 3){	    case 0:	      *addrp = (((*addrp)&(piQxelAnd[0] |0xFF000000))^(piQxelXor[0] & 0xFFFFFF));	      break;	    case 3:	      *addrp = (((*addrp)&(piQxelAnd[2]|0xFF))^(piQxelXor[2] & 0xFFFFFF00));	      break;	    case 1:	      *addrp = (((*addrp)&(piQxelAnd[0]|0xFFFFFF))^(piQxelXor[0] & 0xFF000000));	      *(addrp+1) = (((*(addrp+1))&(piQxelAnd[1]|0xFFFF0000))^(piQxelXor[1] & 0xFFFF));	      break;	    case 2:	      *addrp = (((*addrp)&(piQxelAnd[1]|0xFFFF))^(piQxelXor[1] & 0xFFFF0000));	      *(addrp+1) = (((*(addrp+1))&(piQxelAnd[2]|0xFFFFFF00))^(piQxelXor[2] & 0xFF));	      break;	    } #endif#else	RROP_SOLID (addrp);# endif    }#endif /* !POLYSEGMENT */    return -1;}#endif /* INCLUDE_DRAW */#ifdef INCLUDE_OTHERS#ifdef POLYSEGMENTvoidcfb8SegmentSS1Rect (pDrawable, pGC, nseg, pSegInit)    DrawablePtr	    pDrawable;    GCPtr	    pGC;    int		    nseg;    xSegment	    *pSegInit;{    int	    (*func)();    void    (*clip)();    int	    drawn;    cfbPrivGCPtr    devPriv;    devPriv = cfbGetGCPrivate(pGC);#ifdef NO_ONE_RECT    if (REGION_NUM_RECTS(devPriv->pCompositeClip) != 1)    {       cfbSegmentSS(pDrawable, pGC, nseg, pSegInit);       return;    }#endif    switch (devPriv->rop)    {    case GXcopy:	func = cfb8SegmentSS1RectCopy;	clip = cfb8ClippedLineCopy;#ifdef FAST_MUL	if (cfbGetPixelWidth (pDrawable) == WIDTH_FAST)	    func = cfb8SegmentSS1RectShiftCopy;#endif	break;    case GXxor:	func = cfb8SegmentSS1RectXor;	clip = cfb8ClippedLineXor;	break;    default:	func = cfb8SegmentSS1RectGeneral;	clip = cfb8ClippedLineGeneral;	break;    }    while (nseg)    {	drawn = (*func) (pDrawable, pGC, nseg, pSegInit);	if (drawn == -1)	    break;	(*clip) (pDrawable, pGC,			 pSegInit[drawn-1].x1, pSegInit[drawn-1].y1,			 pSegInit[drawn-1].x2, pSegInit[drawn-1].y2,			 &devPriv->pCompositeClip->extents,			 pGC->capStyle == CapNotLast);	pSegInit += drawn;	nseg -= drawn;    }}#else /* POLYSEGMENT */voidcfb8LineSS1Rect (pDrawable, pGC, mode, npt, pptInit)    DrawablePtr	pDrawable;    GCPtr	pGC;    int		mode;    int		npt;    DDXPointPtr	pptInit;{    int	    (*func)();    void    (*clip)();    int	    drawn;    cfbPrivGCPtr    devPriv;    int x1, y1, x2, y2;    DDXPointPtr pptInitOrig = pptInit;    devPriv = cfbGetGCPrivate(pGC);#ifdef NO_ONE_RECT    if (REGION_NUM_RECTS(devPriv->pCompositeClip) != 1)    {       cfbLineSS(pDrawable, pGC, mode, npt, pptInit);       return;    }#endif    switch (devPriv->rop)    {    case GXcopy:	func = cfb8LineSS1RectCopy;	clip = cfb8ClippedLineCopy;	if (mode == CoordModePrevious)	    func = cfb8LineSS1RectPreviousCopy;	break;    case GXxor:	func = cfb8LineSS1RectXor;	clip = cfb8ClippedLineXor;	break;    default:	func = cfb8LineSS1RectGeneral;	clip = cfb8ClippedLineGeneral;	break;    }    if (mode == CoordModePrevious)    {	x1 = pptInit->x;	y1 = pptInit->y;	while (npt > 1)	{	    drawn = (*func) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig,			     &x1, &y1, &x2, &y2);	    if (drawn == -1)		break;	    (*clip) (pDrawable, pGC, x1, y1, x2, y2,		     &devPriv->pCompositeClip->extents,		     drawn != npt - 1 || pGC->capStyle == CapNotLast);	    pptInit += drawn;	    npt -= drawn;	    x1 = x2;	    y1 = y2;	}    }    else    {	while (npt > 1)	{	    drawn = (*func) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig,			     &x1, &y1, &x2, &y2);	    if (drawn == -1)		break;	    (*clip) (pDrawable, pGC,		     pptInit[drawn-1].x, pptInit[drawn-1].y,		     pptInit[drawn].x, pptInit[drawn].y,		     &devPriv->pCompositeClip->extents,		     drawn != npt - 1 || pGC->capStyle == CapNotLast);	    pptInit += drawn;	    npt -= drawn;	}    }}#endif /* else POLYSEGMENT */#endif /* INCLUDE_OTHERS */#if !defined(POLYSEGMENT) && !defined (PREVIOUS)voidRROP_NAME (cfb8ClippedLine) (pDrawable, pGC, x1, y1, x2, y2, boxp, shorten)    DrawablePtr	pDrawable;    GCPtr	pGC;    int		x1, y1, x2, y2;    BoxPtr	boxp;    Bool	shorten;{    int		    oc1, oc2;    int		    e, e1, e3, len;    int		    adx, ady;    PixelType	    *addr;    int		    nwidth;    int		    stepx, stepy;    int		    xorg, yorg;    int             new_x1, new_y1, new_x2, new_y2;    Bool	    pt1_clipped, pt2_clipped;    int		    changex, changey, result;#if PSZ == 24    int xOffset;    PixelType   *addrLineEnd;    char *addrb;    int stepx3, stepy3;#endif    int		    octant;    unsigned int    bias = miGetZeroLineBias(pDrawable->pScreen);    cfbGetPixelWidthAndPointer(pDrawable, nwidth, addr);    xorg = pDrawable->x;    yorg = pDrawable->y;    x1 += xorg;    y1 += yorg;    x2 += xorg;    y2 += yorg;    oc1 = 0;    oc2 = 0;    OUTCODES (oc1, x1, y1, boxp);    OUTCODES (oc2, x2, y2, boxp);    if (oc1 & oc2)	return;    CalcLineDeltas(x1, y1, x2, y2, adx, ady, stepx, stepy, 1, nwidth, octant);    if (adx <= ady)    {	int	t;	t = adx;	adx = ady;	ady = t;	t = stepx;	stepx = stepy;	stepy = t;		SetYMajorOctant(octant);    }    e = - adx;    e1 = ady << 1;    e3 = - (adx << 1);    FIXUP_ERROR(e, octant, bias);    new_x1 = x1;    new_y1 = y1;    new_x2 = x2;    new_y2 = y2;    pt1_clipped = 0;    pt2_clipped = 0;    if (IsXMajorOctant(octant))    {	result = miZeroClipLine(boxp->x1, boxp->y1, boxp->x2 - 1, boxp->y2 - 1,				&new_x1, &new_y1, &new_x2, &new_y2,				adx, ady,				&pt1_clipped, &pt2_clipped,				octant, bias, oc1, oc2);	if (result == -1)	    return;		len = abs(new_x2 - new_x1) - 1; /* this routine needs the "-1" */		/* if we've clipped the endpoint, always draw the full length	 * of the segment, because then the capstyle doesn't matter 	 * if x2,y2 isn't clipped, use the capstyle	 * (shorten == TRUE <--> CapNotLast)	 */	if (pt2_clipped || !shorten)	    len++;		if (pt1_clipped)	{	    /* must calculate new error terms */	    changex = abs(new_x1 - x1);	    changey = abs(new_y1 - y1);	    e = e + changey * e3 + changex * e1;	    	}    }    else /* Y_AXIS */    {	result = miZeroClipLine(boxp->x1, boxp->y1, boxp->x2 - 1, boxp->y2 - 1,				&new_x1, &new_y1, &new_x2, &new_y2,				ady, adx,				&pt1_clipped, &pt2_clipped,				octant, bias, oc1, oc2);	if (result == -1)	    return;		len = abs(new_y2 - new_y1) - 1; /* this routine needs the "-1" */		/* if we've clipped the endpoint, always draw the full length	 * of the segment, because then the capstyle doesn't matter 	 * if x2,y2 isn't clipped, use the capstyle	 * (shorten == TRUE <--> CapNotLast)	 */	if (pt2_clipped || !shorten)	    len++;		if (pt1_clipped)	{	    /* must calculate new error terms */	    changex = abs(new_x1 - x1);	    changey = abs(new_y1 - y1);	    e = e + changex * e3 + changey * e1;	}    }    x1 = new_x1;    y1 = new_y1;    {    register PixelType	*addrp;    RROP_DECLARE    RROP_FETCH_GC(pGC);#if PSZ == 24    xOffset = x1;    addrLineEnd = addr + (y1 * nwidth);    addrb = (char *)addrLineEnd + x1 * 3;    if (stepx == 1  ||  stepx == -1){      stepx3 = stepx * 3;      stepy3 = stepy * sizeof (long);    } else {      stepx3 = stepx * sizeof (long);      stepy3 = stepy * 3;    }#else    addrp = addr + (y1 * nwidth) + x1;#endif#ifndef REARRANGE    if (!ady)    {#if PSZ == 24#define body {\	    body_rop \	    addrb += stepx3; \	}#else#define body	{ RROP_SOLID(addrp); addrp += stepx; }#endif	while (len >= PGSZB)	{	    body body body body#if PGSZ == 64	    body body body body#endif	    len -= PGSZB;	}	switch (len)	{#if PGSZ == 64	case  7: body case 6: body case 5: body case 4: body#endif	case  3: body case 2: body case 1: body	}#undef body    }    else#endif /* !REARRANGE */    {#if PSZ == 24#define body {\	    body_rop \	    addrb += stepx3; \	    e += e1; \	    if (e >= 0) \	    { \		addrb += stepy3; \		e += e3; \	    } \	}#else#define body {\	    RROP_SOLID(addrp); \	    addrp += stepx; \	    e += e1; \	    if (e >= 0) \	    { \		addrp += stepy; \		e += e3; \	     } \	}#endif#ifdef LARGE_INSTRUCTION_CACHE	while ((len -= PGSZB) >= 0)	{	    body body body body#if PGSZ == 64	    body body body body#endif	}	switch (len)	{	case  -1: body case -2: body case -3: body#if PGSZ == 64	case  -4: body case -5: body case -6: body case -7: body#endif	}#else /* !LARGE_INSTRUCTION_CACHE */	IMPORTANT_START;	while ((len -= 2) >= 0)	{	    body body;	}	if (len & 1)	    body;	IMPORTANT_END;#endif /* LARGE_INSTRUCTION_CACHE */    }#if PSZ == 24    body_rop#else    RROP_SOLID(addrp);#endif#undef body    }}#endif /* !POLYSEGMENT && !PREVIOUS */#endif /* PIXEL_ADDR */

⌨️ 快捷键说明

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