@tencentcloud/roomkit-electron-vue3
Version:
<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,
84 lines (73 loc) • 2.05 kB
text/typescript
import { Canvas } from 'fabric/fabric-impl';
import hotkeys from 'hotkeys-js';
import FabricCanvas from './index';
const keyNames = {
lrdu: 'left,right,down,up',
backspace: 'backspace',
delete: 'delete',
ctrlz: 'ctrl+z',
ctrly: 'ctrl+y',
ctrlc: 'ctrl+c',
ctrlv: 'ctrl+v',
};
function copyElement(canvas: Canvas) {
let copyEl: object | null = null;
hotkeys(keyNames.ctrlc, () => {
const activeObject = canvas.getActiveObject();
if (!activeObject) return;
activeObject.clone((_copyEl: object) => {
canvas.discardActiveObject();
_copyEl.set({
left: (_copyEl.left as number) + 20,
top: (_copyEl.top as number) + 20,
evented: true,
});
copyEl = _copyEl;
});
});
hotkeys(keyNames.ctrlv, () => {
if (!copyEl) return;
canvas.add(copyEl);
canvas.setActiveObject(copyEl);
});
}
function deleteObject(canvas : Canvas) {
const activeObject = canvas.getActiveObjects();
if (activeObject) {
activeObject.forEach(item => canvas.remove(item));
canvas.requestRenderAll();
canvas.discardActiveObject();
}
}
function initHotkeys(canvas: Canvas, fabricCanvas: FabricCanvas) {
hotkeys(keyNames.backspace, () => {
deleteObject(canvas);
});
hotkeys(keyNames.delete, () => {
deleteObject(canvas);
});
hotkeys(keyNames.lrdu, (_event, handler) => {
const activeObject = canvas.getActiveObject();
if (activeObject) {
switch (handler.key) {
case 'left':
activeObject.set('left', (activeObject.left as number) - 1);
break;
case 'right':
activeObject.set('left', (activeObject.left as number) + 1);
break;
case 'down':
activeObject.set('top', (activeObject.top as number) + 1);
break;
case 'up':
activeObject.set('top', (activeObject.top as number) - 1);
break;
default:
}
canvas.renderAll();
}
});
copyElement(canvas);
}
export default initHotkeys;
export { keyNames, hotkeys };