static void RROP_NAME(cfbZeroArcSS8)( DrawablePtr pDraw, GCPtr pGC, xArc *arc) { miZeroArcRec info; Bool do360; register int x; PixelType *addrp; register PixelType *yorgp, *yorgop; #if PSZ == 24 int xorg, xorg3, xorgo, xorgo3; register int xtmp; #endif RROP_DECLARE register int yoffset; int npwidth, dyoffset; register int y, a, b, d, mask; register int k1, k3, dx, dy; cfbGetPixelWidthAndPointer(pDraw,npwidth, addrp) RROP_FETCH_GC (pGC); do360 = miZeroArcSetup(arc, &info, TRUE); yorgp = addrp + ((info.yorg + pDraw->y) * npwidth); yorgop = addrp + ((info.yorgo + pDraw->y) * npwidth); info.xorg += pDraw->x; info.xorgo += pDraw->x; #if PSZ == 24 xorg = info.xorg; xorg3 = xorg * 3; info.xorg = (info.xorg * 3) >> 2; xorgo = info.xorgo; xorgo3 = xorgo * 3; info.xorgo = (info.xorgo * 3) >> 2; #endif MIARCSETUP(); yoffset = y ? npwidth : 0; dyoffset = 0; mask = info.initialMask; if (!(arc->width & 1)) { #if PSZ == 24 if (mask & 2) RROP_SOLID24((yorgp + info.xorgo), xorgo); if (mask & 8) RROP_SOLID24((yorgop + info.xorgo), xorgo); #else if (mask & 2) RROP_SOLID((yorgp + info.xorgo)); if (mask & 8) RROP_SOLID((yorgop + info.xorgo)); #endif /* PSZ == 24 */ } if (!info.end.x || !info.end.y) { mask = info.end.mask; info.end = info.altend; } if (do360 && (arc->width == arc->height) && !(arc->width & 1)) { register int xoffset = npwidth; #if PSZ == 24 PixelType *yorghb = yorgp + (info.h * npwidth); register int tmp1, tmp2, tmp1_3, tmp2_3; tmp1 = xorg + info.h; tmp1_3 = tmp1 * 3; tmp2 = xorg - info.h; tmp2_3 = tmp2 * 3; while (1) { xtmp = (xorg3 + x * 3) >> 2; RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x); RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x); xtmp = (xorg3 - x * 3) >> 2; RROP_SOLID24(yorgp + yoffset + xtmp, xorg - x); RROP_SOLID24(yorgop - yoffset + xtmp, xorg - x); if (a < 0) break; xtmp = (tmp1_3 - y * 3) >> 2; RROP_SOLID24(yorghb - xoffset + xtmp, tmp1 - y); RROP_SOLID24(yorghb + xoffset + xtmp, tmp1 - y); xtmp = (tmp2_3 + y * 3) >> 2; RROP_SOLID24(yorghb - xoffset + xtmp, tmp2 + y); RROP_SOLID24(yorghb + xoffset + xtmp, tmp2 + y); xoffset += npwidth; MIARCCIRCLESTEP(yoffset += npwidth;); } #else PixelType *yorghb = yorgp + (info.h * npwidth) + info.xorg; PixelType *yorgohb = yorghb - info.h; yorgp += info.xorg; yorgop += info.xorg; yorghb += info.h; while (1) { RROP_SOLID(yorgp + yoffset + x); RROP_SOLID(yorgp + yoffset - x); RROP_SOLID(yorgop - yoffset - x); RROP_SOLID(yorgop - yoffset + x); if (a < 0) break; RROP_SOLID(yorghb - xoffset - y); RROP_SOLID(yorgohb - xoffset + y); RROP_SOLID(yorgohb + xoffset + y); RROP_SOLID(yorghb + xoffset - y); xoffset += npwidth; MIARCCIRCLESTEP(yoffset += npwidth;); }
static void mfbZeroArcSS( DrawablePtr pDraw, GCPtr pGC, xArc *arc) { miZeroArcRec info; Bool do360; register int x, y, a, b, d, mask; register int k1, k3, dx, dy; PixelType *addrl; PixelType *yorgl, *yorgol; PixelType pixel; int nlwidth, yoffset, dyoffset; PixelType pmask; register PixelType *paddr; if (((mfbPrivGC *)(pGC->devPrivates[mfbGCPrivateIndex].ptr))->rop == RROP_BLACK) pixel = 0; else pixel = ~0; mfbGetPixelWidthAndPointer(pDraw, nlwidth, addrl); do360 = miZeroArcSetup(arc, &info, TRUE); yorgl = addrl + ((info.yorg + pDraw->y) * nlwidth); yorgol = addrl + ((info.yorgo + pDraw->y) * nlwidth); info.xorg += pDraw->x; info.xorgo += pDraw->x; MIARCSETUP(); yoffset = y ? nlwidth : 0; dyoffset = 0; mask = info.initialMask; if (!(arc->width & 1)) { DoPix(2, yorgl, 0, info.xorgo); DoPix(8, yorgol, 0, info.xorgo); } if (!info.end.x || !info.end.y) { mask = info.end.mask; info.end = info.altend; } if (do360 && (arc->width == arc->height) && !(arc->width & 1)) { int xoffset = nlwidth; PixelType *yorghl = mfbScanlineDeltaNoBankSwitch(yorgl, info.h, nlwidth); int xorghp = info.xorg + info.h; int xorghn = info.xorg - info.h; if (pixel) { while (1) { PixelateWhite(yorgl, yoffset, info.xorg + x); PixelateWhite(yorgl, yoffset, info.xorg - x); PixelateWhite(yorgol, -yoffset, info.xorg - x); PixelateWhite(yorgol, -yoffset, info.xorg + x); if (a < 0) break; PixelateWhite(yorghl, -xoffset, xorghp - y); PixelateWhite(yorghl, -xoffset, xorghn + y); PixelateWhite(yorghl, xoffset, xorghn + y); PixelateWhite(yorghl, xoffset, xorghp - y); xoffset += nlwidth; MIARCCIRCLESTEP(yoffset += nlwidth;); } }