@@ -47,11 +47,34 @@ export function CanvasEventTarget({
4747} ) {
4848 const interactionEventTargetRef = useRef ( ) ;
4949
50+ const [ isSpacebarPressed , setIsSpacebarPressed ] = useState ( false ) ;
5051 let platform : PlatformName = "other" ;
5152 useEffect ( ( ) => {
5253 platform = getCurrentPlatform ( window . navigator ) ;
5354 } ) ;
5455
56+ useEffect ( ( ) => {
57+ const kd = ( e ) => {
58+ // if spacebar is pressed, enable panning wirt dragging.
59+ if ( e . code === "Space" ) {
60+ setIsSpacebarPressed ( true ) ;
61+ }
62+ } ;
63+ const ku = ( e ) => {
64+ if ( e . code === "Space" ) {
65+ setIsSpacebarPressed ( false ) ;
66+ }
67+ } ;
68+
69+ document . addEventListener ( "keydown" , kd ) ;
70+ document . addEventListener ( "keyup" , ku ) ;
71+
72+ return ( ) => {
73+ document . removeEventListener ( "keydown" , kd ) ;
74+ document . removeEventListener ( "keyup" , ku ) ;
75+ } ;
76+ } ) ;
77+
5578 const transform_wheel_to_zoom = ( s ) => {
5679 return {
5780 ...s ,
@@ -65,6 +88,10 @@ export function CanvasEventTarget({
6588 onPinchStart : onZoomingStart ,
6689 onPinchEnd : onZoomingEnd ,
6790 onWheel : ( s ) => {
91+ if ( s . altKey ) {
92+ // altkey prevents panning the canvas.
93+ return ;
94+ }
6895 if ( s . ctrlKey ) {
6996 // crtl key is also enabled on onPinch - we don't have to explicitly add linux & windows support for ctrl + scroll.
7097 return ;
@@ -80,6 +107,24 @@ export function CanvasEventTarget({
80107 onWheelStart : onPanningStart ,
81108 onWheelEnd : onPanningEnd ,
82109 onMove : onPointerMove ,
110+ onDragStart : ( s ) => {
111+ if ( isSpacebarPressed ) {
112+ onPanningStart ( s as any ) ;
113+ }
114+ } ,
115+ onDrag : ( s ) => {
116+ if ( isSpacebarPressed ) {
117+ onPanning ( {
118+ ...s ,
119+ delta : [ - s . delta [ 0 ] , - s . delta [ 1 ] ] ,
120+ } as any ) ;
121+ }
122+ } ,
123+ onDragEnd : ( s ) => {
124+ if ( isSpacebarPressed ) {
125+ onPanningEnd ( s as any ) ;
126+ }
127+ } ,
83128 onMouseDown : onPointerDown ,
84129 onMoveStart : onPointerMoveStart ,
85130 onMoveEnd : onPointerMoveEnd ,
@@ -89,6 +134,9 @@ export function CanvasEventTarget({
89134
90135 return (
91136 < EventTargetContainer
137+ style = { {
138+ cursor : isSpacebarPressed ? "grab" : "default" ,
139+ } }
92140 id = "gesture-event-listener"
93141 ref = { interactionEventTargetRef }
94142 />
0 commit comments