Skip to content

Commit 46dca7a

Browse files
committed
Shiftでモード解除を追加、モード変更時の動作を安定化
1 parent f0d2c08 commit 46dca7a

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

js/fabric/fabric-management.js

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,55 @@ selectable: false
3636
}
3737
});
3838

39+
var shiftTempDisabledMode=null;
40+
var shiftTempDisabledKnife=false;
41+
42+
document.addEventListener("keydown",function(e){
43+
if(e.key!=="Shift"||shiftTempDisabledMode!==null||shiftTempDisabledKnife)return;
44+
if(currentMode==="freehand"||currentMode==="point"){
45+
shiftTempDisabledMode=currentMode;
46+
currentMode="select";
47+
canvas.selection=true;
48+
canvas.forEachObject(function(obj){
49+
if(obj.excludeFromLayerPanel)return;
50+
obj.set({selectable:true,evented:true});
51+
});
52+
changeDefaultCursor();
53+
canvas.renderAll();
54+
}else if(isKnifeMode){
55+
shiftTempDisabledKnife=true;
56+
canvas.selection=true;
57+
canvas.forEachObject(function(obj){
58+
if(obj.excludeFromLayerPanel)return;
59+
obj.set({selectable:true,evented:true});
60+
});
61+
changeDefaultCursor();
62+
canvas.renderAll();
63+
}
64+
});
65+
66+
document.addEventListener("keyup",function(e){
67+
if(e.key!=="Shift")return;
68+
if(shiftTempDisabledMode!==null){
69+
currentMode=shiftTempDisabledMode;
70+
shiftTempDisabledMode=null;
71+
canvas.selection=false;
72+
canvas.forEachObject(function(obj){
73+
obj.set({selectable:false,evented:false});
74+
});
75+
changeCursor(currentMode);
76+
canvas.renderAll();
77+
}else if(shiftTempDisabledKnife){
78+
shiftTempDisabledKnife=false;
79+
canvas.selection=false;
80+
canvas.forEachObject(function(obj){
81+
obj.set({selectable:false,evented:false});
82+
});
83+
changeCursor("knife");
84+
canvas.renderAll();
85+
}
86+
});
87+
3988
canvas.on("object:modified",(e)=>{
4089
eventLogger.trace('5: object:modified');
4190
const obj=e.target;
@@ -250,7 +299,7 @@ highlightActiveLayerByCanvas(e.target);
250299

251300
canvas.on("mouse:down",function (options) {
252301
eventLogger.trace('20: mouse:down');
253-
if (!isKnifeMode) return;
302+
if (!isKnifeMode||shiftTempDisabledKnife) return;
254303

255304
var pointer=canvas.getPointer(options.e);
256305
var selectedPolygon=getPolygonAtPoint(pointer);
@@ -269,7 +318,7 @@ canvas.discardActiveObject().renderAll();
269318

270319
canvas.on("mouse:up",function (options) {
271320
eventLogger.trace('21: mouse:up');
272-
if (!isKnifeMode||!isKnifeDrawing) return;
321+
if (!isKnifeMode||!isKnifeDrawing||shiftTempDisabledKnife) return;
273322

274323
isKnifeDrawing=false;
275324

@@ -282,7 +331,7 @@ currentKnifeLine=null;
282331
});
283332

284333
canvas.on("mouse:move",function (options) {
285-
if (!isKnifeMode||!isKnifeDrawing) return;
334+
if (!isKnifeMode||!isKnifeDrawing||shiftTempDisabledKnife) return;
286335
eventLogger.trace('22: mouse:move');
287336

288337
var pointer=canvas.getPointer(options.e);

js/sidebar/panel/knife/knife-mode.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ knifeModeButton.textContent=isKnifeMode
3030
: getText("knifeOn");
3131

3232
if (isKnifeMode) {
33+
if(currentMode==="freehand"||currentMode==="point"){
34+
sbClear();
35+
sbClearControlePoints();
36+
points=[];
37+
}
38+
currentMode="select";
3339
activeClearButton();
3440
knifeModeButton.classList.add("selected");
3541
changeCursor("knife");

js/sidebar/speechBubble/speech-bubble-freehand.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,10 @@ requestAnimationFrame(()=>canvas.renderAll());
460460

461461
function setDrawingMode(button) {
462462
freehandBubbleLogger.debug("setDrawingMode called, currentMode="+currentMode);
463+
if(isKnifeMode){
464+
isKnifeMode=false;
465+
updateKnifeMode();
466+
}
463467
canvas.selection=false;
464468
setSBActiveButton(button);
465469
sbClear();
@@ -481,6 +485,10 @@ freehandBubbleLogger.debug("setDrawingMode completed");
481485
}
482486

483487
function setSelectionMode(button) {
488+
if(isKnifeMode){
489+
isKnifeMode=false;
490+
updateKnifeMode();
491+
}
484492
setSBActiveButton(button);
485493
canvas.selection=currentMode==="select";
486494
if (editingGroup) canvas.remove(editingGroup);

0 commit comments

Comments
 (0)