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.constants.ISVGConstants; import android.graphics.Canvas; import android.graphics.RectF; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 19:27:42 - 25.05.2011 */ public class SVGRectParser 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 RectF pRect) { final float x = pSVGProperties.getFloatAttribute(ATTRIBUTE_X, 0f); final float y = pSVGProperties.getFloatAttribute(ATTRIBUTE_Y, 0f); final float width = pSVGProperties.getFloatAttribute(ATTRIBUTE_WIDTH, 0f); final float height = pSVGProperties.getFloatAttribute(ATTRIBUTE_HEIGHT, 0f); pRect.set(x, y, x + width, y + height); final Float rX = pSVGProperties.getFloatAttribute(ATTRIBUTE_RADIUS_X); final Float rY = pSVGProperties.getFloatAttribute(ATTRIBUTE_RADIUS_Y); final boolean rXSpecified = rX != null && rX >= 0; final boolean rYSpecified = rY != null && rY >= 0; final boolean rounded = rXSpecified || rYSpecified; final float rx; final float ry; if(rXSpecified && rYSpecified) { rx = Math.min(rX, width * 0.5f); ry = Math.min(rY, height * 0.5f); } else if(rXSpecified) { ry = rx = Math.min(rX, width * 0.5f); } else if(rYSpecified) { rx = ry = Math.min(rY, height * 0.5f); } else { rx = 0; ry = 0; } final boolean fill = pSVGPaint.setFill(pSVGProperties); if (fill) { if(rounded) { pCanvas.drawRoundRect(pRect, rx, ry, pSVGPaint.getPaint()); } else { pCanvas.drawRect(pRect, pSVGPaint.getPaint()); } } final boolean stroke = pSVGPaint.setStroke(pSVGProperties); if (stroke) { if(rounded) { pCanvas.drawRoundRect(pRect, rx, ry, pSVGPaint.getPaint()); } else { pCanvas.drawRect(pRect, pSVGPaint.getPaint()); } } if(fill || stroke) { pSVGPaint.ensureComputedBoundsInclude(x, y, width, height); } } // =========================================================== // Inner and Anonymous Classes // =========================================================== }