/** * 矩形 * @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 } // Avoid create repeatly. const subPixelOptimizeOutputShape = {}; class Rect extends Path { 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;