/*ARGSUSED*/ void MFBSOLIDFILLAREA(DrawablePtr pDraw, int nbox, BoxPtr pbox, int alu, PixmapPtr nop) { int nlwidth; /* width in longwords of the drawable */ int w; /* width of current box */ int h; /* height of current box */ PixelType *p; /* pointer to bits we're writing */ int nlw; /* loop version of nlwMiddle */ PixelType startmask; PixelType endmask;/* masks for reggedy bits at either end of line */ int nlwExtra; /* to get from right of box to left of next span */ int nlwMiddle; /* number of longwords between sides of boxes */ PixelType *pbits; /* pointer to start of drawable */ mfbGetPixelWidthAndPointer(pDraw, nlwidth, pbits); while (nbox--) { w = pbox->x2 - pbox->x1; h = pbox->y2 - pbox->y1; p = mfbScanline(pbits, pbox->x1, pbox->y1, nlwidth); if ( ((pbox->x1 & PIM) + w) < PPW) { maskpartialbits(pbox->x1, w, startmask); nlwExtra = nlwidth; Duff(h, *p OPEQ startmask; mfbScanlineInc(p, nlwExtra)); } else {
static void mfbFillEllipseSolid( DrawablePtr pDraw, xArc *arc, register int rop) { int x, y, e; int yk, xk, ym, xm, dx, dy, xorg, yorg; register int slw; miFillArcRec info; PixelType *addrlt, *addrlb; register PixelType *addrl; register int n; int nlwidth; register int xpos; PixelType startmask, endmask; int nlmiddle; mfbGetPixelWidthAndPointer(pDraw, nlwidth, addrlt); miFillArcSetup(arc, &info); MIFILLARCSETUP(); xorg += pDraw->x; yorg += pDraw->y; addrlb = addrlt; addrlt += nlwidth * (yorg - y); addrlb += nlwidth * (yorg + y + dy); while (y) { addrlt += nlwidth; addrlb -= nlwidth; MIFILLARCSTEP(slw); if (!slw) continue; xpos = xorg - x; addrl = mfbScanlineOffset(addrlt, (xpos >> PWSH)); if (((xpos & PIM) + slw) < PPW) { maskpartialbits(xpos, slw, startmask); if (rop == RROP_BLACK) *addrl &= ~startmask; else if (rop == RROP_WHITE) *addrl |= startmask; else *addrl ^= startmask; if (miFillArcLower(slw)) { addrl = mfbScanlineOffset(addrlb, (xpos >> PWSH)); if (rop == RROP_BLACK) *addrl &= ~startmask; else if (rop == RROP_WHITE) *addrl |= startmask; else *addrl ^= startmask; } continue; } maskbits(xpos, slw, startmask, endmask, nlmiddle); if (startmask) { if (rop == RROP_BLACK) *addrl++ &= ~startmask; else if (rop == RROP_WHITE) *addrl++ |= startmask; else *addrl++ ^= startmask; } n = nlmiddle; if (rop == RROP_BLACK) while (n--) *addrl++ = 0; else if (rop == RROP_WHITE) while (n--) *addrl++ = ~0; else while (n--) *addrl++ ^= ~0; if (endmask) { if (rop == RROP_BLACK) *addrl &= ~endmask; else if (rop == RROP_WHITE) *addrl |= endmask; else *addrl ^= endmask; } if (!miFillArcLower(slw)) continue; addrl = mfbScanlineOffset(addrlb, (xpos >> PWSH)); if (startmask) { if (rop == RROP_BLACK) *addrl++ &= ~startmask; else if (rop == RROP_WHITE) *addrl++ |= startmask; else *addrl++ ^= startmask; } n = nlmiddle; if (rop == RROP_BLACK) while (n--) *addrl++ = 0; else if (rop == RROP_WHITE) while (n--) *addrl++ = ~0; else while (n--) *addrl++ ^= ~0; if (endmask) { if (rop == RROP_BLACK) *addrl &= ~endmask; else if (rop == RROP_WHITE) *addrl |= endmask; else *addrl ^= endmask; } }