76 lines
2.0 KiB
Java
76 lines
2.0 KiB
Java
var Util = require('../util/index');
|
|
|
|
var _require = require('../util/format'),
|
|
parseRadius = _require.parseRadius;
|
|
|
|
var Shape = require('../core/shape');
|
|
|
|
var Rect = function Rect(cfg) {
|
|
Rect.superclass.constructor.call(this, cfg);
|
|
};
|
|
|
|
Rect.ATTRS = {
|
|
x: 0,
|
|
y: 0,
|
|
width: 0,
|
|
height: 0,
|
|
radius: 0,
|
|
lineWidth: 1
|
|
};
|
|
Util.extend(Rect, Shape);
|
|
Util.augment(Rect, {
|
|
canFill: true,
|
|
canStroke: true,
|
|
type: 'rect',
|
|
getDefaultAttrs: function getDefaultAttrs() {
|
|
return {
|
|
lineWidth: 1,
|
|
radius: 0
|
|
};
|
|
},
|
|
calculateBox: function calculateBox() {
|
|
var self = this;
|
|
var attrs = self._attrs;
|
|
var x = attrs.x;
|
|
var y = attrs.y;
|
|
var width = attrs.width;
|
|
var height = attrs.height;
|
|
var lineWidth = this.getHitLineWidth();
|
|
var halfWidth = lineWidth / 2;
|
|
return {
|
|
minX: x - halfWidth,
|
|
minY: y - halfWidth,
|
|
maxX: x + width + halfWidth,
|
|
maxY: y + height + halfWidth
|
|
};
|
|
},
|
|
createPath: function createPath(context) {
|
|
var self = this;
|
|
var attrs = self._attrs;
|
|
var x = attrs.x;
|
|
var y = attrs.y;
|
|
var width = attrs.width;
|
|
var height = attrs.height;
|
|
var radius = attrs.radius;
|
|
context = context || self.get('context');
|
|
context.beginPath();
|
|
|
|
if (radius === 0) {
|
|
// 改成原生的rect方法
|
|
context.rect(x, y, width, height);
|
|
} else {
|
|
var r = parseRadius(radius);
|
|
context.moveTo(x + r.r1, y);
|
|
context.lineTo(x + width - r.r2, y);
|
|
r.r2 !== 0 && context.arc(x + width - r.r2, y + r.r2, r.r2, -Math.PI / 2, 0);
|
|
context.lineTo(x + width, y + height - r.r3);
|
|
r.r3 !== 0 && context.arc(x + width - r.r3, y + height - r.r3, r.r3, 0, Math.PI / 2);
|
|
context.lineTo(x + r.r4, y + height);
|
|
r.r4 !== 0 && context.arc(x + r.r4, y + height - r.r4, r.r4, Math.PI / 2, Math.PI);
|
|
context.lineTo(x, y + r.r1);
|
|
r.r1 !== 0 && context.arc(x + r.r1, y + r.r1, r.r1, Math.PI, Math.PI * 1.5);
|
|
context.closePath();
|
|
}
|
|
}
|
|
});
|
|
module.exports = Rect; |