@@ -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+
3988canvas . on ( "object:modified" , ( e ) => {
4089eventLogger . trace ( '5: object:modified' ) ;
4190const obj = e . target ;
@@ -250,7 +299,7 @@ highlightActiveLayerByCanvas(e.target);
250299
251300canvas . on ( "mouse:down" , function ( options ) {
252301eventLogger . trace ( '20: mouse:down' ) ;
253- if ( ! isKnifeMode ) return ;
302+ if ( ! isKnifeMode || shiftTempDisabledKnife ) return ;
254303
255304var pointer = canvas . getPointer ( options . e ) ;
256305var selectedPolygon = getPolygonAtPoint ( pointer ) ;
@@ -269,7 +318,7 @@ canvas.discardActiveObject().renderAll();
269318
270319canvas . on ( "mouse:up" , function ( options ) {
271320eventLogger . trace ( '21: mouse:up' ) ;
272- if ( ! isKnifeMode || ! isKnifeDrawing ) return ;
321+ if ( ! isKnifeMode || ! isKnifeDrawing || shiftTempDisabledKnife ) return ;
273322
274323isKnifeDrawing = false ;
275324
@@ -282,7 +331,7 @@ currentKnifeLine=null;
282331} ) ;
283332
284333canvas . on ( "mouse:move" , function ( options ) {
285- if ( ! isKnifeMode || ! isKnifeDrawing ) return ;
334+ if ( ! isKnifeMode || ! isKnifeDrawing || shiftTempDisabledKnife ) return ;
286335eventLogger . trace ( '22: mouse:move' ) ;
287336
288337var pointer = canvas . getPointer ( options . e ) ;
0 commit comments