// ---------------------------------------------------------------------------
// 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;
}
Exemplo n.º 2
0
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;
	}
    }