128 lines
3.0 KiB
JavaScript
128 lines
3.0 KiB
JavaScript
/**
|
|
* Copyright (c) 2006-2015, JGraph Ltd
|
|
* Copyright (c) 2006-2015, Gaudenz Alder
|
|
*/
|
|
/**
|
|
* Class: mxRectangleShape
|
|
*
|
|
* Extends <mxShape> to implement a rectangle shape.
|
|
* This shape is registered under <mxConstants.SHAPE_RECTANGLE>
|
|
* in <mxCellRenderer>.
|
|
*
|
|
* Constructor: mxRectangleShape
|
|
*
|
|
* Constructs a new rectangle shape.
|
|
*
|
|
* Parameters:
|
|
*
|
|
* bounds - <mxRectangle> that defines the bounds. This is stored in
|
|
* <mxShape.bounds>.
|
|
* fill - String that defines the fill color. This is stored in <fill>.
|
|
* stroke - String that defines the stroke color. This is stored in <stroke>.
|
|
* strokewidth - Optional integer that defines the stroke width. Default is
|
|
* 1. This is stored in <strokewidth>.
|
|
*/
|
|
function mxRectangleShape(bounds, fill, stroke, strokewidth)
|
|
{
|
|
mxShape.call(this);
|
|
this.bounds = bounds;
|
|
this.fill = fill;
|
|
this.stroke = stroke;
|
|
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
|
|
};
|
|
|
|
/**
|
|
* Extends mxShape.
|
|
*/
|
|
mxUtils.extend(mxRectangleShape, mxShape);
|
|
|
|
/**
|
|
* Function: isHtmlAllowed
|
|
*
|
|
* Returns true for non-rounded, non-rotated shapes with no glass gradient.
|
|
*/
|
|
mxRectangleShape.prototype.isHtmlAllowed = function()
|
|
{
|
|
var events = true;
|
|
|
|
if (this.style != null)
|
|
{
|
|
events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
|
|
}
|
|
|
|
return !this.isRounded && !this.glass && this.rotation == 0 && (events ||
|
|
(this.fill != null && this.fill != mxConstants.NONE));
|
|
};
|
|
|
|
/**
|
|
* Function: paintBackground
|
|
*
|
|
* Generic background painting implementation.
|
|
*/
|
|
mxRectangleShape.prototype.paintBackground = function(c, x, y, w, h)
|
|
{
|
|
var events = true;
|
|
|
|
if (this.style != null)
|
|
{
|
|
events = mxUtils.getValue(this.style, mxConstants.STYLE_POINTER_EVENTS, '1') == '1';
|
|
}
|
|
|
|
if (events || (this.fill != null && this.fill != mxConstants.NONE) ||
|
|
(this.stroke != null && this.stroke != mxConstants.NONE))
|
|
{
|
|
if (!events && (this.fill == null || this.fill == mxConstants.NONE))
|
|
{
|
|
c.pointerEvents = false;
|
|
}
|
|
|
|
if (this.isRounded)
|
|
{
|
|
var r = 0;
|
|
|
|
if (mxUtils.getValue(this.style, mxConstants.STYLE_ABSOLUTE_ARCSIZE, 0) == '1')
|
|
{
|
|
r = Math.min(w / 2, Math.min(h / 2, mxUtils.getValue(this.style,
|
|
mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2));
|
|
}
|
|
else
|
|
{
|
|
var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE,
|
|
mxConstants.RECTANGLE_ROUNDING_FACTOR * 100) / 100;
|
|
r = Math.min(w * f, h * f);
|
|
}
|
|
|
|
c.roundrect(x, y, w, h, r, r);
|
|
}
|
|
else
|
|
{
|
|
c.rect(x, y, w, h);
|
|
}
|
|
|
|
c.fillAndStroke();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Function: isRoundable
|
|
*
|
|
* Adds roundable support.
|
|
*/
|
|
mxRectangleShape.prototype.isRoundable = function(c, x, y, w, h)
|
|
{
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Function: paintForeground
|
|
*
|
|
* Generic background painting implementation.
|
|
*/
|
|
mxRectangleShape.prototype.paintForeground = function(c, x, y, w, h)
|
|
{
|
|
if (this.glass && !this.outline && this.fill != null && this.fill != mxConstants.NONE)
|
|
{
|
|
this.paintGlassEffect(c, x, y, w, h, this.getArcSize(w + this.strokewidth, h + this.strokewidth));
|
|
}
|
|
};
|