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

📄 mizerarc.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 2 页
字号:
    {	int yorgh = info.yorg + info.h;	int xorghp = info.xorg + info.h;	int xorghn = info.xorg - info.h;	while (1)	{	    Pixelate(info.xorg + x, info.yorg + y);	    Pixelate(info.xorg - x, info.yorg + y);	    Pixelate(info.xorg - x, info.yorgo - y);	    Pixelate(info.xorg + x, info.yorgo - y);	    if (a < 0)		break;	    Pixelate(xorghp - y, yorgh - x);	    Pixelate(xorghn + y, yorgh - x);	    Pixelate(xorghn + y, yorgh + x);	    Pixelate(xorghp - y, yorgh + x);	    MIARCCIRCLESTEP(;);	}	if (x > 1 && pts[-1].x == pts[-5].x && pts[-1].y == pts[-5].y)	    pts -= 4;	x = info.w;	y = info.h;    }    else if (do360)    {	while (y < info.h || x < info.w)	{	    MIARCOCTANTSHIFT(;);	    Pixelate(info.xorg + x, info.yorg + y);	    Pixelate(info.xorgo - x, info.yorg + y);	    Pixelate(info.xorgo - x, info.yorgo - y);	    Pixelate(info.xorg + x, info.yorgo - y);	    MIARCSTEP(;,;);	}    }    else    {	while (y < info.h || x < info.w)	{	    MIARCOCTANTSHIFT(;);	    if ((x == info.start.x) || (y == info.start.y))	    {		mask = info.start.mask;		info.start = info.altstart;	    }	    DoPix(0, info.xorg + x, info.yorg + y);	    DoPix(1, info.xorgo - x, info.yorg + y);	    DoPix(2, info.xorgo - x, info.yorgo - y);	    DoPix(3, info.xorg + x, info.yorgo - y);	    if ((x == info.end.x) || (y == info.end.y))	    {		mask = info.end.mask;		info.end = info.altend;	    }	    MIARCSTEP(;,;);	}    }    if ((x == info.start.x) || (y == info.start.y))	mask = info.start.mask;    DoPix(0, info.xorg + x, info.yorg + y);    DoPix(2, info.xorgo - x, info.yorgo - y);    if (arc->height & 1)    {	DoPix(1, info.xorgo - x, info.yorg + y);	DoPix(3, info.xorg + x, info.yorgo - y);    }    return pts;}#undef DoPix#define DoPix(idx,xval,yval) \    if (mask & (1 << idx)) \    { \	arcPts[idx]->x = xval; \	arcPts[idx]->y = yval; \	arcPts[idx]++; \    }static voidmiZeroArcDashPts(pGC, arc, dinfo, points, maxPts, evenPts, oddPts)    GCPtr pGC;    xArc *arc;    DashInfo *dinfo;    int maxPts;    register DDXPointPtr points, *evenPts, *oddPts;{    miZeroArcRec info;    register int x, y, a, b, d, mask;    register int k1, k3, dx, dy;    int dashRemaining;    DDXPointPtr arcPts[4];    DDXPointPtr startPts[5], endPts[5];    int deltas[5];    DDXPointPtr startPt, pt, lastPt, pts;    int i, j, delta, ptsdelta, seg, startseg;    for (i = 0; i < 4; i++)	arcPts[i] = points + (i * maxPts);    (void)miZeroArcSetup(arc, &info, FALSE);    MIARCSETUP();    mask = info.initialMask;    startseg = info.startAngle / QUADRANT;    startPt = arcPts[startseg];    if (!(arc->width & 1))    {	DoPix(1, info.xorgo, info.yorg);	DoPix(3, info.xorgo, info.yorgo);    }    if (!info.end.x || !info.end.y)    {	mask = info.end.mask;	info.end = info.altend;    }    while (y < info.h || x < info.w)    {	MIARCOCTANTSHIFT(;);	if ((x == info.firstx) || (y == info.firsty))	    startPt = arcPts[startseg];	if ((x == info.start.x) || (y == info.start.y))	{	    mask = info.start.mask;	    info.start = info.altstart;	}	DoPix(0, info.xorg + x, info.yorg + y);	DoPix(1, info.xorgo - x, info.yorg + y);	DoPix(2, info.xorgo - x, info.yorgo - y);	DoPix(3, info.xorg + x, info.yorgo - y);	if ((x == info.end.x) || (y == info.end.y))	{	    mask = info.end.mask;	    info.end = info.altend;	}	MIARCSTEP(;,;);    }    if ((x == info.firstx) || (y == info.firsty))	startPt = arcPts[startseg];    if ((x == info.start.x) || (y == info.start.y))	mask = info.start.mask;    DoPix(0, info.xorg + x, info.yorg + y);    DoPix(2, info.xorgo - x, info.yorgo - y);    if (arc->height & 1)    {	DoPix(1, info.xorgo - x, info.yorg + y);	DoPix(3, info.xorg + x, info.yorgo - y);    }    for (i = 0; i < 4; i++)    {	seg = (startseg + i) & 3;	pt = points + (seg * maxPts);	if (seg & 1)	{	    startPts[i] = pt;	    endPts[i] = arcPts[seg];	    deltas[i] = 1;	}	else	{	    startPts[i] = arcPts[seg] - 1;	    endPts[i] = pt - 1;	    deltas[i] = -1;	}    }    startPts[4] = startPts[0];    endPts[4] = startPt;    startPts[0] = startPt;    if (startseg & 1)    {	if (startPts[4] != endPts[4])	    endPts[4]--;	deltas[4] = 1;    }    else    {	if (startPts[0] > startPts[4])	    startPts[0]--;	if (startPts[4] < endPts[4])	    endPts[4]--;	deltas[4] = -1;    }    if (arc->angle2 < 0)    {	DDXPointPtr tmps, tmpe;	int tmpd;	tmpd = deltas[0];	tmps = startPts[0] - tmpd;	tmpe = endPts[0] - tmpd;	startPts[0] = endPts[4] - deltas[4];	endPts[0] = startPts[4] - deltas[4];	deltas[0] = -deltas[4];	startPts[4] = tmpe;	endPts[4] = tmps;	deltas[4] = -tmpd;	tmpd = deltas[1];	tmps = startPts[1] - tmpd;	tmpe = endPts[1] - tmpd;	startPts[1] = endPts[3] - deltas[3];	endPts[1] = startPts[3] - deltas[3];	deltas[1] = -deltas[3];	startPts[3] = tmpe;	endPts[3] = tmps;	deltas[3] = -tmpd;	tmps = startPts[2] - deltas[2];	startPts[2] = endPts[2] - deltas[2];	endPts[2] = tmps;	deltas[2] = -deltas[2];    }    for (i = 0; i < 5 && startPts[i] == endPts[i]; i++)	;    if (i == 5)	return;    pt = startPts[i];    for (j = 4; startPts[j] == endPts[j]; j--)	;    lastPt = endPts[j] - deltas[j];    if (dinfo->haveLast &&	(pt->x == dinfo->endPt.x) && (pt->y == dinfo->endPt.y))    {	startPts[i] += deltas[i];    }    else    {	dinfo->dashIndex = dinfo->dashIndexInit;	dinfo->dashOffset = dinfo->dashOffsetInit;    }    if (!dinfo->skipStart && (info.startAngle != info.endAngle))    {	dinfo->startPt = *pt;	dinfo->haveStart = TRUE;    }    else if (!dinfo->skipLast && dinfo->haveStart &&	     (lastPt->x == dinfo->startPt.x) &&	     (lastPt->y == dinfo->startPt.y) &&	     (lastPt != startPts[i]))	endPts[j] = lastPt;    if (info.startAngle != info.endAngle)    {	dinfo->haveLast = TRUE;	dinfo->endPt = *lastPt;    }    dashRemaining = pGC->dash[dinfo->dashIndex] - dinfo->dashOffset;    for (i = 0; i < 5; i++)    {	pt = startPts[i];	lastPt = endPts[i];	delta = deltas[i];	while (pt != lastPt)	{	    if (dinfo->dashIndex & 1)	    {		pts = *oddPts;		ptsdelta = -1;	    }	    else	    {		pts = *evenPts;		ptsdelta = 1;	    }	    while ((pt != lastPt) && --dashRemaining >= 0)	    {		*pts = *pt;		pts += ptsdelta;		pt += delta;	    }	    if (dinfo->dashIndex & 1)		*oddPts = pts;	    else		*evenPts = pts;	    if (dashRemaining <= 0)	    {		if (++(dinfo->dashIndex) == pGC->numInDashList)		    dinfo->dashIndex = 0;		dashRemaining = pGC->dash[dinfo->dashIndex];	    }	}    }    dinfo->dashOffset = pGC->dash[dinfo->dashIndex] - dashRemaining;}voidmiZeroPolyArc(pDraw, pGC, narcs, parcs)    DrawablePtr	pDraw;    GCPtr	pGC;    int		narcs;    xArc	*parcs;{    int maxPts = 0;    register int n, maxw;    register xArc *arc;    register int i;    DDXPointPtr points, pts, oddPts;    register DDXPointPtr pt;    int numPts;    Bool dospans;    int *widths;    XID fgPixel = pGC->fgPixel;    DashInfo dinfo;    for (arc = parcs, i = narcs; --i >= 0; arc++)    {	if (!miCanZeroArc(arc))	    miPolyArc(pDraw, pGC, 1, arc);	else	{	    if (arc->width > arc->height)		n = arc->width + (arc->height >> 1);	    else		n = arc->height + (arc->width >> 1);	    if (n > maxPts)		maxPts = n;	}    }    if (!maxPts)	return;    numPts = maxPts << 2;    dospans = (pGC->lineStyle != LineSolid) || (pGC->fillStyle != FillSolid);    if (dospans)    {	widths = (int *)ALLOCATE_LOCAL(sizeof(int) * numPts);	if (!widths)	    return;	maxw = 0;    }    if (pGC->lineStyle != LineSolid)    {	numPts <<= 1;	dinfo.haveStart = FALSE;	dinfo.skipStart = FALSE;	dinfo.haveLast = FALSE;	dinfo.dashIndexInit = 0;	dinfo.dashOffsetInit = 0;	miStepDash((int)pGC->dashOffset, &dinfo.dashIndexInit,		   (unsigned char *) pGC->dash, (int)pGC->numInDashList,		   &dinfo.dashOffsetInit);    }    points = (DDXPointPtr)ALLOCATE_LOCAL(sizeof(DDXPointRec) * numPts);    if (!points)    {	if (dospans)	{	    DEALLOCATE_LOCAL(widths);	}	return;    }    for (arc = parcs, i = narcs; --i >= 0; arc++)    {	if (miCanZeroArc(arc))	{	    if (pGC->lineStyle == LineSolid)		pts = miZeroArcPts(arc, points);	    else	    {		pts = points;		oddPts = &points[(numPts >> 1) - 1];		dinfo.skipLast = i;		miZeroArcDashPts(pGC, arc, &dinfo,				 oddPts + 1, maxPts, &pts, &oddPts);		dinfo.skipStart = TRUE;	    }	    n = pts - points;	    if (!dospans)		(*pGC->ops->PolyPoint)(pDraw, pGC, CoordModeOrigin, n, points);	    else	    {		if (n > maxw)		{		    while (maxw < n)			widths[maxw++] = 1;		}		if (pGC->miTranslate)		{		    for (pt = points; pt != pts; pt++)		    {			pt->x += pDraw->x;			pt->y += pDraw->y;		    }		}		(*pGC->ops->FillSpans)(pDraw, pGC, n, points, widths, FALSE);	    }	    if (pGC->lineStyle != LineDoubleDash)		continue;	    if ((pGC->fillStyle == FillSolid) ||		(pGC->fillStyle == FillStippled))	    {		DoChangeGC(pGC, GCForeground, (XID *)&pGC->bgPixel, 0);		ValidateGC(pDraw, pGC);	    }	    pts = &points[numPts >> 1];	    oddPts++;	    n = pts - oddPts;	    if (!dospans)		(*pGC->ops->PolyPoint)(pDraw, pGC, CoordModeOrigin, n, oddPts);	    else	    {		if (n > maxw)		{		    while (maxw < n)			widths[maxw++] = 1;		}		if (pGC->miTranslate)		{		    for (pt = oddPts; pt != pts; pt++)		    {			pt->x += pDraw->x;			pt->y += pDraw->y;		    }		}		(*pGC->ops->FillSpans)(pDraw, pGC, n, oddPts, widths, FALSE);	    }	    if ((pGC->fillStyle == FillSolid) ||		(pGC->fillStyle == FillStippled))	    {		DoChangeGC(pGC, GCForeground, &fgPixel, 0);		ValidateGC(pDraw, pGC);	    }	}    }    DEALLOCATE_LOCAL(points);    if (dospans)    {	DEALLOCATE_LOCAL(widths);    }}

⌨️ 快捷键说明

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