docs: function Canvas (canvasElement, fullWindow, autoInit) {
    if( !(this instanceof Canvas) ) {
      return new Canvas.apply(null, arguments);
    }
  
    /**
     * @type {HTMLCanvasElement}
     * @public
     */
    this.canvas = null;
  
    /**
     * @type {CanvasRenderingContext2D}
     * @public
     */
    this.context = null;
  
    /**
     * @type {boolean}
     * @private
     */
    this.fullWindow = true;
  
    /**
     * if a path has started - reset when drawing a path 
     * @type {boolean}
     * @private
     */
    this.pathStarted = false;
  
    /**
     * width of the canvas, in px
     * @type {number}
     * @public
     */
    this.width = 0;
  
    /**
     * height of the canvas, in px
     * @type {number}
     * @public
     */
    this.height = 0;
    
  
    if (canvasElement === undefined) {
      canvasElement = document.createElement("canvas");
      document.body.appendChild(canvasElement);
    }
  
    if (fullWindow === undefined) {
      fullWindow = true;
    }
  
    if (autoInit === undefined) {
      autoInit = true;
    }
  
    this.canvas = canvasElement;
    this.canvas.classList.add("creenv");
    this.context = this.canvas.getContext('2d');
    this.fullWindow = fullWindow;
  
    this.onWindowResizeHandler = this.onWindowResizeHandler.bind(this);
  
    if (autoInit) {
      this.init();
    }
  }