import { Point } from './Point'; /** * A Rectangle object is an area defined by its position, as indicated by its * top-left corner point(x, y) and by its width and its height. * * *
The x, y, width, and
* height properties of the Rectangle export class are independent of
* each other; changing the value of one property has no effect on the others.
* However, the right and bottom properties are
* integrally related to those four properties. For example, if you change the
* value of the right property, the value of the
* width property changes; if you change the bottom
* property, the value of the height property changes.
The following methods and properties use Rectangle objects:
* *applyFilter(), colorTransform(),
* copyChannel(), copyPixels(), draw(),
* fillRect(), generateFilterRect(),
* getColorBoundsRect(), getPixels(),
* merge(), paletteMap(),
* pixelDisolve(), setPixels(), and
* threshold() methods, and the rect property of the
* BitmapData classgetBounds() and getRect() methods, and
* the scrollRect and scale9Grid properties of the
* DisplayObject classgetCharBoundaries() method of the TextField
* classpixelBounds property of the Transform classbounds parameter for the startDrag()
* method of the Sprite classprintArea parameter of the addPage()
* method of the PrintJob classYou can use the new Rectangle() constructor to create a
* Rectangle object.
Note: The Rectangle export class does not define a rectangular Shape
* display object. To draw a rectangular Shape object onscreen, use the
* drawRect() method of the Graphics class.
height
* value of a Rectangle object has no effect on the x,
* y, and width properties.
*/
public get height(): number {
return this._rawData[3];
}
public set height(value: number) {
this._rawData[3] = value;
}
/**
* The width of the rectangle, in pixels. Changing the width
* value of a Rectangle object has no effect on the x,
* y, and height properties.
*/
public get width(): number {
return this._rawData[2];
}
public set width(value: number) {
this._rawData[2] = value;
}
/**
* The x coordinate of the top-left corner of the rectangle. Changing
* the value of the x property of a Rectangle object has no
* effect on the y, width, and height
* properties.
*
* The value of the x property is equal to the value of the
* left property.
y property of a Rectangle object has no
* effect on the x, width, and height
* properties.
*
* The value of the y property is equal to the value of the
* top property.
y and height properties.
*/
public get bottom(): number {
return this._rawData[1] + this._rawData[3];
}
public set bottom(val: number) {
this._rawData[3] = val - this._rawData[1];
}
/**
* The location of the Rectangle object's bottom-right corner, determined by
* the values of the right and bottom properties.
*/
public get bottomRight(): Point {
if (this._bottomRight == null)
this._bottomRight = new Point();
this._bottomRight._rawData[0] = this._rawData[0] + this._rawData[2];
this._bottomRight._rawData[1] = this._rawData[1] + this._rawData[3];
return this._bottomRight;
}
/**
* The x coordinate of the top-left corner of the rectangle. Changing
* the left property of a Rectangle object has no effect on the
* y and height properties. However it does affect
* the width property, whereas changing the x value
* does not affect the width property.
*
* The value of the left property is equal to the value of
* the x property.
x and width properties.
*/
public get right(): number {
return this._rawData[0] + this._rawData[2];
}
public set right(val: number) {
this._rawData[2] = val - this._rawData[0];
}
/**
* The size of the Rectangle object, expressed as a Point object with the
* values of the width and height properties.
*/
public get size(): Point {
if (this._size == null)
this._size = new Point();
this._size._rawData[0] = this._rawData[2];
this._size._rawData[1] = this._rawData[3];
return this._size;
}
/**
* The y coordinate of the top-left corner of the rectangle. Changing
* the top property of a Rectangle object has no effect on the
* x and width properties. However it does affect
* the height property, whereas changing the y
* value does not affect the height property.
*
* The value of the top property is equal to the value of the
* y property.
x and y parameters and with the specified
* width and height parameters. If you call this
* public without parameters, a rectangle with x,
* y, width, and height properties set
* to 0 is created.
*
* @param x The x coordinate of the top-left corner of the
* rectangle.
* @param y The y coordinate of the top-left corner of the
* rectangle.
* @param width The width of the rectangle, in pixels.
* @param height The height of the rectangle, in pixels.
*/
constructor(x: number = 0, y: number = 0, width: number = 0, height: number = 0) {
const raw: Float32Array = this._rawData;
raw[0] = x;
raw[1] = y;
raw[2] = width;
raw[3] = height;
}
/**
* Returns a new Rectangle object with the same values for the
* x, y, width, and
* height properties as the original Rectangle object.
*
* @return A new Rectangle object with the same values for the
* x, y, width, and
* height properties as the original Rectangle object.
*/
public clone(): Rectangle {
const raw: Float32Array = this._rawData;
return new Rectangle(raw[0], raw[1], raw[2], raw[3]);
}
/**
* Determines whether the specified point is contained within the rectangular
* region defined by this Rectangle object.
*
* @param x The x coordinate(horizontal position) of the point.
* @param y The y coordinate(vertical position) of the point.
* @return A value of true if the Rectangle object contains the
* specified point; otherwise false.
*/
public contains(x: number, y: number): boolean {
const raw: Float32Array = this._rawData;
return (raw[0] <= x &&
raw[0] + raw[2] >= x &&
raw[1] <= y &&
raw[1] + raw[3] >= y);
}
/**
* Determines whether the specified point is contained within the rectangular
* region defined by this Rectangle object. This method is similar to the
* Rectangle.contains() method, except that it takes a Point
* object as a parameter.
*
* @param point The point, as represented by its x and y
* coordinates.
* @return A value of true if the Rectangle object contains the
* specified point; otherwise false.
*/
public containsPoint(point: Point): boolean {
const raw: Float32Array = this._rawData;
const rawPoint: Float32Array = point._rawData;
return (raw[0] <= rawPoint[0] &&
raw[0] + raw[2] >= rawPoint[0] &&
raw[1] <= rawPoint[1] &&
raw[1] + raw[3] >= rawPoint[1]);
}
/**
* Determines whether the Rectangle object specified by the rect
* parameter is contained within this Rectangle object. A Rectangle object is
* said to contain another if the second Rectangle object falls entirely
* within the boundaries of the first.
*
* @param rect The Rectangle object being checked.
* @return A value of true if the Rectangle object that you
* specify is contained by this Rectangle object; otherwise
* false.
*/
public containsRect(rect: Rectangle): boolean {
const raw: Float32Array = this._rawData;
const rawRect: Float32Array = rect._rawData;
return (raw[0] <= rawRect[0] &&
raw[0] + raw[2] >= rawRect[0] + rawRect[2] &&
raw[1] <= rawRect[1] &&
raw[1] + raw[3] >= rawRect[1] + rawRect[3]);
}
/**
* Copies all of rectangle data from the source Rectangle object into the
* calling Rectangle object.
*
* @param sourceRect The Rectangle object from which to copy the data.
*/
public copyFrom(sourceRect: Rectangle): void {
const raw: Float32Array = this._rawData;
const rawSource: Float32Array = sourceRect._rawData;
raw[0] = rawSource[0];
raw[1] = rawSource[1];
raw[2] = rawSource[2];
raw[3] = rawSource[3];
}
/**
* Determines whether the object specified in the toCompare
* parameter is equal to this Rectangle object. This method compares the
* x, y, width, and
* height properties of an object against the same properties of
* this Rectangle object.
*
* @param toCompare The rectangle to compare to this Rectangle object.
* @return A value of true if the object has exactly the same
* values for the x, y, width,
* and height properties as this Rectangle object;
* otherwise false.
*/
public equals(toCompare: Rectangle): boolean {
const raw: Float32Array = this._rawData;
const rawCompare: Float32Array = toCompare._rawData;
return (raw[0] == rawCompare[0] &&
raw[1] == rawCompare[1] &&
raw[2] == rawCompare[2] &&
raw[3] == rawCompare[3]);
}
/**
* Increases the size of the Rectangle object by the specified amounts, in
* pixels. The center point of the Rectangle object stays the same, and its
* size increases to the left and right by the dx value, and to
* the top and the bottom by the dy value.
*
* @param dx The value to be added to the left and the right of the Rectangle
* object. The following equation is used to calculate the new
* width and position of the rectangle:
* @param dy The value to be added to the top and the bottom of the
* Rectangle. The following equation is used to calculate the new
* height and position of the rectangle:
*/
public inflate(dx: number, dy: number): void {
const raw: Float32Array = this._rawData;
raw[0] -= dx / 2;
raw[1] -= dy / 2;
raw[2] += dx / 2;
raw[3] += dy / 2;
}
/**
* Increases the size of the Rectangle object. This method is similar to the
* Rectangle.inflate() method except it takes a Point object as
* a parameter.
*
* The following two code examples give the same result:
* * @param point Thex property of this Point object is used to
* increase the horizontal dimension of the Rectangle object.
* The y property is used to increase the vertical
* dimension of the Rectangle object.
*/
public inflatePoint(point: Point): void {
const raw: Float32Array = this._rawData;
raw[0] -= point.x / 2;
raw[1] -= point.y / 2;
raw[2] += point.x / 2;
raw[3] += point.y / 2;
}
/**
* If the Rectangle object specified in the toIntersect
* parameter intersects with this Rectangle object, returns the area of
* intersection as a Rectangle object. If the rectangles do not intersect,
* this method returns an empty Rectangle object with its properties set to
* 0.
*
* @param toIntersect The Rectangle object to compare against to see if it
* intersects with this Rectangle object.
* @return A Rectangle object that equals the area of intersection. If the
* rectangles do not intersect, this method returns an empty
* Rectangle object; that is, a rectangle with its x,
* y, width, and height
* properties set to 0.
*/
public intersection(toIntersect: Rectangle): Rectangle {
const raw: Float32Array = this._rawData;
const rawIntersect: Float32Array = toIntersect._rawData;
if (this.intersects(toIntersect)) {
const result: Rectangle = new Rectangle();
const rawResult: Float32Array = result._rawData;
if (raw[0] > rawIntersect[0]) {
rawResult[0] = raw[0];
rawResult[2] = rawIntersect[0] - raw[0] + rawIntersect[2];
if (rawResult[2] > raw[2])
rawResult[2] = raw[2];
} else {
rawResult[0] = rawIntersect[0];
rawResult[2] = raw[0] - rawIntersect[0] + raw[2];
if (rawResult[2] > rawIntersect[2])
rawResult[2] = rawIntersect[2];
}
if (raw[1] > rawIntersect[1]) {
rawResult[1] = raw[1];
rawResult[3] = rawIntersect[1] - raw[1] + rawIntersect[3];
if (rawResult[3] > raw[3])
rawResult[3] = raw[3];
} else {
rawResult[1] = rawIntersect[1];
rawResult[3] = raw[1] - rawIntersect[1] + raw[3];
if (rawResult[3] > rawIntersect[3])
rawResult[3] = rawIntersect[3];
}
return result;
}
return new Rectangle();
}
/**
* Determines whether the object specified in the toIntersect
* parameter intersects with this Rectangle object. This method checks the
* x, y, width, and
* height properties of the specified Rectangle object to see if
* it intersects with this Rectangle object.
*
* @param toIntersect The Rectangle object to compare against this Rectangle
* object.
* @return A value of true if the specified object intersects
* with this Rectangle object; otherwise false.
*/
public intersects(toIntersect: Rectangle): boolean {
const raw: Float32Array = this._rawData;
const rawIntersect: Float32Array = toIntersect._rawData;
return (raw[0] + raw[2] > rawIntersect[0] &&
raw[0] < rawIntersect[0] + rawIntersect[2] &&
raw[1] + raw[3] > rawIntersect[1] &&
raw[1] < rawIntersect[1] + rawIntersect[3]);
}
/**
* Determines whether or not this Rectangle object is empty.
*
* @return A value of true if the Rectangle object's width or
* height is less than or equal to 0; otherwise false.
*/
public isEmpty(): boolean {
const raw: Float32Array = this._rawData;
return (raw[0] == 0 && raw[1] == 0 && raw[2] == 0 && raw[3] == 0);
}
/**
* Adjusts the location of the Rectangle object, as determined by its
* top-left corner, by the specified amounts.
*
* @param dx Moves the x value of the Rectangle object by this amount.
* @param dy Moves the y value of the Rectangle object by this amount.
*/
public offset(dx: number, dy: number): void {
this._rawData[0] += dx;
this._rawData[1] += dy;
}
/**
* Adjusts the location of the Rectangle object using a Point object as a
* parameter. This method is similar to the Rectangle.offset()
* method, except that it takes a Point object as a parameter.
*
* @param point A Point object to use to offset this Rectangle object.
*/
public offsetPoint(point: Point): void {
this._rawData[0] += point.x;
this._rawData[1] += point.y;
}
/**
* Sets all of the Rectangle object's properties to 0. A Rectangle object is
* empty if its width or height is less than or equal to 0.
*
* This method sets the values of the x, y,
* width, and height properties to 0.
x, y,
* width, and height.
*/
public toString(): string {
return '[Rectangle] (x=' + this.x + ', y=' + this.y + ', width=' + this.width + ', height=' + this.height + ')';
}
/**
* Adds two rectangles together to create a new Rectangle object, by filling
* in the horizontal and vertical space between the two rectangles.
*
* Note: The union() method ignores rectangles with
* 0 as the height or width value, such as: var
* rect2:Rectangle = new Rectangle(300,300,50,0);