/******************************************************************************* * Copyright 2012-present Pixate, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ /** * Copyright (c) 2012-2013 Pixate, Inc. All rights reserved. */ package com.pixate.freestyle.cg.shapes; import android.graphics.Path; import android.graphics.Path.Direction; import android.graphics.PointF; import android.graphics.RectF; import com.pixate.freestyle.util.ObjectPool; import com.pixate.freestyle.util.ObjectUtil; /** * PX representation of a ellipse. */ public class PXEllipse extends PXShape implements PXBoundable { private PointF center; private float radiusX; private float radiusY; /** * Constructs an ellipse, given its center point, x-radius and y-radius. */ public PXEllipse(PointF center, float radiusX, float radiusY) { this.center = center; this.radiusX = radiusX; this.radiusY = radiusY; } /** * Constructs an ellipse. */ public PXEllipse() { this.center = new PointF(); } public RectF getBounds() { return new RectF(center.x - radiusX, center.y - radiusY, center.x + radiusX, center.y + radiusY); } public void setBounds(RectF bounds) { radiusX = bounds.centerX(); radiusY = bounds.centerY(); center.x = bounds.left + radiusX; center.y = bounds.top + radiusY; clearPath(); } public void setCenter(PointF center) { if (!ObjectUtil.areEqual(this.center, center)) { this.center = center; clearPath(); } } public void setRadiusX(float radius) { // Use positive absolute values only if (radius < 0) { radius = -radius; } if (this.radiusX != radius) { this.radiusX = radius; clearPath(); } } public void setRadiusY(float radius) { // Use positive absolute values only if (radius < 0) { radius = -radius; } if (this.radiusY != radius) { this.radiusY = radius; clearPath(); } } /* * (non-Javadoc) * @see com.pixate.freestyle.pxengine.cg.PXShape#newPath() */ @Override protected Path newPath() { Path path = ObjectPool.pathPool.checkOut(); RectF rect = new RectF(center.x - radiusX, center.y - radiusY, center.x + radiusX, center.y + radiusY); path.addOval(rect, Direction.CW); return path; } }