import ExtednPlugin from '@/core/ExtednPlugin';
// 注册插件
class rulerPlugin extends ExtednPlugin {
// 插件名称
name = 'ruler'
// 插件默认配置
defaultOption = {
color: 'red',
size: 0.2
}
// 内置事件,可通知其他插件
events = {
'createRulerStart': 'CREATE_RULER_START'
}
// API 暴露给外部使用
apis = ['enableRuler', 'disableRuler']
// 快捷键
hotkeys = ['crtl+h']
// 默认实现 ExtednPlugin
// constructor(canvas, event, option = {}){
// 自动将外部传入的属性合并
// this.defaultOption = {defaultOption..., option}
// 调用初始化方法
// this.init()
// 挂载上下文
// this.ctx = { canvas, event, editor }
//}
// 初始化逻辑
init(){
// 获取属性
const { color } = this.defaultOption
// 通过上下文获取 canvas和event对象
const { canvas, editor } = this
canvas.on('', () => {
// 发布事件
this.editor.emit(this.events.createRulerStart)
// 调用其他插件方法
editor.getPlugin('otherPluginName')?.otherApiName()
})
}
// 销毁逻辑
destroy(){
canvas.off('')
}
// 右键菜单的扩展 支持子菜单
contextMenu() {
// 判断条件 返回菜单与事件,可
if(true){
return [{
text: '菜单',
command: this._commandHandler
},
{
text: '父菜单',
child:[{
text: '子菜单',
command: this._commandHandler
}]
}]
}
}
// 快捷键功能函数
_commandHandler(){
console.log('快捷键事件')
}
// 生命周期-保存前 隐藏标尺
hookSaveBefore(){
this._hideGuideline()
}
// 生命周期-保存后 展示标尺
hookSaveAfter(){
this._showGuideline()
}
// 快捷键回调
hotkeyEvent(eventName, event){
// 快捷键 显示隐藏标尺
if(event = 'crtl+h'){
this.status = !this.status
this.status ? this._showGuideline() : this._hideGuideline
}
}
// 暴漏给外部的API 激活标尺
enable(){
}
// 暴漏给外部的API 关闭标尺
disable(){
}
// 私有方法 隐藏标尺
_hideGuideline(){}
// 私有方法 显示标尺
_showGuideline(){}
}
// 初始化 fabric画布
const canvas = new fabric.Canvas('canvas')
// 引入插件 可选传入自定义配置
Editor.use(EditorWorkspace).use(CanvasRuler, { color: 'red', size: 0.1 })
// 初始化编辑器
const editor = new Editor(canvas)
// 调用插件方法 1
editor.enableRuler()
// 调用插件方法 2
const ruler = editor.getPlugin('ruler')
rule.enableRuler()
// 事件订阅
const ruler = editor.getPlugin('ruler')
editor.on(ruler.event.createRulerStart, () => {
// do something
})