复制粘贴保存快捷键

This commit is contained in:
24kycj
2025-06-03 02:02:42 +08:00
parent 71aa2c3d1f
commit fef055494e
4 changed files with 192 additions and 4 deletions
+94
View File
@@ -752,6 +752,11 @@
ipcRenderer.send('get-scale-rate')
const { clipboard } = require('electron')
const dpi = 300
// 内部剪贴板
let clipboardData = {
objects: null,
offset: 10 // 粘贴位置偏移量
};
//var encrypt = new JSEncrypt();
//encrypt.setPublicKey(`-----BEGIN PUBLIC KEY-----
//MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDAbKQ46WevL9PapJ+AlZqSzczkTovu7STH
@@ -5629,6 +5634,95 @@
// }
updateControls();
});
// 监听键盘事件
window.addEventListener('keydown', handleKeyDown);
function handleKeyDown(e) {
// 检测 Ctrl+C
if ((e.ctrlKey || e.metaKey) && e.keyCode === 67) {
copySelection();
e.preventDefault(); // 阻止默认复制行为
}
// 检测 Ctrl+V
if ((e.ctrlKey || e.metaKey) && e.keyCode === 86) {
pasteFromClipboard();
e.preventDefault(); // 阻止默认粘贴行为
}
// 检测 Ctrl+S
if ((e.ctrlKey || e.metaKey) && e.keyCode === 83) {
output();
e.preventDefault(); // 阻止默认粘贴行为
}
}
// 复制选中对象
function copySelection() {
const activeObjects = canvas.getActiveObjects();
if (!activeObjects || activeObjects.length === 0) {
console.log("未选中任何对象");
return;
}
// 存储原始对象用于克隆
clipboardData.objects = activeObjects;
console.log(activeObjects)
console.log(`已复制 ${activeObjects.length} 个对象`);
}
// 粘贴对象
function pasteFromClipboard() {
if (!clipboardData.objects || clipboardData.objects.length === 0) {
console.log("剪贴板为空");
return;
}
// 克隆所有对象
fabric.util.enlivenObjects(
clipboardData.objects.map(obj => obj.toObject()),
clonedObjects => {
// 设置新位置(添加偏移)
clonedObjects.forEach((clone, index) => {
let idx = getIndex(clipboardData.objects[index])
console.log(clone)
clone.set({
left: clone.left + clipboardData.offset,
top: clone.top + clipboardData.offset,
evented: true
});
// 计算整体偏移
const groupOffset = clone.group;
if (groupOffset) {
clone.set({
left: groupOffset.left + clipboard.offset,
top: groupOffset.top + clipboard.offset
});
}
// 添加到画布
canvas.add(clone);
let tobj = {...objs[idx-1]}
if (tobj.name) tobj.name = tobj.name + objs.length
objs.push(tobj);
canvas.renderAll();
updateList();
recordState();
});
// 选中粘贴的对象
canvas.discardActiveObject();
const sel = new fabric.ActiveSelection(clonedObjects, {
canvas: canvas
});
canvas.setActiveObject(sel);
canvas.requestRenderAll();
selectObj(objs.length - 1);
// 增加下次偏移
clipboardData.offset += 10;
}
);
}
canvas1.on('object:scaling', function (event) {
//if(objs[getIndex(event.target) - 1].type == 5 || objs[getIndex(event.target) - 1].type == 6){
// //canvas.getActiveObject().set("width", canvas.getActiveObject().get("width") * canvas.getActiveObject().get("scaleX"));