// --------------------------------------------------------------------------- // Clear decoration buffer. // --------------------------------------------------------------------------- // void CPeninputPenTraceDecorator::Clear( TBool aAlwaysErase ) { iLastPenWidth = 8; iLineCount = 0; if ( !( aAlwaysErase || iModified ) ) { return; } TSize size = iBitsBitmap->SizeInPixels(); TBitmapUtil bmpbits( iBitsBitmap ); bmpbits.Begin( TPoint( 0, 0 ) ); for ( TInt i = 0; i < size.iHeight; i++ ) { bmpbits.SetPos( TPoint( 0, i ) ); for ( TInt j = 0; j < size.iWidth; j++ ) { bmpbits.SetPixel( 0xFFFFFF ); bmpbits.IncXPos(); } } bmpbits.End(); size = iMaskBitmap->SizeInPixels(); TBitmapUtil maskbits( iMaskBitmap ); maskbits.Begin( TPoint( 0, 0 ) ); for ( TInt i = 0; i < size.iHeight; i++ ) { maskbits.SetPos( TPoint( 0, i ) ); for ( TInt j = 0; j < size.iWidth; j++ ) { maskbits.SetPixel( 0x000000 ); maskbits.IncXPos(); } } maskbits.End(); iModified = EFalse; }
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; } }