openfl
Version:
A fast, productive library for 2D cross-platform development.
371 lines (355 loc) • 10.5 kB
JavaScript
// Class: openfl.geom.Rectangle
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function lime_math_Rectangle() {return require("./../../lime/math/Rectangle");}
function openfl_geom_Point() {return require("./../../openfl/geom/Point");}
function lime_utils_ObjectPool() {return require("./../../lime/utils/ObjectPool");}
// Constructor
var Rectangle = function(x,y,width,height) {
if(height == null) {
height = 0;
}
if(width == null) {
width = 0;
}
if(y == null) {
y = 0;
}
if(x == null) {
x = 0;
}
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
// Meta
Rectangle.__name__ = "openfl.geom.Rectangle";
Rectangle.__isInterface__ = false;
Rectangle.prototype = {
clone: function() {
return new Rectangle(this.x,this.y,this.width,this.height);
},
contains: function(x,y) {
if(x >= this.x && y >= this.y && x < this.get_right()) {
return y < this.get_bottom();
} else {
return false;
}
},
containsPoint: function(point) {
return this.contains(point.x,point.y);
},
containsRect: function(rect) {
if(rect.width <= 0 || rect.height <= 0) {
if(rect.x > this.x && rect.y > this.y && rect.get_right() < this.get_right()) {
return rect.get_bottom() < this.get_bottom();
} else {
return false;
}
} else if(rect.x >= this.x && rect.y >= this.y && rect.get_right() <= this.get_right()) {
return rect.get_bottom() <= this.get_bottom();
} else {
return false;
}
},
copyFrom: function(sourceRect) {
this.x = sourceRect.x;
this.y = sourceRect.y;
this.width = sourceRect.width;
this.height = sourceRect.height;
},
equals: function(toCompare) {
if(toCompare == this) {
return true;
} else if(toCompare != null && this.x == toCompare.x && this.y == toCompare.y && this.width == toCompare.width) {
return this.height == toCompare.height;
} else {
return false;
}
},
inflate: function(dx,dy) {
this.x -= dx;
this.width += dx * 2;
this.y -= dy;
this.height += dy * 2;
},
inflatePoint: function(point) {
this.inflate(point.x,point.y);
},
intersection: function(toIntersect) {
var x0 = this.x < toIntersect.x ? toIntersect.x : this.x;
var x1 = this.get_right() > toIntersect.get_right() ? toIntersect.get_right() : this.get_right();
if(x1 <= x0) {
return new Rectangle();
}
var y0 = this.y < toIntersect.y ? toIntersect.y : this.y;
var y1 = this.get_bottom() > toIntersect.get_bottom() ? toIntersect.get_bottom() : this.get_bottom();
if(y1 <= y0) {
return new Rectangle();
}
return new Rectangle(x0,y0,x1 - x0,y1 - y0);
},
intersectionToOutput: function(toIntersect,output) {
if(output == null) {
output = new Rectangle();
}
var x0 = this.x < toIntersect.x ? toIntersect.x : this.x;
var x1 = this.get_right() > toIntersect.get_right() ? toIntersect.get_right() : this.get_right();
if(x1 <= x0) {
output.setTo(0.0,0.0,0.0,0.0);
return output;
}
var y0 = this.y < toIntersect.y ? toIntersect.y : this.y;
var y1 = this.get_bottom() > toIntersect.get_bottom() ? toIntersect.get_bottom() : this.get_bottom();
if(y1 <= y0) {
output.setTo(0.0,0.0,0.0,0.0);
return output;
}
output.setTo(x0,y0,x1 - x0,y1 - y0);
return output;
},
intersects: function(toIntersect) {
var x0 = this.x < toIntersect.x ? toIntersect.x : this.x;
var x1 = this.get_right() > toIntersect.get_right() ? toIntersect.get_right() : this.get_right();
if(x1 <= x0) {
return false;
}
var y0 = this.y < toIntersect.y ? toIntersect.y : this.y;
var y1 = this.get_bottom() > toIntersect.get_bottom() ? toIntersect.get_bottom() : this.get_bottom();
return y1 > y0;
},
isEmpty: function() {
if(!(this.width <= 0)) {
return this.height <= 0;
} else {
return true;
}
},
offset: function(dx,dy) {
this.x += dx;
this.y += dy;
},
offsetPoint: function(point) {
this.x += point.x;
this.y += point.y;
},
setEmpty: function() {
this.x = this.y = this.width = this.height = 0;
},
setTo: function(xa,ya,widtha,heighta) {
this.x = xa;
this.y = ya;
this.width = widtha;
this.height = heighta;
},
toString: function() {
return "(x=" + this.x + ", y=" + this.y + ", width=" + this.width + ", height=" + this.height + ")";
},
union: function(toUnion) {
if(this.width == 0 || this.height == 0) {
return toUnion.clone();
} else if(toUnion.width == 0 || toUnion.height == 0) {
return this.clone();
}
var x0 = this.x > toUnion.x ? toUnion.x : this.x;
var x1 = this.get_right() < toUnion.get_right() ? toUnion.get_right() : this.get_right();
var y0 = this.y > toUnion.y ? toUnion.y : this.y;
var y1 = this.get_bottom() < toUnion.get_bottom() ? toUnion.get_bottom() : this.get_bottom();
return new Rectangle(x0,y0,x1 - x0,y1 - y0);
},
unionToOutput: function(toUnion,output) {
if(output == null) {
output = new Rectangle();
}
if(this.width == 0 || this.height == 0) {
output.setTo(toUnion.x,toUnion.y,toUnion.width,toUnion.height);
return output;
} else if(toUnion.width == 0 || toUnion.height == 0) {
output.setTo(this.x,this.y,this.width,this.height);
return output;
}
var x0 = this.x > toUnion.x ? toUnion.x : this.x;
var x1 = this.get_right() < toUnion.get_right() ? toUnion.get_right() : this.get_right();
var y0 = this.y > toUnion.y ? toUnion.y : this.y;
var y1 = this.get_bottom() < toUnion.get_bottom() ? toUnion.get_bottom() : this.get_bottom();
output.setTo(x0,y0,x1 - x0,y1 - y0);
return output;
},
__contract: function(x,y,width,height) {
if(this.width == 0 && this.height == 0) {
return;
}
var offsetX = 0.0;
var offsetY = 0.0;
var offsetRight = 0.0;
var offsetBottom = 0.0;
if(this.x < x) {
offsetX = x - this.x;
}
if(this.y < y) {
offsetY = y - this.y;
}
if(this.get_right() > x + width) {
offsetRight = x + width - this.get_right();
}
if(this.get_bottom() > y + height) {
offsetBottom = y + height - this.get_bottom();
}
this.x += offsetX;
this.y += offsetY;
this.width += offsetRight - offsetX;
this.height += offsetBottom - offsetY;
},
__expand: function(x,y,width,height) {
if(this.width == 0 && this.height == 0) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
return;
}
var cacheRight = this.get_right();
var cacheBottom = this.get_bottom();
if(this.x > x) {
this.x = x;
this.width = cacheRight - x;
}
if(this.y > y) {
this.y = y;
this.height = cacheBottom - y;
}
if(cacheRight < x + width) {
this.width = x + width - this.x;
}
if(cacheBottom < y + height) {
this.height = y + height - this.y;
}
},
__toLimeRectangle: function() {
if(Rectangle.__limeRectangle == null) {
Rectangle.__limeRectangle = new (lime_math_Rectangle().default)();
}
Rectangle.__limeRectangle.setTo(this.x,this.y,this.width,this.height);
return Rectangle.__limeRectangle;
},
__transform: function(rect,m) {
var tx0 = m.a * this.x + m.c * this.y;
var tx1 = tx0;
var ty0 = m.b * this.x + m.d * this.y;
var ty1 = ty0;
var tx = m.a * (this.x + this.width) + m.c * this.y;
var ty = m.b * (this.x + this.width) + m.d * this.y;
if(tx < tx0) {
tx0 = tx;
}
if(ty < ty0) {
ty0 = ty;
}
if(tx > tx1) {
tx1 = tx;
}
if(ty > ty1) {
ty1 = ty;
}
tx = m.a * (this.x + this.width) + m.c * (this.y + this.height);
ty = m.b * (this.x + this.width) + m.d * (this.y + this.height);
if(tx < tx0) {
tx0 = tx;
}
if(ty < ty0) {
ty0 = ty;
}
if(tx > tx1) {
tx1 = tx;
}
if(ty > ty1) {
ty1 = ty;
}
tx = m.a * this.x + m.c * (this.y + this.height);
ty = m.b * this.x + m.d * (this.y + this.height);
if(tx < tx0) {
tx0 = tx;
}
if(ty < ty0) {
ty0 = ty;
}
if(tx > tx1) {
tx1 = tx;
}
if(ty > ty1) {
ty1 = ty;
}
rect.setTo(tx0 + m.tx,ty0 + m.ty,tx1 - tx0,ty1 - ty0);
},
get_bottom: function() {
return this.y + this.height;
},
set_bottom: function(b) {
this.height = b - this.y;
return b;
},
get_bottomRight: function() {
return new (openfl_geom_Point().default)(this.x + this.width,this.y + this.height);
},
set_bottomRight: function(p) {
this.width = p.x - this.x;
this.height = p.y - this.y;
return p.clone();
},
get_left: function() {
return this.x;
},
set_left: function(l) {
this.width -= l - this.x;
this.x = l;
return l;
},
get_right: function() {
return this.x + this.width;
},
set_right: function(r) {
this.width = r - this.x;
return r;
},
get_size: function() {
return new (openfl_geom_Point().default)(this.width,this.height);
},
set_size: function(p) {
this.width = p.x;
this.height = p.y;
return p.clone();
},
get_top: function() {
return this.y;
},
set_top: function(t) {
this.height -= t - this.y;
this.y = t;
return t;
},
get_topLeft: function() {
return new (openfl_geom_Point().default)(this.x,this.y);
},
set_topLeft: function(p) {
this.x = p.x;
this.y = p.y;
return p.clone();
}
};
Rectangle.prototype.__class__ = Rectangle.prototype.constructor = $hxClasses["openfl.geom.Rectangle"] = Rectangle;
// Init
Object.defineProperties(Rectangle.prototype,{ bottom : { get : function () { return this.get_bottom (); }, set : function (v) { return this.set_bottom (v); }}, bottomRight : { get : function () { return this.get_bottomRight (); }, set : function (v) { return this.set_bottomRight (v); }}, left : { get : function () { return this.get_left (); }, set : function (v) { return this.set_left (v); }}, right : { get : function () { return this.get_right (); }, set : function (v) { return this.set_right (v); }}, size : { get : function () { return this.get_size (); }, set : function (v) { return this.set_size (v); }}, top : { get : function () { return this.get_top (); }, set : function (v) { return this.set_top (v); }}, topLeft : { get : function () { return this.get_topLeft (); }, set : function (v) { return this.set_topLeft (v); }}});
// Statics
Rectangle.__pool = new (lime_utils_ObjectPool().default)(function() {
return new Rectangle();
},function(r) {
r.setTo(0,0,0,0);
})
// Export
exports.default = Rectangle;