editor-render-v2
Version:
编辑器渲染器
99 lines (98 loc) • 2.46 kB
TypeScript
import Handler from './Handler';
import { fabric } from 'fabric';
interface IRenderObjectBase {
id?: string;
type: string;
left: number;
top: number;
fill?: string;
stroke?: string;
}
/** @ignore */
export interface IRenderRect extends IRenderObjectBase {
type: 'rect';
width: number;
height: number;
}
/** @ignore */
export interface IRenderText extends IRenderObjectBase {
type: 'text';
text: string;
fontSize?: number;
fontFamily?: string;
}
/** @ignore */
export type IRenderLine = Omit<IRenderObjectBase & {
type: 'line';
lineWidth: number;
x1: number;
y1: number;
x2: number;
y2: number;
}, 'left' | 'top'>;
/** @ignore */
export type IRenderObject = IRenderRect | IRenderText | IRenderLine;
/**
* 分层渲染器
*/
export default class RenderLayerHandler {
/** @ignore */
handler: Handler;
private layers;
/** @ignore */
constructor(handler: Handler);
/** @ignore */
dispose(): void;
/**
* 擦除所有渲染结果,但不清空数据
* */
clear(event: fabric.IEvent): void;
/**
* 渲染所有图层的元素
* */
render(event: fabric.IEvent): void;
/**
* 新建图层
* @param layerId 图层id
* */
createLayer(id: string): void;
/**
* 设置图层内的元素, 完全覆盖旧内容
* @param layerId 要操作的图层id
* @param objects 要添加的元素
* */
setObjects(layerId: string, objects: IRenderObject[]): this;
/**
* 返回某个图层下所有object
* @param layerId 要操作的图层id
* */
getObjects(layerId: string): Readonly<IRenderObject[]>;
/**
* 在图层内添加元素
* @param layerId 要操作的图层id
* @param ...objects 要添加的元素
* */
addObject(layerId: string, ...objects: IRenderObject[]): this;
/**
* 在图层内移除元素
* @param layerId 要操作的图层id
* @param removed [option] 要移除的object,如不传则移除该图层所有元素
* */
removeObject(layerId: string, removed?: IRenderObject): this;
/**
* 返回所有元素
* */
getAllObjects(): IRenderObject[];
/**
* 通过id查找元素
* @param id id
* @returns 查找到的元素
*/
private getLayer;
/**
* 遍历元素
* @param fn 遍历时执行的函数
*/
private eachLayer;
}
export {};