Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1241)

Unified Diff: Source/core/svg/SVGPathSegListSource.cpp

Issue 1023993002: Rework the SVGPathSource interface (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Blender fixups. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/svg/SVGPathSegListSource.h ('k') | Source/core/svg/SVGPathSource.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/svg/SVGPathSegListSource.cpp
diff --git a/Source/core/svg/SVGPathSegListSource.cpp b/Source/core/svg/SVGPathSegListSource.cpp
index 8ab7e292946fee46b261e9a676a46f392d4eaa8d..c5f16b94cd3c584414d7e3b183569885bed356fe 100644
--- a/Source/core/svg/SVGPathSegListSource.cpp
+++ b/Source/core/svg/SVGPathSegListSource.cpp
@@ -18,7 +18,6 @@
*/
#include "config.h"
-
#include "core/svg/SVGPathSegListSource.h"
#include "core/svg/SVGPathElement.h"
@@ -37,121 +36,86 @@ SVGPathSegListSource::SVGPathSegListSource(SVGPathSegList::ConstIterator itBegin
{
}
-DEFINE_TRACE(SVGPathSegListSource)
-{
- visitor->trace(m_segment);
- SVGPathSource::trace(visitor);
-}
-
bool SVGPathSegListSource::hasMoreData() const
{
return m_itCurrent != m_itEnd;
}
-bool SVGPathSegListSource::parseSVGSegmentType(SVGPathSegType& pathSegType)
+SVGPathSegType SVGPathSegListSource::peekSegmentType()
{
- m_segment = *m_itCurrent;
- pathSegType = static_cast<SVGPathSegType>(m_segment->pathSegType());
- ++m_itCurrent;
- return true;
+ ASSERT(hasMoreData());
+ return static_cast<SVGPathSegType>(m_itCurrent->pathSegType());
}
-SVGPathSegType SVGPathSegListSource::nextCommand(SVGPathSegType)
+PathSegmentData SVGPathSegListSource::parseSegment()
{
- m_segment = *m_itCurrent;
- SVGPathSegType pathSegType = static_cast<SVGPathSegType>(m_segment->pathSegType());
+ ASSERT(hasMoreData());
+ PathSegmentData segment;
+ RefPtrWillBeRawPtr<SVGPathSeg> pathSegment = *m_itCurrent;
+ segment.command = static_cast<SVGPathSegType>(pathSegment->pathSegType());
++m_itCurrent;
- return pathSegType;
-}
-
-bool SVGPathSegListSource::parseMoveToSegment(FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegMoveToAbs || m_segment->pathSegType() == PathSegMoveToRel);
- SVGPathSegSingleCoordinate* moveTo = static_cast<SVGPathSegSingleCoordinate*>(m_segment.get());
- targetPoint = FloatPoint(moveTo->x(), moveTo->y());
- return true;
-}
-
-bool SVGPathSegListSource::parseLineToSegment(FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegLineToAbs || m_segment->pathSegType() == PathSegLineToRel);
- SVGPathSegSingleCoordinate* lineTo = static_cast<SVGPathSegSingleCoordinate*>(m_segment.get());
- targetPoint = FloatPoint(lineTo->x(), lineTo->y());
- return true;
-}
-bool SVGPathSegListSource::parseLineToHorizontalSegment(float& x)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegLineToHorizontalAbs || m_segment->pathSegType() == PathSegLineToHorizontalRel);
- SVGPathSegLinetoHorizontal* horizontal = static_cast<SVGPathSegLinetoHorizontal*>(m_segment.get());
- x = horizontal->x();
- return true;
-}
-
-bool SVGPathSegListSource::parseLineToVerticalSegment(float& y)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegLineToVerticalAbs || m_segment->pathSegType() == PathSegLineToVerticalRel);
- SVGPathSegLinetoVertical* vertical = static_cast<SVGPathSegLinetoVertical*>(m_segment.get());
- y = vertical->y();
- return true;
-}
-
-bool SVGPathSegListSource::parseCurveToCubicSegment(FloatPoint& point1, FloatPoint& point2, FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegCurveToCubicAbs || m_segment->pathSegType() == PathSegCurveToCubicRel);
- SVGPathSegCurvetoCubic* cubic = static_cast<SVGPathSegCurvetoCubic*>(m_segment.get());
- point1 = FloatPoint(cubic->x1(), cubic->y1());
- point2 = FloatPoint(cubic->x2(), cubic->y2());
- targetPoint = FloatPoint(cubic->x(), cubic->y());
- return true;
-}
-
-bool SVGPathSegListSource::parseCurveToCubicSmoothSegment(FloatPoint& point2, FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegCurveToCubicSmoothAbs || m_segment->pathSegType() == PathSegCurveToCubicSmoothRel);
- SVGPathSegCurvetoCubicSmooth* cubicSmooth = static_cast<SVGPathSegCurvetoCubicSmooth*>(m_segment.get());
- point2 = FloatPoint(cubicSmooth->x2(), cubicSmooth->y2());
- targetPoint = FloatPoint(cubicSmooth->x(), cubicSmooth->y());
- return true;
-}
-
-bool SVGPathSegListSource::parseCurveToQuadraticSegment(FloatPoint& point1, FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegCurveToQuadraticAbs || m_segment->pathSegType() == PathSegCurveToQuadraticRel);
- SVGPathSegCurvetoQuadratic* quadratic = static_cast<SVGPathSegCurvetoQuadratic*>(m_segment.get());
- point1 = FloatPoint(quadratic->x1(), quadratic->y1());
- targetPoint = FloatPoint(quadratic->x(), quadratic->y());
- return true;
-}
-
-bool SVGPathSegListSource::parseCurveToQuadraticSmoothSegment(FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegCurveToQuadraticSmoothAbs || m_segment->pathSegType() == PathSegCurveToQuadraticSmoothRel);
- SVGPathSegSingleCoordinate* quadraticSmooth = static_cast<SVGPathSegSingleCoordinate*>(m_segment.get());
- targetPoint = FloatPoint(quadraticSmooth->x(), quadraticSmooth->y());
- return true;
-}
-
-bool SVGPathSegListSource::parseArcToSegment(float& rx, float& ry, float& angle, bool& largeArc, bool& sweep, FloatPoint& targetPoint)
-{
- ASSERT(m_segment);
- ASSERT(m_segment->pathSegType() == PathSegArcAbs || m_segment->pathSegType() == PathSegArcRel);
- SVGPathSegArc* arcTo = static_cast<SVGPathSegArc*>(m_segment.get());
- rx = arcTo->r1();
- ry = arcTo->r2();
- angle = arcTo->angle();
- largeArc = arcTo->largeArcFlag();
- sweep = arcTo->sweepFlag();
- targetPoint = FloatPoint(arcTo->x(), arcTo->y());
- return true;
+ switch (segment.command) {
+ case PathSegMoveToRel:
+ case PathSegMoveToAbs:
+ case PathSegLineToRel:
+ case PathSegLineToAbs:
+ case PathSegCurveToQuadraticSmoothRel:
+ case PathSegCurveToQuadraticSmoothAbs: {
+ SVGPathSegSingleCoordinate* singleCoordinate = static_cast<SVGPathSegSingleCoordinate*>(pathSegment.get());
+ segment.targetPoint = FloatPoint(singleCoordinate->x(), singleCoordinate->y());
+ break;
+ }
+ case PathSegLineToHorizontalRel:
+ case PathSegLineToHorizontalAbs: {
+ SVGPathSegLinetoHorizontal* horizontal = static_cast<SVGPathSegLinetoHorizontal*>(pathSegment.get());
+ segment.targetPoint.setX(horizontal->x());
+ break;
+ }
+ case PathSegLineToVerticalRel:
+ case PathSegLineToVerticalAbs: {
+ SVGPathSegLinetoVertical* vertical = static_cast<SVGPathSegLinetoVertical*>(pathSegment.get());
+ segment.targetPoint.setY(vertical->y());
+ break;
+ }
+ case PathSegClosePath:
+ break;
+ case PathSegCurveToCubicRel:
+ case PathSegCurveToCubicAbs: {
+ SVGPathSegCurvetoCubic* cubic = static_cast<SVGPathSegCurvetoCubic*>(pathSegment.get());
+ segment.point1 = FloatPoint(cubic->x1(), cubic->y1());
+ segment.point2 = FloatPoint(cubic->x2(), cubic->y2());
+ segment.targetPoint = FloatPoint(cubic->x(), cubic->y());
+ break;
+ }
+ case PathSegCurveToCubicSmoothRel:
+ case PathSegCurveToCubicSmoothAbs: {
+ SVGPathSegCurvetoCubicSmooth* cubicSmooth = static_cast<SVGPathSegCurvetoCubicSmooth*>(pathSegment.get());
+ segment.point2 = FloatPoint(cubicSmooth->x2(), cubicSmooth->y2());
+ segment.targetPoint = FloatPoint(cubicSmooth->x(), cubicSmooth->y());
+ break;
+ }
+ case PathSegCurveToQuadraticRel:
+ case PathSegCurveToQuadraticAbs: {
+ SVGPathSegCurvetoQuadratic* quadratic = static_cast<SVGPathSegCurvetoQuadratic*>(pathSegment.get());
+ segment.point1 = FloatPoint(quadratic->x1(), quadratic->y1());
+ segment.targetPoint = FloatPoint(quadratic->x(), quadratic->y());
+ break;
+ }
+ case PathSegArcRel:
+ case PathSegArcAbs: {
+ SVGPathSegArc* arcTo = static_cast<SVGPathSegArc*>(pathSegment.get());
+ segment.point1 = FloatPoint(arcTo->r1(), arcTo->r2());
+ segment.point2.setX(arcTo->angle());
+ segment.arcLarge = arcTo->largeArcFlag();
+ segment.arcSweep = arcTo->sweepFlag();
+ segment.targetPoint = FloatPoint(arcTo->x(), arcTo->y());
+ break;
+ }
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ return segment;
}
}
« no previous file with comments | « Source/core/svg/SVGPathSegListSource.h ('k') | Source/core/svg/SVGPathSource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698