getFormattingValues(ctx, selected, hover, mod) {
    const getValue = function (fontOptions, mod, option) {
      if (mod === "normal") {
        if (option === "mod") return "";
        return fontOptions[option];
      }

      if (fontOptions[mod][option] !== undefined) {
        // Grumbl leaving out test on undefined equals false for ""
        return fontOptions[mod][option];
      } else {
        // Take from parent font option
        return fontOptions[option];
      }
    };

    const values = {
      color: getValue(this.fontOptions, mod, "color"),
      size: getValue(this.fontOptions, mod, "size"),
      face: getValue(this.fontOptions, mod, "face"),
      mod: getValue(this.fontOptions, mod, "mod"),
      vadjust: getValue(this.fontOptions, mod, "vadjust"),
      strokeWidth: this.fontOptions.strokeWidth,
      strokeColor: this.fontOptions.strokeColor,
    };
    if (selected || hover) {
      if (
        mod === "normal" &&
        this.fontOptions.chooser === true &&
        this.elementOptions.labelHighlightBold
      ) {
        values.mod = "bold";
      } else {
        if (typeof this.fontOptions.chooser === "function") {
          this.fontOptions.chooser(
            values,
            this.elementOptions.id,
            selected,
            hover
          );
        }
      }
    }

    let fontString = "";
    if (values.mod !== undefined && values.mod !== "") {
      // safeguard for undefined - this happened
      fontString += values.mod + " ";
    }
    fontString += values.size + "px " + values.face;

    ctx.font = fontString.replace(/"/g, "");
    values.font = ctx.font;
    values.height = values.size;
    return values;
  }
@param {CanvasRenderingContext2D} ctx
@param {boolean} selected
@param {boolean} hover
@param {string} mod
@returns {{color, size, face, mod, vadjust, strokeWidth: *, strokeColor: (*|string|allOptions.edges.font.strokeColor|{string}|allOptions.nodes.font.strokeColor|Array)}}