_drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {
    this.resize(ctx, selected, hover, values);
    this.left = x - this.width / 2;
    this.top = y - this.height / 2;

    this.initContextForDraw(ctx, values);
    getShape(shape)(ctx, x, y, values.size);
    this.performFill(ctx, values);

    if (this.options.icon !== undefined) {
      if (this.options.icon.code !== undefined) {
        ctx.font =
          (selected ? "bold " : "") +
          this.height / 2 +
          "px " +
          (this.options.icon.face || "FontAwesome");
        ctx.fillStyle = this.options.icon.color || "black";
        ctx.textAlign = "center";
        ctx.textBaseline = "middle";
        ctx.fillText(this.options.icon.code, x, y);
      }
    }

    return {
      drawExternalLabel: () => {
        if (this.options.label !== undefined) {
          // Need to call following here in order to ensure value for
          // `this.labelModule.size.height`.
          this.labelModule.calculateLabelSize(
            ctx,
            selected,
            hover,
            x,
            y,
            "hanging"
          );
          const yLabel =
            y + 0.5 * this.height + 0.5 * this.labelModule.size.height;
          this.labelModule.draw(ctx, x, yLabel, selected, hover, "hanging");
        }

        this.updateBoundingBox(x, y);
      },
    };
  }
@param {CanvasRenderingContext2D} ctx
@param {string} shape
@param {number} sizeMultiplier - Unused! TODO: Remove next major release
@param {number} x
@param {number} y
@param {boolean} selected
@param {boolean} hover
@param {ArrowOptions} values
@private
@returns {object} Callbacks to draw later on higher layers.