package org.andengine.extension.svg.util; import org.andengine.extension.svg.adt.SVGPaint; import org.andengine.extension.svg.adt.SVGProperties; import org.andengine.extension.svg.util.SVGNumberParser.SVGNumberParserFloatResult; import org.andengine.extension.svg.util.constants.ISVGConstants; import android.graphics.Canvas; import android.graphics.Path; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 19:23:07 - 24.05.2011 */ public class SVGPolylineParser implements ISVGConstants { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== public static void parse(final SVGProperties pSVGProperties, final Canvas pCanvas, final SVGPaint pSVGPaint) { final SVGNumberParserFloatResult svgNumberParserFloatResult = SVGNumberParser.parseFloats(pSVGProperties.getStringAttribute(ATTRIBUTE_POINTS)); if (svgNumberParserFloatResult != null) { final float[] points = svgNumberParserFloatResult.getNumbers(); if (points.length >= 2) { final Path path = SVGPolylineParser.parse(points); final boolean fill = pSVGPaint.setFill(pSVGProperties); if (fill) { pCanvas.drawPath(path, pSVGPaint.getPaint()); } final boolean stroke = pSVGPaint.setStroke(pSVGProperties); if (stroke) { pCanvas.drawPath(path, pSVGPaint.getPaint()); } if(fill || stroke) { pSVGPaint.ensureComputedBoundsInclude(path); } } } } static Path parse(final float[] pPoints) { final Path path = new Path(); path.moveTo(pPoints[0], pPoints[1]); for (int i = 2; i < pPoints.length; i += 2) { final float x = pPoints[i]; final float y = pPoints[i + 1]; path.lineTo(x, y); } return path; } // =========================================================== // Inner and Anonymous Classes // =========================================================== }