/**
|
* 矩形
|
* @module zrender/graphic/shape/Rect
|
*/
|
|
import Path, { PathProps } from '../Path';
|
import * as roundRectHelper from '../helper/roundRect';
|
import {subPixelOptimizeRect} from '../helper/subPixelOptimize';
|
|
export class RectShape {
|
// 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4
|
// r缩写为1 相当于 [1, 1, 1, 1]
|
// r缩写为[1] 相当于 [1, 1, 1, 1]
|
// r缩写为[1, 2] 相当于 [1, 2, 1, 2]
|
// r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]
|
r?: number | number[]
|
|
x = 0
|
y = 0
|
width = 0
|
height = 0
|
}
|
|
export interface RectProps extends PathProps {
|
shape?: Partial<RectShape>
|
}
|
// Avoid create repeatly.
|
const subPixelOptimizeOutputShape = {};
|
|
class Rect extends Path<RectProps> {
|
|
shape: RectShape
|
|
constructor(opts?: RectProps) {
|
super(opts);
|
}
|
|
getDefaultShape() {
|
return new RectShape();
|
}
|
|
buildPath(ctx: CanvasRenderingContext2D, shape: RectShape) {
|
let x: number;
|
let y: number;
|
let width: number;
|
let height: number;
|
|
if (this.subPixelOptimize) {
|
const optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);
|
x = optimizedShape.x;
|
y = optimizedShape.y;
|
width = optimizedShape.width;
|
height = optimizedShape.height;
|
optimizedShape.r = shape.r;
|
shape = optimizedShape;
|
}
|
else {
|
x = shape.x;
|
y = shape.y;
|
width = shape.width;
|
height = shape.height;
|
}
|
|
if (!shape.r) {
|
ctx.rect(x, y, width, height);
|
}
|
else {
|
roundRectHelper.buildPath(ctx, shape);
|
}
|
}
|
|
isZeroArea() {
|
return !this.shape.width || !this.shape.height;
|
}
|
}
|
|
Rect.prototype.type = 'rect';
|
|
export default Rect;
|