VexFlowTextMeasurer.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {ITextMeasurer} from "../../Interfaces/ITextMeasurer";
  2. import {Fonts} from "../../../Common/Enums/Fonts";
  3. import {FontStyles} from "../../../Common/Enums/FontStyles";
  4. import {VexFlowConverter} from "./VexFlowConverter";
  5. import { EngravingRules } from "../EngravingRules";
  6. /**
  7. * Created by Matthias on 21.06.2016.
  8. */
  9. export class VexFlowTextMeasurer implements ITextMeasurer {
  10. constructor(rules: EngravingRules) {
  11. const canvas: HTMLCanvasElement = document.createElement("canvas");
  12. this.context = canvas.getContext("2d");
  13. this.rules = rules;
  14. }
  15. // The context of a canvas used internally to compute font sizes
  16. private context: CanvasRenderingContext2D;
  17. public fontSize: number = 20;
  18. public fontSizeStandard: number = this.fontSize;
  19. private rules: EngravingRules;
  20. /**
  21. *
  22. * @param text
  23. * @param font
  24. * @param style
  25. * @returns {number}
  26. */
  27. public computeTextWidthToHeightRatio(text: string, font: Fonts, style: FontStyles,
  28. fontFamily: string = undefined,
  29. fontSize: number = this.fontSize): number {
  30. this.context.font = VexFlowConverter.font(fontSize, style, font, this.rules, fontFamily);
  31. return this.context.measureText(text).width / fontSize;
  32. }
  33. public setFontSize(fontSize: number = this.fontSizeStandard): number {
  34. this.fontSize = fontSize;
  35. return fontSize;
  36. }
  37. }