import { ImageLike } from '../core/types';
|
import { SVGVNode } from '../svg/core';
|
|
type ImagePatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'
|
|
export interface PatternObjectBase {
|
id?: number
|
// type is now unused, so make it optional
|
type?: 'pattern'
|
|
x?: number
|
y?: number
|
rotation?: number
|
scaleX?: number
|
scaleY?: number
|
}
|
|
export interface ImagePatternObject extends PatternObjectBase {
|
image: ImageLike | string
|
repeat?: ImagePatternRepeat
|
|
/**
|
* Width and height of image.
|
* `imageWidth` and `imageHeight` are only used in svg-ssr renderer.
|
* Because we can't get the size of image in svg-ssr renderer.
|
* They need to be give explictly.
|
*/
|
imageWidth?: number
|
imageHeight?: number
|
}
|
|
export interface InnerImagePatternObject extends ImagePatternObject {
|
// Cached image. Which is created in the canvas painter.
|
__image?: ImageLike
|
}
|
|
export interface SVGPatternObject extends PatternObjectBase {
|
/**
|
* svg vnode can only be used in svg renderer currently.
|
* svgWidth, svgHeight defines width and height used for pattern.
|
*/
|
svgElement?: SVGVNode
|
svgWidth?: number
|
svgHeight?: number
|
}
|
|
export type PatternObject = ImagePatternObject | SVGPatternObject
|
|
class Pattern {
|
|
type: 'pattern'
|
|
image: ImageLike | string
|
/**
|
* svg element can only be used in svg renderer currently.
|
*
|
* Will be string if using SSR rendering.
|
*/
|
svgElement: SVGElement | string
|
|
repeat: ImagePatternRepeat
|
|
x: number
|
y: number
|
rotation: number
|
scaleX: number
|
scaleY: number
|
|
constructor(image: ImageLike | string, repeat: ImagePatternRepeat) {
|
// Should do nothing more in this constructor. Because gradient can be
|
// declard by `color: {image: ...}`, where this constructor will not be called.
|
this.image = image;
|
this.repeat = repeat;
|
|
this.x = 0;
|
this.y = 0;
|
this.rotation = 0;
|
this.scaleX = 1;
|
this.scaleY = 1;
|
}
|
}
|
|
export default Pattern;
|