import Vector3D from "openfl/geom/Vector3D";
import Rectangle from "openfl/geom/Rectangle";
import Point from "openfl/geom/Point";
import Matrix3D from "openfl/geom/Matrix3D";
import Matrix from "openfl/geom/Matrix";
import Vector from "openfl/Vector";
declare namespace starling.utils {
	/**
	 *  A utility class containing methods related to the Rectangle class. 
	 */
	export class RectangleUtil {
		/**
		 *  Calculates the intersection between two Rectangles. If the rectangles do not intersect,
		 *      *  this method returns an empty Rectangle object with its properties set to 0. 
		 */
		static intersect(rect1: Rectangle, rect2: Rectangle, out?: Rectangle): Rectangle;
		/**
		 *  Calculates a rectangle with the same aspect ratio as the given 'rectangle',
		 *      *  centered within 'into'.  
		 *      * 
		 *      *  <p>This method is useful for calculating the optimal viewPort for a certain display 
		 *      *  size. You can use different scale modes to specify how the result should be calculated;
		 *      *  furthermore, you can avoid pixel alignment errors by only allowing whole-number  
		 *      *  multipliers/divisors (e.g. 3, 2, 1, 1/2, 1/3).</p>
		 *      *  
		 *      *  @see starling.utils.ScaleMode
		 *      
		 */
		static fit(rectangle: Rectangle, into: Rectangle, scaleMode?: string, pixelPerfect?: boolean, out?: Rectangle): Rectangle;
		/**
		 *  If the rectangle contains negative values for width or height, all coordinates
		 *      *  are adjusted so that the rectangle describes the same region with positive values. 
		 */
		static normalize(rect: Rectangle): void;
		/**
		 *  Extends the rectangle in all four directions. 
		 */
		static extend(rect: Rectangle, left?: number, right?: number, top?: number, bottom?: number): void;
		/**
		 *  Extends the rectangle in all four directions so that it is exactly on pixel bounds. 
		 */
		static extendToWholePixels(rect: Rectangle, scaleFactor?: number): void;
		/**
		 *  Calculates the bounds of a rectangle after transforming it by a matrix.
		 *      *  If you pass an <code>out</code>-rectangle, the result will be stored in this rectangle
		 *      *  instead of creating a new object. 
		 */
		static getBounds(rectangle: Rectangle, matrix: Matrix, out?: Rectangle): Rectangle;
		/**
		 *  Calculates the bounds of a rectangle projected into the XY-plane of a certain 3D space
		 *      *  as they appear from the given camera position. Note that 'camPos' is expected in the
		 *      *  target coordinate system (the same that the XY-plane lies in).
		 *      *
		 *      *  <p>If you pass an 'out' Rectangle, the result will be stored in this rectangle
		 *      *  instead of creating a new object.</p> 
		 */
		static getBoundsProjected(rectangle: Rectangle, matrix: Matrix3D, camPos: Vector3D, out?: Rectangle): Rectangle;
		/**
		 *  Returns a vector containing the positions of the four edges of the given rectangle. 
		 */
		static getPositions(rectangle: Rectangle, out?: Vector<Point>): Vector<Point>;
		/**
		 *  Compares all properties of the given rectangle, returning true only if
		 *      *  they are equal (with the given accuracy 'e'). 
		 */
		static compare(r1: Rectangle, r2: Rectangle, e?: number): boolean;
	}
}
export default starling.utils.RectangleUtil;