复制粘贴保存快捷键
This commit is contained in:
@@ -1 +1 @@
|
|||||||
{"history":[{"time":"2025-5-28","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi6.soon"},{"time":"2025-4-10","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi7.soon"},{"time":"2025-4-9","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi5.soon"},{"time":"2025-4-9","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi.soon"}]}
|
{"history":[{"time":"2025-6-2","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi6.soon"},{"time":"2025-4-10","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi7.soon"},{"time":"2025-4-9","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi5.soon"},{"time":"2025-4-9","path":"E:\\project\\sideline\\shanghaikashu\\文件\\soon文件\\ceshi.soon"}]}
|
||||||
+97
-3
@@ -775,6 +775,11 @@
|
|||||||
ipcRenderer.send('get-scale-rate');
|
ipcRenderer.send('get-scale-rate');
|
||||||
const { clipboard } = require('electron')
|
const { clipboard } = require('electron')
|
||||||
const dpi = 600
|
const dpi = 600
|
||||||
|
// 内部剪贴板
|
||||||
|
let clipboardData = {
|
||||||
|
objects: null,
|
||||||
|
offset: 10 // 粘贴位置偏移量
|
||||||
|
};
|
||||||
//var encrypt = new JSEncrypt();
|
//var encrypt = new JSEncrypt();
|
||||||
//encrypt.setPublicKey(`-----BEGIN PUBLIC KEY-----
|
//encrypt.setPublicKey(`-----BEGIN PUBLIC KEY-----
|
||||||
//MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDAbKQ46WevL9PapJ+AlZqSzczkTovu7STH
|
//MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDAbKQ46WevL9PapJ+AlZqSzczkTovu7STH
|
||||||
@@ -4354,7 +4359,7 @@
|
|||||||
|
|
||||||
recordObjs2.push(JSON.stringify(objs2))
|
recordObjs2.push(JSON.stringify(objs2))
|
||||||
let j2 = canvas2.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
let j2 = canvas2.toJSON(["selectable", "hoverable", "hoverCursor", "text", "fontStyle", "fontWeight", "underline"]);
|
||||||
j2.objects[0].hoverCursor = "default";
|
// j2.objects[0].hoverCursor = "default";
|
||||||
recordJson2.push(j2);
|
recordJson2.push(j2);
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
@@ -5001,7 +5006,6 @@
|
|||||||
recordState();
|
recordState();
|
||||||
}
|
}
|
||||||
function selectCircleText() {
|
function selectCircleText() {
|
||||||
console.log(canvas.getActiveObject().get("text"))
|
|
||||||
$("#circle_text_control").show();
|
$("#circle_text_control").show();
|
||||||
$("#circle_text_color").val(canvas.getActiveObject().get("fill"));
|
$("#circle_text_color").val(canvas.getActiveObject().get("fill"));
|
||||||
$("#circle_text_back_color").val(canvas.getActiveObject().get("textBackgroundColor") == "" ? '#ffffff' : canvas.getActiveObject().get("textBackgroundColor"));
|
$("#circle_text_back_color").val(canvas.getActiveObject().get("textBackgroundColor") == "" ? '#ffffff' : canvas.getActiveObject().get("textBackgroundColor"));
|
||||||
@@ -6191,7 +6195,7 @@
|
|||||||
});
|
});
|
||||||
canvas1.on("object:moving", function (e) {
|
canvas1.on("object:moving", function (e) {
|
||||||
let obj = canvas.getActiveObject()
|
let obj = canvas.getActiveObject()
|
||||||
if (objs[getIndex(e.target) - 1].type ===11) {
|
if (objs[getIndex(e.target) - 1].type && objs[getIndex(e.target) - 1].type ===11) {
|
||||||
let pointer = {
|
let pointer = {
|
||||||
x: obj.left,
|
x: obj.left,
|
||||||
y: obj.top
|
y: obj.top
|
||||||
@@ -6210,6 +6214,96 @@
|
|||||||
}
|
}
|
||||||
updateControls();
|
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) {
|
canvas1.on("object:scaling", function (event) {
|
||||||
//if(objs[getIndex(event.target) - 1].type == 5 || objs[getIndex(event.target) - 1].type == 6){
|
//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"));
|
// //canvas.getActiveObject().set("width", canvas.getActiveObject().get("width") * canvas.getActiveObject().get("scaleX"));
|
||||||
|
|||||||
@@ -752,6 +752,11 @@
|
|||||||
ipcRenderer.send('get-scale-rate')
|
ipcRenderer.send('get-scale-rate')
|
||||||
const { clipboard } = require('electron')
|
const { clipboard } = require('electron')
|
||||||
const dpi = 300
|
const dpi = 300
|
||||||
|
// 内部剪贴板
|
||||||
|
let clipboardData = {
|
||||||
|
objects: null,
|
||||||
|
offset: 10 // 粘贴位置偏移量
|
||||||
|
};
|
||||||
//var encrypt = new JSEncrypt();
|
//var encrypt = new JSEncrypt();
|
||||||
//encrypt.setPublicKey(`-----BEGIN PUBLIC KEY-----
|
//encrypt.setPublicKey(`-----BEGIN PUBLIC KEY-----
|
||||||
//MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDAbKQ46WevL9PapJ+AlZqSzczkTovu7STH
|
//MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDAbKQ46WevL9PapJ+AlZqSzczkTovu7STH
|
||||||
@@ -5629,6 +5634,95 @@
|
|||||||
// }
|
// }
|
||||||
updateControls();
|
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) {
|
canvas1.on('object:scaling', function (event) {
|
||||||
//if(objs[getIndex(event.target) - 1].type == 5 || objs[getIndex(event.target) - 1].type == 6){
|
//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"));
|
// //canvas.getActiveObject().set("width", canvas.getActiveObject().get("width") * canvas.getActiveObject().get("scaleX"));
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Reference in New Issue
Block a user