diff -r 000000000000 -r 88edb906c587 svgtopt/gfx2d/src/GfxGeom/GfxEllipseIteratorP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/gfx2d/src/GfxGeom/GfxEllipseIteratorP.cpp Wed Nov 03 18:56:10 2010 +0200 @@ -0,0 +1,155 @@ +/* +* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Graphics Extension Library source file +* +*/ + + +#include "GfxEllipseIteratorP.h" +#include "GfxEllipse2D.h" + + + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// -------------------------------------------------------------------------- +// CGfxEllipseIteratorP::CGfxEllipseIteratorP( TGfxEllipse2D* aEllipse, +// --------------------------------------------------------------------------- +CGfxEllipseIteratorP::CGfxEllipseIteratorP( TGfxEllipse2D* aEllipse, + TGfxAffineTransform* aTransform ) + { + TFloatFixPt KZero; + if ( aEllipse->iWidth < KZero ) + aEllipse->iWidth = KZero; + + if ( aEllipse->iHeight < KZero ) + aEllipse->iHeight = KZero; + + iEllipse = aEllipse; + iTransform = aTransform; + } + +// -------------------------------------------------------------------------- +// TGfxSegType CGfxEllipseIteratorP::CurrentSegment( TFloatFixPt* aCoords ) +// --------------------------------------------------------------------------- +TGfxSegType CGfxEllipseIteratorP::CurrentSegment( TFloatFixPt* aCoords ) + { + TGfxSegType segtype; + + TInt32 pts = 3; + + TFloatFixPt px[12], py[12]; + + #ifdef SVG_FLOAT_BUILD + TFloatFixPt cx = iEllipse->iX + (iEllipse->iWidth * TFloatFixPt(.5f)); + TFloatFixPt cy = iEllipse->iY + (iEllipse->iHeight * TFloatFixPt(.5f)); + TFloatFixPt offx = iEllipse->iWidth * TFloatFixPt(.257f); + TFloatFixPt offy = iEllipse->iHeight * TFloatFixPt(.257f); + #else + TFloatFixPt cx = iEllipse->iX + (iEllipse->iWidth >> 1); + TFloatFixPt cy = iEllipse->iY + (iEllipse->iHeight >> 1); + TFloatFixPt offx = TFloatFixPt( 0x41ca, ETrue ) * iEllipse->iWidth; + TFloatFixPt offy = TFloatFixPt( 0x41ca, ETrue ) * iEllipse->iHeight; + #endif + + px[0] = px[1] = px[11] = iEllipse->iX; + px[2] = px[10] = cx - offx; + px[3] = px[9] = cx; + px[4] = px[8] = cx + offx; + px[5] = px[6] = px[7] = iEllipse->iX + iEllipse->iWidth; + + py[2] = py[3] = py[4] = iEllipse->iY; + py[1] = py[5] = cy - offy; + py[0] = py[6] = cy; + py[7] = py[11] = cy + offy; + py[8] = py[9] = py[10] = iEllipse->iY + iEllipse->iHeight; + + TFloatFixPt* p = aCoords; + switch ( iIdx ) + { + case 0: + p[0] = px[0]; + p[1] = py[0]; + segtype = EGfxSegMoveTo; + pts = 1; + break; + case 1: + p[0] = px[1]; + p[1] = py[1]; + p[2] = px[2]; + p[3] = py[2]; + p[4] = px[3]; + p[5] = py[3]; + segtype = EGfxSegCubicTo; + break; + case 2: + p[0] = px[4]; + p[1] = py[4]; + p[2] = px[5]; + p[3] = py[5]; + p[4] = px[6]; + p[5] = py[6]; + segtype = EGfxSegCubicTo; + break; + case 3: + p[0] = px[7]; + p[1] = py[7]; + p[2] = px[8]; + p[3] = py[8]; + p[4] = px[9]; + p[5] = py[9]; + segtype = EGfxSegCubicTo; + break; + case 4: + p[0] = px[10]; + p[1] = py[10]; + p[2] = px[11]; + p[3] = py[11]; + p[4] = px[0]; + p[5] = py[0]; + segtype = EGfxSegCubicTo; + break; + default: + segtype = EGfxSegClose; + pts = 0; + } + + + + if ( !iTransform->IsIdentity() && pts > 0 ) + { + iTransform->Transform( aCoords, aCoords, pts ); + } + + return segtype; + } + +// -------------------------------------------------------------------------- +// TBool CGfxEllipseIteratorP::IsDone() +// --------------------------------------------------------------------------- +TBool CGfxEllipseIteratorP::IsDone() + { + return ( iIdx > 4 ); + } + +// -------------------------------------------------------------------------- +// void CGfxEllipseIteratorP::NextL() +// --------------------------------------------------------------------------- +void CGfxEllipseIteratorP::NextL() + { + iIdx++; + } + +