From 4975a16efb0ba9005f77e688b30bb7caea699c5a Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:42:53 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/ui/mxgraph/src/js/util/mxRectangle.js | 179 +++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 js/ui/mxgraph/src/js/util/mxRectangle.js diff --git a/js/ui/mxgraph/src/js/util/mxRectangle.js b/js/ui/mxgraph/src/js/util/mxRectangle.js new file mode 100644 index 0000000..b935e5a --- /dev/null +++ b/js/ui/mxgraph/src/js/util/mxRectangle.js @@ -0,0 +1,179 @@ +/** + * Copyright (c) 2006-2015, JGraph Ltd + * Copyright (c) 2006-2015, Gaudenz Alder + */ +/** + * Class: mxRectangle + * + * Extends to implement a 2-dimensional rectangle with double + * precision coordinates. + * + * Constructor: mxRectangle + * + * Constructs a new rectangle for the optional parameters. If no parameters + * are given then the respective default values are used. + */ +function mxRectangle(x, y, width, height) +{ + mxPoint.call(this, x, y); + + this.width = (width != null) ? width : 0; + this.height = (height != null) ? height : 0; +}; + +/** + * Extends mxPoint. + */ +mxRectangle.prototype = new mxPoint(); +mxRectangle.prototype.constructor = mxRectangle; + +/** + * Variable: width + * + * Holds the width of the rectangle. Default is 0. + */ +mxRectangle.prototype.width = null; + +/** + * Variable: height + * + * Holds the height of the rectangle. Default is 0. + */ +mxRectangle.prototype.height = null; + +/** + * Function: setRect + * + * Sets this rectangle to the specified values + */ +mxRectangle.prototype.setRect = function(x, y, w, h) +{ + this.x = x; + this.y = y; + this.width = w; + this.height = h; +}; + +/** + * Function: getCenterX + * + * Returns the x-coordinate of the center point. + */ +mxRectangle.prototype.getCenterX = function () +{ + return this.x + this.width/2; +}; + +/** + * Function: getCenterY + * + * Returns the y-coordinate of the center point. + */ +mxRectangle.prototype.getCenterY = function () +{ + return this.y + this.height/2; +}; + +/** + * Function: add + * + * Adds the given rectangle to this rectangle. + */ +mxRectangle.prototype.add = function(rect) +{ + if (rect != null) + { + var minX = Math.min(this.x, rect.x); + var minY = Math.min(this.y, rect.y); + var maxX = Math.max(this.x + this.width, rect.x + rect.width); + var maxY = Math.max(this.y + this.height, rect.y + rect.height); + + this.x = minX; + this.y = minY; + this.width = maxX - minX; + this.height = maxY - minY; + } +}; + +/** + * Function: intersect + * + * Changes this rectangle to where it overlaps with the given rectangle. + */ +mxRectangle.prototype.intersect = function(rect) +{ + if (rect != null) + { + var r1 = this.x + this.width; + var r2 = rect.x + rect.width; + + var b1 = this.y + this.height; + var b2 = rect.y + rect.height; + + this.x = Math.max(this.x, rect.x); + this.y = Math.max(this.y, rect.y); + this.width = Math.min(r1, r2) - this.x; + this.height = Math.min(b1, b2) - this.y; + } +}; + +/** + * Function: grow + * + * Grows the rectangle by the given amount, that is, this method subtracts + * the given amount from the x- and y-coordinates and adds twice the amount + * to the width and height. + */ +mxRectangle.prototype.grow = function(amount) +{ + this.x -= amount; + this.y -= amount; + this.width += 2 * amount; + this.height += 2 * amount; +}; + +/** + * Function: getPoint + * + * Returns the top, left corner as a new . + */ +mxRectangle.prototype.getPoint = function() +{ + return new mxPoint(this.x, this.y); +}; + +/** + * Function: rotate90 + * + * Rotates this rectangle by 90 degree around its center point. + */ +mxRectangle.prototype.rotate90 = function() +{ + var t = (this.width - this.height) / 2; + this.x += t; + this.y -= t; + var tmp = this.width; + this.width = this.height; + this.height = tmp; +}; + +/** + * Function: equals + * + * Returns true if the given object equals this rectangle. + */ +mxRectangle.prototype.equals = function(obj) +{ + return obj != null && obj.x == this.x && obj.y == this.y && + obj.width == this.width && obj.height == this.height; +}; + +/** + * Function: fromRectangle + * + * Returns a new which is a copy of the given rectangle. + */ +mxRectangle.fromRectangle = function(rect) +{ + return new mxRectangle(rect.x, rect.y, rect.width, rect.height); +};