12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /**
- * 矩形
- * @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;
|