draw(ctx, x, y, selected, hover, baseline = "middle") {
    // if no label, return
    if (this.elementOptions.label === undefined) return;

    // check if we have to render the label
    let viewFontSize = this.fontOptions.size * this.body.view.scale;
    if (
      this.elementOptions.label &&
      viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1
    )
      return;

    // This ensures that there will not be HUGE letters on screen
    // by setting an upper limit on the visible text size (regardless of zoomLevel)
    if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {
      viewFontSize =
        Number(this.elementOptions.scaling.label.maxVisible) /
        this.body.view.scale;
    }

    // update the size cache if required
    this.calculateLabelSize(ctx, selected, hover, x, y, baseline);
    this._drawBackground(ctx);
    this._drawText(ctx, x, this.size.yLine, baseline, viewFontSize);
  }
Main function. This is called from anything that wants to draw a label.
@param {CanvasRenderingContext2D} ctx
@param {number} x
@param {number} y
@param {boolean} selected
@param {boolean} hover
@param {string} [baseline]