|  | @@ -940,6 +940,8 @@ class App extends React.Component<{}, AppState> {
 | 
	
		
			
				|  |  |      this.forceUpdate();
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  private removeWheelEventListener: (() => void) | undefined;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    public render() {
 | 
	
		
			
				|  |  |      return (
 | 
	
		
			
				|  |  |        <div
 | 
	
	
		
			
				|  | @@ -1110,13 +1112,18 @@ class App extends React.Component<{}, AppState> {
 | 
	
		
			
				|  |  |            id="canvas"
 | 
	
		
			
				|  |  |            width={window.innerWidth - CANVAS_WINDOW_OFFSET_LEFT}
 | 
	
		
			
				|  |  |            height={window.innerHeight - CANVAS_WINDOW_OFFSET_TOP}
 | 
	
		
			
				|  |  | -          onWheel={e => {
 | 
	
		
			
				|  |  | -            e.preventDefault();
 | 
	
		
			
				|  |  | -            const { deltaX, deltaY } = e;
 | 
	
		
			
				|  |  | -            this.setState(state => ({
 | 
	
		
			
				|  |  | -              scrollX: state.scrollX - deltaX,
 | 
	
		
			
				|  |  | -              scrollY: state.scrollY - deltaY
 | 
	
		
			
				|  |  | -            }));
 | 
	
		
			
				|  |  | +          ref={canvas => {
 | 
	
		
			
				|  |  | +            if (this.removeWheelEventListener) {
 | 
	
		
			
				|  |  | +              this.removeWheelEventListener();
 | 
	
		
			
				|  |  | +              this.removeWheelEventListener = undefined;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (canvas) {
 | 
	
		
			
				|  |  | +              canvas.addEventListener("wheel", this.handleWheel, {
 | 
	
		
			
				|  |  | +                passive: false
 | 
	
		
			
				|  |  | +              });
 | 
	
		
			
				|  |  | +              this.removeWheelEventListener = () =>
 | 
	
		
			
				|  |  | +                canvas.removeEventListener("wheel", this.handleWheel);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |            }}
 | 
	
		
			
				|  |  |            onMouseDown={e => {
 | 
	
		
			
				|  |  |              // only handle left mouse button
 | 
	
	
		
			
				|  | @@ -1172,7 +1179,7 @@ class App extends React.Component<{}, AppState> {
 | 
	
		
			
				|  |  |                  isResizingElements = true;
 | 
	
		
			
				|  |  |                } else {
 | 
	
		
			
				|  |  |                  let hitElement = null;
 | 
	
		
			
				|  |  | -                
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  // We need to to hit testing from front (end of the array) to back (beginning of the array)
 | 
	
		
			
				|  |  |                  for (let i = elements.length - 1; i >= 0; --i) {
 | 
	
		
			
				|  |  |                    if (hitTest(elements[i], x, y)) {
 | 
	
	
		
			
				|  | @@ -1394,6 +1401,15 @@ class App extends React.Component<{}, AppState> {
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  private handleWheel = (e: WheelEvent) => {
 | 
	
		
			
				|  |  | +    e.preventDefault();
 | 
	
		
			
				|  |  | +    const { deltaX, deltaY } = e;
 | 
	
		
			
				|  |  | +    this.setState(state => ({
 | 
	
		
			
				|  |  | +      scrollX: state.scrollX - deltaX,
 | 
	
		
			
				|  |  | +      scrollY: state.scrollY - deltaY
 | 
	
		
			
				|  |  | +    }));
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    componentDidUpdate() {
 | 
	
		
			
				|  |  |      renderScene(rc, context, {
 | 
	
		
			
				|  |  |        scrollX: this.state.scrollX,
 |