@wcardinal/wcardinal-ui 0.424.0 → 0.426.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/types/wcardinal/ui/d-chart-axis-guide-simple.d.ts +8 -1
  2. package/dist/types/wcardinal/ui/d-dynamic-text-geometry.d.ts +14 -3
  3. package/dist/types/wcardinal/ui/d-pane.d.ts +4 -4
  4. package/dist/types/wcardinal/ui/shape/e-shape-text.d.ts +3 -1
  5. package/dist/types/wcardinal/ui/shape/variant/build-text.d.ts +1 -1
  6. package/dist/types/wcardinal/ui/shape/variant/e-shape-text-impl.d.ts +6 -1
  7. package/dist/types/wcardinal/ui/util/character.d.ts +8 -0
  8. package/dist/types/wcardinal/ui/util/dynamic-font-atlas-character.d.ts +1 -0
  9. package/dist/types/wcardinal/ui/util/dynamic-font-atlas-characters.d.ts +1 -1
  10. package/dist/types/wcardinal/ui/util/dynamic-font-atlas.d.ts +5 -7
  11. package/dist/types/wcardinal/ui/util/dynamic-sdf-font-atlas.d.ts +2 -5
  12. package/dist/types/wcardinal/ui/util/dynamic-sdf-font-atlases.d.ts +2 -2
  13. package/dist/types/wcardinal/ui/util/index.d.ts +1 -0
  14. package/dist/types/wcardinal/ui/util/util-character-iterator.d.ts +0 -8
  15. package/dist/wcardinal/ui/d-chart-axis-guide-simple.js +54 -26
  16. package/dist/wcardinal/ui/d-chart-axis-guide-simple.js.map +1 -1
  17. package/dist/wcardinal/ui/d-dynamic-text-geometry.js +56 -49
  18. package/dist/wcardinal/ui/d-dynamic-text-geometry.js.map +1 -1
  19. package/dist/wcardinal/ui/d-dynamic-text-measure.js +11 -11
  20. package/dist/wcardinal/ui/d-dynamic-text-measure.js.map +1 -1
  21. package/dist/wcardinal/ui/d-pane.js +9 -21
  22. package/dist/wcardinal/ui/d-pane.js.map +1 -1
  23. package/dist/wcardinal/ui/shape/e-shape-renderer.js +3 -3
  24. package/dist/wcardinal/ui/shape/e-shape-renderer.js.map +1 -1
  25. package/dist/wcardinal/ui/shape/e-shape-text.js.map +1 -1
  26. package/dist/wcardinal/ui/shape/variant/build-text.js +13 -14
  27. package/dist/wcardinal/ui/shape/variant/build-text.js.map +1 -1
  28. package/dist/wcardinal/ui/shape/variant/builder-text.js +1 -1
  29. package/dist/wcardinal/ui/shape/variant/builder-text.js.map +1 -1
  30. package/dist/wcardinal/ui/shape/variant/e-shape-text-impl.js +88 -13
  31. package/dist/wcardinal/ui/shape/variant/e-shape-text-impl.js.map +1 -1
  32. package/dist/wcardinal/ui/util/character.js +13 -0
  33. package/dist/wcardinal/ui/util/character.js.map +1 -0
  34. package/dist/wcardinal/ui/util/dynamic-font-atlas-character.js +2 -1
  35. package/dist/wcardinal/ui/util/dynamic-font-atlas-character.js.map +1 -1
  36. package/dist/wcardinal/ui/util/dynamic-font-atlas-characters.js.map +1 -1
  37. package/dist/wcardinal/ui/util/dynamic-font-atlas.js +124 -108
  38. package/dist/wcardinal/ui/util/dynamic-font-atlas.js.map +1 -1
  39. package/dist/wcardinal/ui/util/dynamic-font-atlases.js +2 -1
  40. package/dist/wcardinal/ui/util/dynamic-font-atlases.js.map +1 -1
  41. package/dist/wcardinal/ui/util/dynamic-sdf-font-atlas.js +83 -114
  42. package/dist/wcardinal/ui/util/dynamic-sdf-font-atlas.js.map +1 -1
  43. package/dist/wcardinal/ui/util/dynamic-sdf-font-atlases.js +18 -26
  44. package/dist/wcardinal/ui/util/dynamic-sdf-font-atlases.js.map +1 -1
  45. package/dist/wcardinal/ui/util/index.js +1 -0
  46. package/dist/wcardinal/ui/util/index.js.map +1 -1
  47. package/dist/wcardinal/ui/util/util-character-iterator.js +0 -17
  48. package/dist/wcardinal/ui/util/util-character-iterator.js.map +1 -1
  49. package/dist/wcardinal-ui-theme-dark-en-us.js +1 -1
  50. package/dist/wcardinal-ui-theme-dark-en-us.min.js +1 -1
  51. package/dist/wcardinal-ui-theme-dark-ja-jp.js +1 -1
  52. package/dist/wcardinal-ui-theme-dark-ja-jp.min.js +1 -1
  53. package/dist/wcardinal-ui-theme-dark.js +1 -1
  54. package/dist/wcardinal-ui-theme-dark.min.js +1 -1
  55. package/dist/wcardinal-ui-theme-white-en-us.js +1 -1
  56. package/dist/wcardinal-ui-theme-white-en-us.min.js +1 -1
  57. package/dist/wcardinal-ui-theme-white-ja-jp.js +1 -1
  58. package/dist/wcardinal-ui-theme-white-ja-jp.min.js +1 -1
  59. package/dist/wcardinal-ui-theme-white.js +1 -1
  60. package/dist/wcardinal-ui-theme-white.min.js +1 -1
  61. package/dist/wcardinal-ui.cjs.js +545 -478
  62. package/dist/wcardinal-ui.js +545 -478
  63. package/dist/wcardinal-ui.min.js +2 -2
  64. package/dist/wcardinal-ui.min.js.map +1 -1
  65. package/package.json +1 -1
  66. package/dist/types/wcardinal/ui/util/ascii.d.ts +0 -1
  67. package/dist/wcardinal/ui/util/ascii.js +0 -6
  68. package/dist/wcardinal/ui/util/ascii.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-font-atlas.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-font-atlas.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MIPMAP_MODES, SCALE_MODES, Texture } from \"pixi.js\";\nimport { ASCII_CHARACTERS } from \"./ascii\";\nimport { DynamicFontAtlasCharacter } from \"./dynamic-font-atlas-character\";\nimport { DynamicFontAtlasCharacterType } from \"./dynamic-font-atlas-character-type\";\nimport { DynamicFontAtlasCharacters } from \"./dynamic-font-atlas-characters\";\nimport { DynamicFontAtlasFont } from \"./dynamic-font-atlas-font\";\nimport { UtilCharacterIterator } from \"./util-character-iterator\";\nimport { UtilFont } from \"./util-font\";\n\nexport class DynamicFontAtlas {\n\tprotected _id: string;\n\tprotected _canvas: HTMLCanvasElement | null;\n\tprotected _context: CanvasRenderingContext2D | null;\n\tprotected _font: DynamicFontAtlasFont;\n\tprotected _characters: DynamicFontAtlasCharacters;\n\tprotected _length: number;\n\tprotected _unrefCount: number;\n\tprotected _width: number;\n\tprotected _height: number;\n\tprotected _revision: number;\n\tprotected _revisionUpdated: number;\n\tprotected _texture: Texture;\n\tprotected _padding: number;\n\n\tconstructor(fontId: string, fontSize: number, fontColor: number, resolution: number) {\n\t\tthis._id = fontId;\n\t\tthis._canvas = document.createElement(\"canvas\");\n\t\tthis._context = null;\n\t\tconst padding = this.toPadding(fontSize);\n\t\tthis._padding = padding;\n\t\tthis._font = new DynamicFontAtlasFont(fontId, fontSize, fontColor, padding);\n\t\tthis._characters = {};\n\t\tthis._length = 0;\n\t\tthis._unrefCount = 0;\n\t\tthis._width = 1;\n\t\tthis._height = 1;\n\t\tthis._revision = 0;\n\t\tthis._revisionUpdated = 0;\n\t\tthis._texture = Texture.from(this._canvas, {\n\t\t\tmipmap: MIPMAP_MODES.OFF,\n\t\t\tresolution,\n\t\t\tscaleMode: SCALE_MODES.NEAREST\n\t\t});\n\n\t\tconst characters = this._characters;\n\t\tthis.add_(\" \", \" \", characters, DynamicFontAtlasCharacterType.SPACE_R);\n\t\tthis.add_(\"\\t\", \" \", characters, DynamicFontAtlasCharacterType.SPACE_R);\n\t\tthis.add_(\"...\", \"...\", characters, DynamicFontAtlasCharacterType.LETTER_RNB);\n\t\tfor (let i = 0, imax = ASCII_CHARACTERS.length; i < imax; ++i) {\n\t\t\tconst char = ASCII_CHARACTERS[i];\n\t\t\tthis.add_(char, char, characters, DynamicFontAtlasCharacterType.LETTER_RNB);\n\t\t}\n\t}\n\n\tprotected toPadding(fontSize: number): number {\n\t\treturn Math.max(3, Math.ceil(fontSize * 0.2));\n\t}\n\n\tget id(): string {\n\t\treturn this._id;\n\t}\n\n\tget font(): DynamicFontAtlasFont {\n\t\treturn this._font;\n\t}\n\n\tget width(): number {\n\t\treturn this._width;\n\t}\n\n\tget height(): number {\n\t\treturn this._height;\n\t}\n\n\tget canvas(): HTMLCanvasElement | null {\n\t\treturn this._canvas;\n\t}\n\n\tget characters(): DynamicFontAtlasCharacters {\n\t\treturn this._characters;\n\t}\n\n\tget texture(): Texture {\n\t\treturn this._texture;\n\t}\n\n\tprotected add_(\n\t\tid: string,\n\t\tcharacter: string,\n\t\tcharacters: DynamicFontAtlasCharacters,\n\t\ttype: DynamicFontAtlasCharacterType\n\t): void {\n\t\tif (!this.isIgnored(character)) {\n\t\t\tconst data = characters[id];\n\t\t\tif (data != null) {\n\t\t\t\tif (!(data.type & DynamicFontAtlasCharacterType.RESERVED)) {\n\t\t\t\t\tif (data.ref === 0) {\n\t\t\t\t\t\tthis._unrefCount -= 1;\n\t\t\t\t\t}\n\t\t\t\t\tdata.ref += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst advance = this.getAdvance(character);\n\t\t\t\tconst padding = this._padding;\n\t\t\t\tconst width = Math.ceil(padding + advance + padding);\n\t\t\t\tconst height = this.font.height;\n\t\t\t\tcharacters[id] = new DynamicFontAtlasCharacter(\n\t\t\t\t\ttype,\n\t\t\t\t\tcharacter,\n\t\t\t\t\t-width, // Setting X and Y to zeros leads to render the letter at the UV coordinate (0, 0).\n\t\t\t\t\t-height,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tadvance\n\t\t\t\t);\n\t\t\t\tthis._length += 1;\n\t\t\t\tthis._revision += 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected isIgnored(character: string): boolean {\n\t\tswitch (character) {\n\t\t\tcase \"\\n\": // Line feed\n\t\t\t\treturn true;\n\t\t\tcase \"\\r\": // Carriage return\n\t\t\t\treturn true;\n\t\t\tcase \"\\v\": // Vertical tab\n\t\t\t\treturn true;\n\t\t\tcase \"\\f\": // Form feed\n\t\t\t\treturn true;\n\t\t\tcase \"\\u0085\": // Next line\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected remove_(id: string, characters: DynamicFontAtlasCharacters): void {\n\t\tconst data = characters[id];\n\t\tif (data != null) {\n\t\t\tif (!(data.type & DynamicFontAtlasCharacterType.RESERVED) && 0 < data.ref) {\n\t\t\t\tdata.ref -= 1;\n\t\t\t\tif (data.ref === 0) {\n\t\t\t\t\tthis._unrefCount += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected cleanup_(): void {\n\t\tif (this._length >> 1 <= this._unrefCount) {\n\t\t\tconst characters = this._characters;\n\t\t\tfor (const character in characters) {\n\t\t\t\tif (characters[character].ref <= 0) {\n\t\t\t\t\tdelete characters[character];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._length -= this._unrefCount;\n\t\t\tthis._revision += 1;\n\t\t\tthis._unrefCount = 0;\n\t\t}\n\t}\n\n\tadd(\n\t\ttargets: string,\n\t\ttype: DynamicFontAtlasCharacterType = DynamicFontAtlasCharacterType.LETTER\n\t): void {\n\t\tconst characters = this._characters;\n\t\tconst iterator = UtilCharacterIterator.from(targets);\n\t\twhile (iterator.hasNext()) {\n\t\t\tconst character = iterator.next();\n\t\t\tthis.add_(character, character, characters, type);\n\t\t}\n\t}\n\n\tremove(targets: string): void {\n\t\tconst characters = this._characters;\n\t\tconst iterator = UtilCharacterIterator.from(targets);\n\t\twhile (iterator.hasNext()) {\n\t\t\tthis.remove_(iterator.next(), characters);\n\t\t}\n\t}\n\n\tget(id: string): DynamicFontAtlasCharacter | undefined {\n\t\treturn this._characters[id];\n\t}\n\n\tgetAdvance(target: string): number {\n\t\tconst context = this.getContext();\n\t\tif (context != null) {\n\t\t\treturn context.measureText(target).width;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tgetContext(): CanvasRenderingContext2D | null {\n\t\tlet context = this._context;\n\t\tif (context == null) {\n\t\t\tconst canvas = this._canvas;\n\t\t\tif (canvas != null) {\n\t\t\t\tcontext = this._context = canvas.getContext(\"2d\", { alpha: true });\n\t\t\t\tif (context == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst font = this._font;\n\t\tif (context.font !== font.id) {\n\t\t\tcontext.font = font.id;\n\t\t\tfont.id = context.font;\n\t\t\tcontext.textAlign = \"left\";\n\t\t\tcontext.textBaseline = \"alphabetic\";\n\t\t\tcontext.lineWidth = 0;\n\t\t\tcontext.lineCap = \"round\";\n\t\t\tcontext.lineJoin = \"miter\";\n\t\t\tcontext.miterLimit = 10;\n\t\t\tcontext.fillStyle = font.color;\n\t\t\tcontext.strokeStyle = \"#0000ff\";\n\t\t}\n\t\treturn context;\n\t}\n\n\tupdate(): boolean {\n\t\tthis.cleanup_();\n\n\t\tif (this._revisionUpdated < this._revision) {\n\t\t\tthis._revisionUpdated = this._revision;\n\n\t\t\tconst canvas = this._canvas;\n\t\t\tif (canvas != null) {\n\t\t\t\tconst font = this._font;\n\t\t\t\tconst fontHeight = font.height;\n\t\t\t\tconst characters = this._characters;\n\t\t\t\tconst width = (this._width = this.toPowerOf2(\n\t\t\t\t\tMath.ceil(Math.sqrt(this._length)) * fontHeight\n\t\t\t\t));\n\n\t\t\t\tconst offsetX = this._padding;\n\t\t\t\tlet x = 0;\n\t\t\t\tlet y = 0;\n\t\t\t\tfor (const key in characters) {\n\t\t\t\t\tconst character = characters[key];\n\t\t\t\t\tif (width <= x + character.width) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\ty += fontHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tcharacter.x = x;\n\t\t\t\t\tcharacter.y = y;\n\t\t\t\t\tcharacter.origin.x = x + offsetX;\n\n\t\t\t\t\tx += character.width;\n\t\t\t\t}\n\t\t\t\tconst height = (this._height = y + fontHeight);\n\n\t\t\t\t// Make an input canvas\n\t\t\t\t// Here, we need to reset the context because\n\t\t\t\t// context settings will be lost when we set the width/height.\n\t\t\t\tconst baseTexture = this._texture.baseTexture;\n\t\t\t\tconst resolution = baseTexture.resolution;\n\t\t\t\tconst realWidth = Math.ceil(width * resolution);\n\t\t\t\tconst realHeight = Math.ceil(height * resolution);\n\t\t\t\tcanvas.width = realWidth;\n\t\t\t\tcanvas.height = realHeight;\n\t\t\t\tconst context = this.getContext();\n\t\t\t\tif (context != null) {\n\t\t\t\t\tUtilFont.measure(context, font);\n\t\t\t\t\tconst offsetY = Math.round(\n\t\t\t\t\t\t(fontHeight - (font.ascent + font.descent)) * 0.5 + font.ascent\n\t\t\t\t\t);\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.scale(resolution, resolution);\n\t\t\t\t\tcontext.clearRect(0, 0, width, height);\n\t\t\t\t\tfor (const key in characters) {\n\t\t\t\t\t\tconst character = characters[key];\n\t\t\t\t\t\tcharacter.origin.y = character.y + offsetY;\n\t\t\t\t\t\tcontext.fillText(key, character.origin.x, character.origin.y);\n\t\t\t\t\t}\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\t\t\t\tbaseTexture.setRealSize(realWidth, realHeight);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetRevision(): number {\n\t\treturn this._revision;\n\t}\n\n\tgetRevisionUpdate(): number {\n\t\treturn this._revisionUpdated;\n\t}\n\n\tget length(): number {\n\t\treturn this._length;\n\t}\n\n\tdestroy(): void {\n\t\tconst canvas = this._canvas;\n\t\tif (canvas != null) {\n\t\t\tthis._canvas = null;\n\t\t}\n\n\t\tconst characters = this._characters;\n\t\tfor (const character in characters) {\n\t\t\tdelete characters[character];\n\t\t}\n\t}\n\n\ttoPowerOf2(size: number): number {\n\t\tlet result = 32;\n\t\twhile (result < size) {\n\t\t\tresult <<= 1;\n\t\t}\n\t\treturn result;\n\t}\n}\n"]}
1
+ {"version":3,"file":"dynamic-font-atlas.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-font-atlas.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MIPMAP_MODES, SCALE_MODES, Texture } from \"pixi.js\";\nimport { Character } from \"./character\";\nimport { DynamicFontAtlasCharacter } from \"./dynamic-font-atlas-character\";\nimport { DynamicFontAtlasCharacterType } from \"./dynamic-font-atlas-character-type\";\nimport { DynamicFontAtlasCharacters } from \"./dynamic-font-atlas-characters\";\nimport { DynamicFontAtlasFont } from \"./dynamic-font-atlas-font\";\nimport { UtilFont } from \"./util-font\";\n\nexport class DynamicFontAtlas {\n\tprotected _id: string;\n\tprotected _canvas: HTMLCanvasElement | null;\n\tprotected _context: CanvasRenderingContext2D | null;\n\tprotected _font: DynamicFontAtlasFont;\n\tprotected _characters: DynamicFontAtlasCharacters;\n\tprotected _createds: DynamicFontAtlasCharacters;\n\tprotected _unrefCount: number;\n\tprotected _width: number;\n\tprotected _height: number;\n\tprotected _revision: number;\n\tprotected _revisionUpdated: number;\n\tprotected _texture: Texture;\n\tprotected _padding: number;\n\n\tconstructor(fontId: string, fontSize: number, fontColor: number, resolution: number) {\n\t\tthis._id = fontId;\n\t\tthis._canvas = document.createElement(\"canvas\");\n\t\tthis._context = null;\n\t\tconst padding = this.toPadding(fontSize);\n\t\tthis._padding = padding;\n\t\tthis._font = new DynamicFontAtlasFont(fontId, fontSize, fontColor, padding);\n\t\tthis._unrefCount = 0;\n\t\tthis._width = 1;\n\t\tthis._height = 1;\n\t\tthis._revisionUpdated = 0;\n\t\tthis._texture = Texture.from(this._canvas, {\n\t\t\tmipmap: MIPMAP_MODES.OFF,\n\t\t\tresolution,\n\t\t\tscaleMode: SCALE_MODES.NEAREST\n\t\t});\n\n\t\tconst characters = new Map<string, DynamicFontAtlasCharacter>();\n\t\tcharacters.set(\n\t\t\tCharacter.SPACE,\n\t\t\tthis.newChar(Character.SPACE, DynamicFontAtlasCharacterType.SPACE_R)\n\t\t);\n\t\tcharacters.set(\n\t\t\tCharacter.TAB,\n\t\t\tthis.newChar(Character.SOFT_TAB, DynamicFontAtlasCharacterType.SPACE_R)\n\t\t);\n\t\tcharacters.set(\n\t\t\tCharacter.DOTS,\n\t\t\tthis.newChar(Character.DOTS, DynamicFontAtlasCharacterType.LETTER_RNB)\n\t\t);\n\t\tfor (let i = 0, imax = Character.ASCII.length; i < imax; ++i) {\n\t\t\tconst ac = Character.ASCII[i];\n\t\t\tcharacters.set(ac, this.newChar(ac, DynamicFontAtlasCharacterType.LETTER_RNB));\n\t\t}\n\t\tthis._characters = characters;\n\t\tthis._createds = new Map<string, DynamicFontAtlasCharacter>();\n\t\tthis._revision = 1;\n\t}\n\n\tprotected toPadding(fontSize: number): number {\n\t\treturn Math.max(3, Math.ceil(fontSize * 0.2));\n\t}\n\n\tget id(): string {\n\t\treturn this._id;\n\t}\n\n\tget font(): DynamicFontAtlasFont {\n\t\treturn this._font;\n\t}\n\n\tget width(): number {\n\t\treturn this._width;\n\t}\n\n\tget height(): number {\n\t\treturn this._height;\n\t}\n\n\tget canvas(): HTMLCanvasElement | null {\n\t\treturn this._canvas;\n\t}\n\n\tget characters(): DynamicFontAtlasCharacters {\n\t\treturn this._characters;\n\t}\n\n\tget texture(): Texture {\n\t\treturn this._texture;\n\t}\n\n\tprotected newChar(\n\t\tcharacter: string,\n\t\ttype: DynamicFontAtlasCharacterType\n\t): DynamicFontAtlasCharacter {\n\t\tconst advance = this.getAdvance(character);\n\t\tconst padding = this._padding;\n\t\tconst width = Math.ceil(padding + advance + padding);\n\t\tconst height = this.font.height;\n\t\treturn new DynamicFontAtlasCharacter(\n\t\t\ttype,\n\t\t\tcharacter,\n\t\t\t-width, // Setting X and Y to zeros leads to render the character at the UV coordinate (0, 0).\n\t\t\t-height,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tadvance\n\t\t);\n\t}\n\n\tadd(characters: string, type: DynamicFontAtlasCharacterType): void {\n\t\tconst cs = this._characters;\n\t\tconst cds = this._createds;\n\t\tfor (let i = 0, imax = characters.length; i < imax; ) {\n\t\t\tif (characters.charCodeAt(i) <= 0xff) {\n\t\t\t\t// Ignore ASCII characters\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet j = i + 1;\n\t\t\tfor (; j < imax; ++j) {\n\t\t\t\tconst cc = characters.charCodeAt(j);\n\t\t\t\tif ((0xdc00 <= cc && cc <= 0xdfff) || (0xfe00 <= cc && cc <= 0xfe0f)) {\n\t\t\t\t\t// Low surrogate\n\t\t\t\t\t// Variation selector\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// Increment the reference count or create a new one\n\t\t\tconst nac = characters.substring(i, j);\n\t\t\tconst c = cs.get(nac);\n\t\t\tif (c != null) {\n\t\t\t\tif (!(c.type & DynamicFontAtlasCharacterType.RESERVED)) {\n\t\t\t\t\tif (c.ref === 0) {\n\t\t\t\t\t\tthis._unrefCount -= 1;\n\t\t\t\t\t}\n\t\t\t\t\tc.ref += 1;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst cd = cds.get(nac);\n\t\t\t\tif (cd != null) {\n\t\t\t\t\tcd.ref = 1;\n\t\t\t\t\tcs.set(nac, cd);\n\t\t\t\t} else {\n\t\t\t\t\tconst newCharacter = this.newChar(nac, type);\n\t\t\t\t\tcs.set(nac, newCharacter);\n\t\t\t\t\tcds.set(nac, newCharacter);\n\t\t\t\t}\n\t\t\t\tthis._revision += 1;\n\t\t\t}\n\t\t\t// Go to the next\n\t\t\ti = j;\n\t\t}\n\t}\n\n\tremove(characters: string): void {\n\t\tconst cs = this._characters;\n\t\tfor (let i = 0, imax = characters.length; i < imax; ) {\n\t\t\tif (characters.charCodeAt(i) <= 0xff) {\n\t\t\t\t// Ignore ASCII characters\n\t\t\t\ti += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet j = i + 1;\n\t\t\tfor (; j < imax; ++j) {\n\t\t\t\tconst cc = characters.charCodeAt(j);\n\t\t\t\tif ((0xdc00 <= cc && cc <= 0xdfff) || (0xfe00 <= cc && cc <= 0xfe0f)) {\n\t\t\t\t\t// Low surrogate\n\t\t\t\t\t// Variation selector\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// Decrement the reference count\n\t\t\tconst nac = characters.substring(i, j);\n\t\t\tconst c = cs.get(nac);\n\t\t\tif (c != null && 0 < c.ref && !(c.type & DynamicFontAtlasCharacterType.RESERVED)) {\n\t\t\t\tc.ref -= 1;\n\t\t\t\tif (c.ref === 0) {\n\t\t\t\t\tthis._unrefCount += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Go to the next\n\t\t\ti = j;\n\t\t}\n\t}\n\n\tprotected cleanup(): void {\n\t\tconst characters = this._characters;\n\t\tif (characters.size >> 1 <= this._unrefCount) {\n\t\t\tcharacters.forEach((char, id) => {\n\t\t\t\tif (char.ref <= 0) {\n\t\t\t\t\tcharacters.delete(id);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis._revision += 1;\n\t\t\tthis._unrefCount = 0;\n\t\t}\n\t}\n\n\tget(id: string): DynamicFontAtlasCharacter | undefined {\n\t\treturn this._characters.get(id);\n\t}\n\n\tgetAdvance(target: string): number {\n\t\tconst context = this.getContext();\n\t\tif (context != null) {\n\t\t\treturn context.measureText(target).width;\n\t\t}\n\t\treturn 0;\n\t}\n\n\tgetContext(): CanvasRenderingContext2D | null {\n\t\tlet context = this._context;\n\t\tif (context == null) {\n\t\t\tconst canvas = this._canvas;\n\t\t\tif (canvas != null) {\n\t\t\t\tcontext = this._context = canvas.getContext(\"2d\", { alpha: true });\n\t\t\t\tif (context == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst font = this._font;\n\t\tif (context.font !== font.id) {\n\t\t\tcontext.font = font.id;\n\t\t\tfont.id = context.font;\n\t\t\tcontext.textAlign = \"left\";\n\t\t\tcontext.textBaseline = \"alphabetic\";\n\t\t\tcontext.lineWidth = 0;\n\t\t\tcontext.lineCap = \"round\";\n\t\t\tcontext.lineJoin = \"miter\";\n\t\t\tcontext.miterLimit = 10;\n\t\t\tcontext.fillStyle = font.color;\n\t\t\tcontext.strokeStyle = \"#0000ff\";\n\t\t}\n\t\treturn context;\n\t}\n\n\tupdate(): boolean {\n\t\tthis.cleanup();\n\n\t\tif (this._revisionUpdated < this._revision) {\n\t\t\tthis._revisionUpdated = this._revision;\n\n\t\t\tconst canvas = this._canvas;\n\t\t\tif (canvas != null) {\n\t\t\t\tconst font = this._font;\n\t\t\t\tconst fontHeight = font.height;\n\t\t\t\tconst characters = this._characters;\n\t\t\t\tconst width = (this._width = this.toPowerOf2(\n\t\t\t\t\tMath.ceil(Math.sqrt(characters.size)) * fontHeight\n\t\t\t\t));\n\n\t\t\t\tconst offsetX = this._padding;\n\t\t\t\tlet x = 0;\n\t\t\t\tlet y = 0;\n\t\t\t\tcharacters.forEach((character) => {\n\t\t\t\t\tif (width <= x + character.width) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\ty += fontHeight;\n\t\t\t\t\t}\n\n\t\t\t\t\tcharacter.x = x;\n\t\t\t\t\tcharacter.y = y;\n\t\t\t\t\tcharacter.origin.x = x + offsetX;\n\n\t\t\t\t\tx += character.width;\n\t\t\t\t});\n\t\t\t\tconst height = (this._height = y + fontHeight);\n\n\t\t\t\t// Make an input canvas\n\t\t\t\t// Here, we need to reset the context because\n\t\t\t\t// context settings will be lost when we set the width/height.\n\t\t\t\tconst baseTexture = this._texture.baseTexture;\n\t\t\t\tconst resolution = baseTexture.resolution;\n\t\t\t\tconst realWidth = Math.ceil(width * resolution);\n\t\t\t\tconst realHeight = Math.ceil(height * resolution);\n\t\t\t\tcanvas.width = realWidth;\n\t\t\t\tcanvas.height = realHeight;\n\t\t\t\tconst context = this.getContext();\n\t\t\t\tif (context != null) {\n\t\t\t\t\tUtilFont.measure(context, font);\n\t\t\t\t\tconst offsetY = Math.round(\n\t\t\t\t\t\t(fontHeight - (font.ascent + font.descent)) * 0.5 + font.ascent\n\t\t\t\t\t);\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.scale(resolution, resolution);\n\t\t\t\t\tcontext.clearRect(0, 0, width, height);\n\t\t\t\t\tcharacters.forEach((character) => {\n\t\t\t\t\t\tcharacter.origin.y = character.y + offsetY;\n\t\t\t\t\t\tcontext.fillText(\n\t\t\t\t\t\t\tcharacter.character,\n\t\t\t\t\t\t\tcharacter.origin.x,\n\t\t\t\t\t\t\tcharacter.origin.y\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\t\t\t\tbaseTexture.setRealSize(realWidth, realHeight);\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tgetRevision(): number {\n\t\treturn this._revision;\n\t}\n\n\tgetRevisionUpdate(): number {\n\t\treturn this._revisionUpdated;\n\t}\n\n\tget length(): number {\n\t\treturn this._characters.size;\n\t}\n\n\tdestroy(): void {\n\t\tconst canvas = this._canvas;\n\t\tif (canvas != null) {\n\t\t\tthis._canvas = null;\n\t\t}\n\t\tthis._characters.clear();\n\t\tthis._createds.clear();\n\t\tthis._unrefCount = 0;\n\t}\n\n\ttoPowerOf2(size: number): number {\n\t\tlet result = 32;\n\t\twhile (result < size) {\n\t\t\tresult <<= 1;\n\t\t}\n\t\treturn result;\n\t}\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  import { DynamicFontAtlas } from "./dynamic-font-atlas";
6
+ import { DynamicFontAtlasCharacterType } from "./dynamic-font-atlas-character-type";
6
7
  var update = function (atlas) {
7
8
  atlas.update();
8
9
  };
@@ -36,7 +37,7 @@ var DynamicFontAtlases = /** @class */ (function () {
36
37
  atlas = new DynamicFontAtlas(fontId, fontSize, fontColor, this._resolution);
37
38
  colorToAtlas.set(fontColor, atlas);
38
39
  }
39
- atlas.add(targets);
40
+ atlas.add(targets, DynamicFontAtlasCharacterType.LETTER);
40
41
  };
41
42
  DynamicFontAtlases.prototype.remove = function (fontId, fontColor, targets) {
42
43
  var colorToAtlas = this._atlases.get(fontId);
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-font-atlases.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-font-atlases.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DApplicationLayerLike } from \"../d-application-layer-like\";\nimport { DynamicFontAtlas } from \"./dynamic-font-atlas\";\n\nconst update = (atlas: DynamicFontAtlas): void => {\n\tatlas.update();\n};\n\nconst updateAll = (colorToAltas: Map<number, DynamicFontAtlas>): void => {\n\tcolorToAltas.forEach(update);\n};\n\nconst destroy = (atlas: DynamicFontAtlas): void => {\n\tatlas.update();\n};\n\nconst destroyAll = (colorToAltas: Map<number, DynamicFontAtlas>): void => {\n\tcolorToAltas.forEach(destroy);\n};\n\nexport class DynamicFontAtlases {\n\tprotected _atlases: Map<string, Map<number, DynamicFontAtlas>>;\n\tprotected _resolution: number;\n\n\tconstructor(layer: DApplicationLayerLike) {\n\t\tthis._atlases = new Map<string, Map<number, DynamicFontAtlas>>();\n\t\tthis._resolution = layer.renderer.resolution;\n\n\t\tlayer.renderer.on(\"prerender\", (): void => {\n\t\t\tthis.update();\n\t\t});\n\t}\n\n\tadd(fontId: string, fontSize: number, fontColor: number, targets: string): void {\n\t\tconst atlases = this._atlases;\n\t\tlet colorToAtlas = atlases.get(fontId);\n\t\tif (colorToAtlas == null) {\n\t\t\tcolorToAtlas = new Map<number, DynamicFontAtlas>();\n\t\t\tatlases.set(fontId, colorToAtlas);\n\t\t}\n\t\tlet atlas = colorToAtlas.get(fontColor);\n\t\tif (atlas == null) {\n\t\t\tatlas = new DynamicFontAtlas(fontId, fontSize, fontColor, this._resolution);\n\t\t\tcolorToAtlas.set(fontColor, atlas);\n\t\t}\n\t\tatlas.add(targets);\n\t}\n\n\tremove(fontId: string, fontColor: number, targets: string): void {\n\t\tconst colorToAtlas = this._atlases.get(fontId);\n\t\tif (colorToAtlas != null) {\n\t\t\tconst atlas = colorToAtlas.get(fontColor);\n\t\t\tif (atlas != null) {\n\t\t\t\tatlas.remove(targets);\n\t\t\t}\n\t\t}\n\t}\n\n\tget(fontId: string, fontColor: number): DynamicFontAtlas | null {\n\t\tconst atlases = this._atlases;\n\t\tconst colorToAtlas = atlases.get(fontId);\n\t\tif (colorToAtlas == null) {\n\t\t\treturn null;\n\t\t}\n\t\tconst atlas = colorToAtlas.get(fontColor);\n\t\tif (atlas == null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn atlas;\n\t}\n\n\tupdate(): void {\n\t\tthis._atlases.forEach(updateAll);\n\t}\n\n\tdestroy(): void {\n\t\tconst atlases = this._atlases;\n\t\tatlases.forEach(destroyAll);\n\t\tatlases.clear();\n\t}\n}\n"]}
1
+ {"version":3,"file":"dynamic-font-atlases.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-font-atlases.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DApplicationLayerLike } from \"../d-application-layer-like\";\nimport { DynamicFontAtlas } from \"./dynamic-font-atlas\";\nimport { DynamicFontAtlasCharacterType } from \"./dynamic-font-atlas-character-type\";\n\nconst update = (atlas: DynamicFontAtlas): void => {\n\tatlas.update();\n};\n\nconst updateAll = (colorToAltas: Map<number, DynamicFontAtlas>): void => {\n\tcolorToAltas.forEach(update);\n};\n\nconst destroy = (atlas: DynamicFontAtlas): void => {\n\tatlas.update();\n};\n\nconst destroyAll = (colorToAltas: Map<number, DynamicFontAtlas>): void => {\n\tcolorToAltas.forEach(destroy);\n};\n\nexport class DynamicFontAtlases {\n\tprotected _atlases: Map<string, Map<number, DynamicFontAtlas>>;\n\tprotected _resolution: number;\n\n\tconstructor(layer: DApplicationLayerLike) {\n\t\tthis._atlases = new Map<string, Map<number, DynamicFontAtlas>>();\n\t\tthis._resolution = layer.renderer.resolution;\n\n\t\tlayer.renderer.on(\"prerender\", (): void => {\n\t\t\tthis.update();\n\t\t});\n\t}\n\n\tadd(fontId: string, fontSize: number, fontColor: number, targets: string): void {\n\t\tconst atlases = this._atlases;\n\t\tlet colorToAtlas = atlases.get(fontId);\n\t\tif (colorToAtlas == null) {\n\t\t\tcolorToAtlas = new Map<number, DynamicFontAtlas>();\n\t\t\tatlases.set(fontId, colorToAtlas);\n\t\t}\n\t\tlet atlas = colorToAtlas.get(fontColor);\n\t\tif (atlas == null) {\n\t\t\tatlas = new DynamicFontAtlas(fontId, fontSize, fontColor, this._resolution);\n\t\t\tcolorToAtlas.set(fontColor, atlas);\n\t\t}\n\t\tatlas.add(targets, DynamicFontAtlasCharacterType.LETTER);\n\t}\n\n\tremove(fontId: string, fontColor: number, targets: string): void {\n\t\tconst colorToAtlas = this._atlases.get(fontId);\n\t\tif (colorToAtlas != null) {\n\t\t\tconst atlas = colorToAtlas.get(fontColor);\n\t\t\tif (atlas != null) {\n\t\t\t\tatlas.remove(targets);\n\t\t\t}\n\t\t}\n\t}\n\n\tget(fontId: string, fontColor: number): DynamicFontAtlas | null {\n\t\tconst atlases = this._atlases;\n\t\tconst colorToAtlas = atlases.get(fontId);\n\t\tif (colorToAtlas == null) {\n\t\t\treturn null;\n\t\t}\n\t\tconst atlas = colorToAtlas.get(fontColor);\n\t\tif (atlas == null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn atlas;\n\t}\n\n\tupdate(): void {\n\t\tthis._atlases.forEach(updateAll);\n\t}\n\n\tdestroy(): void {\n\t\tconst atlases = this._atlases;\n\t\tatlases.forEach(destroyAll);\n\t\tatlases.clear();\n\t}\n}\n"]}
@@ -2,12 +2,11 @@
2
2
  * Copyright (C) 2019 Toshiba Corporation
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import { ASCII_CHARACTERS } from "./ascii";
5
+ import { Character } from "./character";
6
6
  import { DynamicFontAtlasCharacter } from "./dynamic-font-atlas-character";
7
7
  import { DynamicFontAtlasCharacterType } from "./dynamic-font-atlas-character-type";
8
8
  import { DynamicSDFFontAtlasFont } from "./dynamic-sdf-font-atlas-font";
9
9
  import { DynamicSDFFontGenerator } from "./dynamic-sdf-font-generator";
10
- import { UtilCharacterIterator } from "./util-character-iterator";
11
10
  import { UtilFont } from "./util-font";
12
11
  var DynamicSDFFontAtlas = /** @class */ (function () {
13
12
  function DynamicSDFFontAtlas(fontFamily) {
@@ -15,10 +14,17 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
15
14
  this._generator = DynamicSDFFontGenerator.getInstance().init();
16
15
  this._canvas = document.createElement("canvas");
17
16
  this._font = new DynamicSDFFontAtlasFont(fontFamily);
18
- this._characters = {};
19
- this._length = 0;
20
17
  this._width = 1;
21
18
  this._height = 1;
19
+ var characters = new Map();
20
+ characters.set(Character.SPACE, this.newChar(Character.SPACE, DynamicFontAtlasCharacterType.SPACE_R));
21
+ characters.set(Character.TAB, this.newChar(Character.SOFT_TAB, DynamicFontAtlasCharacterType.SPACE_R));
22
+ characters.set(Character.DOTS, this.newChar(Character.DOTS, DynamicFontAtlasCharacterType.LETTER_RNB));
23
+ for (var i = 0, imax = Character.ASCII.length; i < imax; ++i) {
24
+ var ac = Character.ASCII[i];
25
+ characters.set(ac, this.newChar(ac, DynamicFontAtlasCharacterType.LETTER_RNB));
26
+ }
27
+ this._characters = characters;
22
28
  this._isDirty = true;
23
29
  }
24
30
  Object.defineProperty(DynamicSDFFontAtlas.prototype, "id", {
@@ -76,143 +82,109 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
76
82
  configurable: true
77
83
  });
78
84
  DynamicSDFFontAtlas.prototype.begin = function () {
79
- this._length = 0;
80
- var characters = this._characters;
81
- for (var id in characters) {
82
- characters[id].ref = 0;
83
- }
85
+ this._characters.forEach(function (character) {
86
+ if (!(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
87
+ character.ref = 0;
88
+ }
89
+ });
84
90
  };
85
91
  DynamicSDFFontAtlas.prototype.end = function () {
92
+ var _this = this;
86
93
  var characters = this._characters;
87
- for (var id in characters) {
88
- var data = characters[id];
89
- if (data.ref <= 0) {
90
- data.life -= 1;
91
- if (data.life <= 0) {
92
- delete characters[id];
93
- this._isDirty = true;
94
+ characters.forEach(function (character, id) {
95
+ if (character.ref <= 0 && !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
96
+ character.life -= 1;
97
+ if (character.life <= 0) {
98
+ characters.delete(id);
99
+ _this._isDirty = true;
94
100
  }
95
101
  }
96
- }
102
+ });
97
103
  };
98
- DynamicSDFFontAtlas.prototype.addAscii = function () {
99
- this.addChar(" ", " ", DynamicFontAtlasCharacterType.SPACE_R);
100
- this.addChar("\t", " ", DynamicFontAtlasCharacterType.SPACE_R);
101
- this.addChar("...", "...", DynamicFontAtlasCharacterType.LETTER_RNB);
102
- for (var i = 0, imax = ASCII_CHARACTERS.length; i < imax; ++i) {
103
- var char = ASCII_CHARACTERS[i];
104
- this.addChar(char, char, DynamicFontAtlasCharacterType.LETTER_RNB);
105
- }
104
+ DynamicSDFFontAtlas.prototype.newChar = function (character, type) {
105
+ return new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);
106
106
  };
107
- DynamicSDFFontAtlas.prototype.addChar = function (id, character, type) {
108
- var characters = this._characters;
109
- if (!this.isIgnored(character)) {
110
- var data = characters[id];
107
+ DynamicSDFFontAtlas.prototype.add = function (characters, nacharacters) {
108
+ var cs = this._characters;
109
+ for (var i = 0, imax = nacharacters.length; i < imax; ++i) {
110
+ var nac = nacharacters[i];
111
+ var data = cs.get(nac);
111
112
  if (data != null) {
112
- if (data.ref <= 0) {
113
- this._length += 1;
114
- }
115
113
  data.ref += 1;
116
114
  }
117
115
  else {
118
- characters[id] = new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);
119
- this._length += 1;
116
+ cs.set(nac, this.newChar(nac, DynamicFontAtlasCharacterType.LETTER));
120
117
  this._isDirty = true;
121
118
  }
122
119
  }
123
120
  };
124
- DynamicSDFFontAtlas.prototype.isIgnored = function (character) {
125
- switch (character) {
126
- case "\n": // Line feed
127
- return true;
128
- case "\r": // Carriage return
129
- return true;
130
- case "\v": // Vertical tab
131
- return true;
132
- case "\f": // Form feed
133
- return true;
134
- case "\u0085": // Next line
135
- return true;
136
- }
137
- return false;
138
- };
139
- DynamicSDFFontAtlas.prototype.add = function (characters, type) {
140
- if (type === void 0) { type = DynamicFontAtlasCharacterType.LETTER; }
141
- var iterator = UtilCharacterIterator.from(characters);
142
- while (iterator.hasNext()) {
143
- var character = iterator.next();
144
- this.addChar(character, character, type);
145
- }
146
- };
147
121
  DynamicSDFFontAtlas.prototype.get = function (id) {
148
- return this._characters[id];
122
+ return this._characters.get(id);
149
123
  };
150
124
  DynamicSDFFontAtlas.prototype.update = function () {
151
125
  if (this._isDirty) {
152
126
  var canvas = this._canvas;
153
127
  var generator = this._generator;
154
128
  if (canvas != null && generator != null) {
155
- var context = canvas.getContext("2d");
156
- if (context != null) {
129
+ var context_1 = canvas.getContext("2d");
130
+ if (context_1 != null) {
157
131
  this._isDirty = false;
158
132
  var font = this._font;
133
+ var fontSize_1 = font.size + 14;
159
134
  var characters = this._characters;
160
- var characterSize = font.size + 14;
161
- var width = this.toPowerOf2(Math.ceil(Math.sqrt(this._length)) * characterSize);
162
- this._width = width;
135
+ var width_1 = this.toPowerOf2(Math.ceil(Math.sqrt(characters.size)) * fontSize_1);
136
+ this._width = width_1;
163
137
  var fontStyle = (font.italic ? "italic " : "") + (font.size + "px ") + font.id;
164
- context.font = fontStyle;
165
- context.textAlign = "left";
166
- context.textBaseline = "alphabetic";
167
- context.lineWidth = 0;
168
- context.lineCap = "round";
169
- context.lineJoin = "miter";
170
- context.miterLimit = 10;
171
- context.fillStyle = "#FFFFFF";
172
- UtilFont.measure(context, font);
173
- var offsetX = 7;
174
- var offsetY = Math.round((characterSize - (font.ascent + font.descent)) * 0.5 + font.ascent);
175
- var x = 0;
176
- var y = 0;
177
- for (var id in characters) {
178
- var data = characters[id];
179
- var advance = context.measureText(data.character).width;
180
- var characterWidth = Math.ceil(offsetX + advance + offsetX);
181
- var characterHeight = characterSize;
182
- if (width <= x + characterWidth) {
183
- x = 0;
184
- y += characterSize;
138
+ context_1.font = fontStyle;
139
+ context_1.textAlign = "left";
140
+ context_1.textBaseline = "alphabetic";
141
+ context_1.lineWidth = 0;
142
+ context_1.lineCap = "round";
143
+ context_1.lineJoin = "miter";
144
+ context_1.miterLimit = 10;
145
+ context_1.fillStyle = "#FFFFFF";
146
+ UtilFont.measure(context_1, font);
147
+ var offsetX_1 = 7;
148
+ var offsetY_1 = Math.round((fontSize_1 - (font.ascent + font.descent)) * 0.5 + font.ascent);
149
+ var x_1 = 0;
150
+ var y_1 = 0;
151
+ characters.forEach(function (character) {
152
+ var advance = context_1.measureText(character.character).width;
153
+ var characterWidth = Math.ceil(offsetX_1 + advance + offsetX_1);
154
+ var characterHeight = fontSize_1;
155
+ if (width_1 <= x_1 + characterWidth) {
156
+ x_1 = 0;
157
+ y_1 += fontSize_1;
185
158
  }
186
- data.x = x;
187
- data.y = y;
188
- data.width = characterWidth;
189
- data.height = characterHeight;
190
- data.advance = advance;
191
- data.origin.x = x + offsetX;
192
- data.origin.y = y + offsetY;
193
- x += characterWidth;
194
- }
195
- var height = (this._height = y + characterSize);
159
+ character.x = x_1;
160
+ character.y = y_1;
161
+ character.width = characterWidth;
162
+ character.height = characterHeight;
163
+ character.advance = advance;
164
+ character.origin.x = x_1 + offsetX_1;
165
+ character.origin.y = y_1 + offsetY_1;
166
+ x_1 += characterWidth;
167
+ });
168
+ var height = (this._height = y_1 + fontSize_1);
196
169
  // Make a input canvas
197
170
  // Here, we need to reset the context because
198
171
  // context settings will be lost when we set the width/height.
199
- canvas.width = width;
172
+ canvas.width = width_1;
200
173
  canvas.height = height;
201
- context.font = fontStyle;
202
- context.textAlign = "left";
203
- context.textBaseline = "alphabetic";
204
- context.lineWidth = 0;
205
- context.lineCap = "round";
206
- context.lineJoin = "miter";
207
- context.miterLimit = 10;
208
- context.fillStyle = "#FFFFFF";
209
- context.clearRect(0, 0, width, height);
210
- for (var id in characters) {
211
- var data = characters[id];
212
- context.fillText(data.character, data.origin.x, data.origin.y);
213
- }
174
+ context_1.font = fontStyle;
175
+ context_1.textAlign = "left";
176
+ context_1.textBaseline = "alphabetic";
177
+ context_1.lineWidth = 0;
178
+ context_1.lineCap = "round";
179
+ context_1.lineJoin = "miter";
180
+ context_1.miterLimit = 10;
181
+ context_1.fillStyle = "#FFFFFF";
182
+ context_1.clearRect(0, 0, width_1, height);
183
+ characters.forEach(function (character) {
184
+ context_1.fillText(character.character, character.origin.x, character.origin.y);
185
+ });
214
186
  // Convert to SDF font texture
215
- generator.updateTexture(width, height, canvas);
187
+ generator.updateTexture(width_1, height, canvas);
216
188
  generator.render();
217
189
  generator.read(canvas);
218
190
  return true;
@@ -223,7 +195,7 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
223
195
  };
224
196
  Object.defineProperty(DynamicSDFFontAtlas.prototype, "length", {
225
197
  get: function () {
226
- return this._length;
198
+ return this._characters.size;
227
199
  },
228
200
  enumerable: false,
229
201
  configurable: true
@@ -248,10 +220,7 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
248
220
  if (canvas != null) {
249
221
  this._canvas = null;
250
222
  }
251
- var characters = this._characters;
252
- for (var id in characters) {
253
- delete characters[id];
254
- }
223
+ this._characters.clear();
255
224
  };
256
225
  DynamicSDFFontAtlas.prototype.toPowerOf2 = function (size) {
257
226
  var result = 32;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-sdf-font-atlas.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-sdf-font-atlas.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ASCII_CHARACTERS } from \"./ascii\";\nimport { DynamicFontAtlasCharacter } from \"./dynamic-font-atlas-character\";\nimport { DynamicFontAtlasCharacterType } from \"./dynamic-font-atlas-character-type\";\nimport { DynamicFontAtlasCharacters } from \"./dynamic-font-atlas-characters\";\nimport { DynamicSDFFontAtlasFont } from \"./dynamic-sdf-font-atlas-font\";\nimport { DynamicSDFFontGenerator } from \"./dynamic-sdf-font-generator\";\nimport { UtilCharacterIterator } from \"./util-character-iterator\";\nimport { UtilFont } from \"./util-font\";\n\nexport interface DynamicSDFFontAtlasJson {\n\twidth: number;\n\theight: number;\n\tfont: DynamicSDFFontAtlasFont;\n\tcharacters: DynamicFontAtlasCharacters;\n}\n\nexport class DynamicSDFFontAtlas {\n\tprotected _id: string;\n\tprotected _generator: DynamicSDFFontGenerator | null;\n\tprotected _canvas: HTMLCanvasElement | null;\n\tprotected _font: DynamicSDFFontAtlasFont;\n\tprotected _characters: DynamicFontAtlasCharacters;\n\tprotected _length: number;\n\tprotected _width: number;\n\tprotected _height: number;\n\tprotected _isDirty: boolean;\n\n\tconstructor(fontFamily: string) {\n\t\tthis._id = `font-atlas:${fontFamily}`;\n\t\tthis._generator = DynamicSDFFontGenerator.getInstance().init();\n\t\tthis._canvas = document.createElement(\"canvas\");\n\t\tthis._font = new DynamicSDFFontAtlasFont(fontFamily);\n\t\tthis._characters = {};\n\t\tthis._length = 0;\n\t\tthis._width = 1;\n\t\tthis._height = 1;\n\t\tthis._isDirty = true;\n\t}\n\n\tget id(): string {\n\t\treturn this._id;\n\t}\n\n\tget font(): DynamicSDFFontAtlasFont {\n\t\treturn this._font;\n\t}\n\n\tset font(font: DynamicSDFFontAtlasFont) {\n\t\tthis._font.id = font.id;\n\t\tthis._font.size = font.size;\n\t\tthis._font.italic = font.italic;\n\t}\n\n\tget width(): number {\n\t\treturn this._width;\n\t}\n\n\tget height(): number {\n\t\treturn this._height;\n\t}\n\n\tget canvas(): HTMLCanvasElement | null {\n\t\treturn this._canvas;\n\t}\n\n\tget generator(): DynamicSDFFontGenerator | null {\n\t\treturn this._generator;\n\t}\n\n\tget characters(): DynamicFontAtlasCharacters {\n\t\treturn this._characters;\n\t}\n\n\tbegin(): void {\n\t\tthis._length = 0;\n\t\tconst characters = this._characters;\n\t\tfor (const id in characters) {\n\t\t\tcharacters[id].ref = 0;\n\t\t}\n\t}\n\n\tend(): void {\n\t\tconst characters = this._characters;\n\t\tfor (const id in characters) {\n\t\t\tconst data = characters[id];\n\t\t\tif (data.ref <= 0) {\n\t\t\t\tdata.life -= 1;\n\t\t\t\tif (data.life <= 0) {\n\t\t\t\t\tdelete characters[id];\n\t\t\t\t\tthis._isDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\taddAscii(): void {\n\t\tthis.addChar(\" \", \" \", DynamicFontAtlasCharacterType.SPACE_R);\n\t\tthis.addChar(\"\\t\", \" \", DynamicFontAtlasCharacterType.SPACE_R);\n\t\tthis.addChar(\"...\", \"...\", DynamicFontAtlasCharacterType.LETTER_RNB);\n\t\tfor (let i = 0, imax = ASCII_CHARACTERS.length; i < imax; ++i) {\n\t\t\tconst char = ASCII_CHARACTERS[i];\n\t\t\tthis.addChar(char, char, DynamicFontAtlasCharacterType.LETTER_RNB);\n\t\t}\n\t}\n\n\taddChar(id: string, character: string, type: DynamicFontAtlasCharacterType): void {\n\t\tconst characters = this._characters;\n\t\tif (!this.isIgnored(character)) {\n\t\t\tconst data = characters[id];\n\t\t\tif (data != null) {\n\t\t\t\tif (data.ref <= 0) {\n\t\t\t\t\tthis._length += 1;\n\t\t\t\t}\n\t\t\t\tdata.ref += 1;\n\t\t\t} else {\n\t\t\t\tcharacters[id] = new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);\n\t\t\t\tthis._length += 1;\n\t\t\t\tthis._isDirty = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected isIgnored(character: string): boolean {\n\t\tswitch (character) {\n\t\t\tcase \"\\n\": // Line feed\n\t\t\t\treturn true;\n\t\t\tcase \"\\r\": // Carriage return\n\t\t\t\treturn true;\n\t\t\tcase \"\\v\": // Vertical tab\n\t\t\t\treturn true;\n\t\t\tcase \"\\f\": // Form feed\n\t\t\t\treturn true;\n\t\t\tcase \"\\u0085\": // Next line\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tadd(\n\t\tcharacters: string,\n\t\ttype: DynamicFontAtlasCharacterType = DynamicFontAtlasCharacterType.LETTER\n\t): void {\n\t\tconst iterator = UtilCharacterIterator.from(characters);\n\t\twhile (iterator.hasNext()) {\n\t\t\tconst character = iterator.next();\n\t\t\tthis.addChar(character, character, type);\n\t\t}\n\t}\n\n\tget(id: string): DynamicFontAtlasCharacter | undefined {\n\t\treturn this._characters[id];\n\t}\n\n\tupdate(): boolean {\n\t\tif (this._isDirty) {\n\t\t\tconst canvas = this._canvas;\n\t\t\tconst generator = this._generator;\n\t\t\tif (canvas != null && generator != null) {\n\t\t\t\tconst context = canvas.getContext(\"2d\");\n\t\t\t\tif (context != null) {\n\t\t\t\t\tthis._isDirty = false;\n\n\t\t\t\t\tconst font = this._font;\n\t\t\t\t\tconst characters = this._characters;\n\t\t\t\t\tconst characterSize = font.size + 14;\n\t\t\t\t\tconst width = this.toPowerOf2(\n\t\t\t\t\t\tMath.ceil(Math.sqrt(this._length)) * characterSize\n\t\t\t\t\t);\n\t\t\t\t\tthis._width = width;\n\t\t\t\t\tconst fontStyle =\n\t\t\t\t\t\t(font.italic ? \"italic \" : \"\") + (font.size + \"px \") + font.id;\n\n\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\tcontext.textAlign = \"left\";\n\t\t\t\t\tcontext.textBaseline = \"alphabetic\";\n\t\t\t\t\tcontext.lineWidth = 0;\n\t\t\t\t\tcontext.lineCap = \"round\";\n\t\t\t\t\tcontext.lineJoin = \"miter\";\n\t\t\t\t\tcontext.miterLimit = 10;\n\t\t\t\t\tcontext.fillStyle = \"#FFFFFF\";\n\t\t\t\t\tUtilFont.measure(context, font);\n\n\t\t\t\t\tconst offsetX = 7;\n\t\t\t\t\tconst offsetY = Math.round(\n\t\t\t\t\t\t(characterSize - (font.ascent + font.descent)) * 0.5 + font.ascent\n\t\t\t\t\t);\n\t\t\t\t\tlet x = 0;\n\t\t\t\t\tlet y = 0;\n\t\t\t\t\tfor (const id in characters) {\n\t\t\t\t\t\tconst data = characters[id];\n\t\t\t\t\t\tconst advance = context.measureText(data.character).width;\n\t\t\t\t\t\tconst characterWidth = Math.ceil(offsetX + advance + offsetX);\n\t\t\t\t\t\tconst characterHeight = characterSize;\n\t\t\t\t\t\tif (width <= x + characterWidth) {\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\ty += characterSize;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata.x = x;\n\t\t\t\t\t\tdata.y = y;\n\t\t\t\t\t\tdata.width = characterWidth;\n\t\t\t\t\t\tdata.height = characterHeight;\n\t\t\t\t\t\tdata.advance = advance;\n\t\t\t\t\t\tdata.origin.x = x + offsetX;\n\t\t\t\t\t\tdata.origin.y = y + offsetY;\n\n\t\t\t\t\t\tx += characterWidth;\n\t\t\t\t\t}\n\t\t\t\t\tconst height = (this._height = y + characterSize);\n\n\t\t\t\t\t// Make a input canvas\n\t\t\t\t\t// Here, we need to reset the context because\n\t\t\t\t\t// context settings will be lost when we set the width/height.\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\tcontext.textAlign = \"left\";\n\t\t\t\t\tcontext.textBaseline = \"alphabetic\";\n\t\t\t\t\tcontext.lineWidth = 0;\n\t\t\t\t\tcontext.lineCap = \"round\";\n\t\t\t\t\tcontext.lineJoin = \"miter\";\n\t\t\t\t\tcontext.miterLimit = 10;\n\t\t\t\t\tcontext.fillStyle = \"#FFFFFF\";\n\t\t\t\t\tcontext.clearRect(0, 0, width, height);\n\t\t\t\t\tfor (const id in characters) {\n\t\t\t\t\t\tconst data = characters[id];\n\t\t\t\t\t\tcontext.fillText(data.character, data.origin.x, data.origin.y);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Convert to SDF font texture\n\t\t\t\t\tgenerator.updateTexture(width, height, canvas);\n\t\t\t\t\tgenerator.render();\n\t\t\t\t\tgenerator.read(canvas);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tget length(): number {\n\t\treturn this._length;\n\t}\n\n\ttoJson(): DynamicSDFFontAtlasJson {\n\t\treturn {\n\t\t\twidth: this._width,\n\t\t\theight: this._height,\n\t\t\tfont: this._font,\n\t\t\tcharacters: this._characters\n\t\t};\n\t}\n\n\ttoString(): string {\n\t\treturn JSON.stringify(this.toJson());\n\t}\n\n\tdestroy(): void {\n\t\tconst generator = this._generator;\n\t\tif (generator != null) {\n\t\t\tthis._generator = null;\n\t\t}\n\n\t\tconst canvas = this._canvas;\n\t\tif (canvas != null) {\n\t\t\tthis._canvas = null;\n\t\t}\n\n\t\tconst characters = this._characters;\n\t\tfor (const id in characters) {\n\t\t\tdelete characters[id];\n\t\t}\n\t}\n\n\tprotected toPowerOf2(size: number): number {\n\t\tlet result = 32;\n\t\twhile (result < size) {\n\t\t\tresult <<= 1;\n\t\t}\n\t\treturn result;\n\t}\n}\n"]}
1
+ {"version":3,"file":"dynamic-sdf-font-atlas.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-sdf-font-atlas.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Character } from \"./character\";\nimport { DynamicFontAtlasCharacter } from \"./dynamic-font-atlas-character\";\nimport { DynamicFontAtlasCharacterType } from \"./dynamic-font-atlas-character-type\";\nimport { DynamicFontAtlasCharacters } from \"./dynamic-font-atlas-characters\";\nimport { DynamicSDFFontAtlasFont } from \"./dynamic-sdf-font-atlas-font\";\nimport { DynamicSDFFontGenerator } from \"./dynamic-sdf-font-generator\";\nimport { UtilFont } from \"./util-font\";\n\nexport interface DynamicSDFFontAtlasJson {\n\twidth: number;\n\theight: number;\n\tfont: DynamicSDFFontAtlasFont;\n\tcharacters: DynamicFontAtlasCharacters;\n}\n\nexport class DynamicSDFFontAtlas {\n\tprotected _id: string;\n\tprotected _generator: DynamicSDFFontGenerator | null;\n\tprotected _canvas: HTMLCanvasElement | null;\n\tprotected _font: DynamicSDFFontAtlasFont;\n\tprotected _characters: DynamicFontAtlasCharacters;\n\tprotected _width: number;\n\tprotected _height: number;\n\tprotected _isDirty: boolean;\n\n\tconstructor(fontFamily: string) {\n\t\tthis._id = `font-atlas:${fontFamily}`;\n\t\tthis._generator = DynamicSDFFontGenerator.getInstance().init();\n\t\tthis._canvas = document.createElement(\"canvas\");\n\t\tthis._font = new DynamicSDFFontAtlasFont(fontFamily);\n\t\tthis._width = 1;\n\t\tthis._height = 1;\n\n\t\tconst characters = new Map<string, DynamicFontAtlasCharacter>();\n\t\tcharacters.set(\n\t\t\tCharacter.SPACE,\n\t\t\tthis.newChar(Character.SPACE, DynamicFontAtlasCharacterType.SPACE_R)\n\t\t);\n\t\tcharacters.set(\n\t\t\tCharacter.TAB,\n\t\t\tthis.newChar(Character.SOFT_TAB, DynamicFontAtlasCharacterType.SPACE_R)\n\t\t);\n\t\tcharacters.set(\n\t\t\tCharacter.DOTS,\n\t\t\tthis.newChar(Character.DOTS, DynamicFontAtlasCharacterType.LETTER_RNB)\n\t\t);\n\t\tfor (let i = 0, imax = Character.ASCII.length; i < imax; ++i) {\n\t\t\tconst ac = Character.ASCII[i];\n\t\t\tcharacters.set(ac, this.newChar(ac, DynamicFontAtlasCharacterType.LETTER_RNB));\n\t\t}\n\t\tthis._characters = characters;\n\t\tthis._isDirty = true;\n\t}\n\n\tget id(): string {\n\t\treturn this._id;\n\t}\n\n\tget font(): DynamicSDFFontAtlasFont {\n\t\treturn this._font;\n\t}\n\n\tset font(font: DynamicSDFFontAtlasFont) {\n\t\tthis._font.id = font.id;\n\t\tthis._font.size = font.size;\n\t\tthis._font.italic = font.italic;\n\t}\n\n\tget width(): number {\n\t\treturn this._width;\n\t}\n\n\tget height(): number {\n\t\treturn this._height;\n\t}\n\n\tget canvas(): HTMLCanvasElement | null {\n\t\treturn this._canvas;\n\t}\n\n\tget generator(): DynamicSDFFontGenerator | null {\n\t\treturn this._generator;\n\t}\n\n\tget characters(): DynamicFontAtlasCharacters {\n\t\treturn this._characters;\n\t}\n\n\tbegin(): void {\n\t\tthis._characters.forEach((character) => {\n\t\t\tif (!(character.type & DynamicFontAtlasCharacterType.RESERVED)) {\n\t\t\t\tcharacter.ref = 0;\n\t\t\t}\n\t\t});\n\t}\n\n\tend(): void {\n\t\tconst characters = this._characters;\n\t\tcharacters.forEach((character, id) => {\n\t\t\tif (character.ref <= 0 && !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {\n\t\t\t\tcharacter.life -= 1;\n\t\t\t\tif (character.life <= 0) {\n\t\t\t\t\tcharacters.delete(id);\n\t\t\t\t\tthis._isDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected newChar(\n\t\tcharacter: string,\n\t\ttype: DynamicFontAtlasCharacterType\n\t): DynamicFontAtlasCharacter {\n\t\treturn new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);\n\t}\n\n\tadd(characters: string[], nacharacters: string[]): void {\n\t\tconst cs = this._characters;\n\t\tfor (let i = 0, imax = nacharacters.length; i < imax; ++i) {\n\t\t\tconst nac = nacharacters[i];\n\t\t\tconst data = cs.get(nac);\n\t\t\tif (data != null) {\n\t\t\t\tdata.ref += 1;\n\t\t\t} else {\n\t\t\t\tcs.set(nac, this.newChar(nac, DynamicFontAtlasCharacterType.LETTER));\n\t\t\t\tthis._isDirty = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tget(id: string): DynamicFontAtlasCharacter | undefined {\n\t\treturn this._characters.get(id);\n\t}\n\n\tupdate(): boolean {\n\t\tif (this._isDirty) {\n\t\t\tconst canvas = this._canvas;\n\t\t\tconst generator = this._generator;\n\t\t\tif (canvas != null && generator != null) {\n\t\t\t\tconst context = canvas.getContext(\"2d\");\n\t\t\t\tif (context != null) {\n\t\t\t\t\tthis._isDirty = false;\n\n\t\t\t\t\tconst font = this._font;\n\t\t\t\t\tconst fontSize = font.size + 14;\n\t\t\t\t\tconst characters = this._characters;\n\t\t\t\t\tconst width = this.toPowerOf2(Math.ceil(Math.sqrt(characters.size)) * fontSize);\n\t\t\t\t\tthis._width = width;\n\t\t\t\t\tconst fontStyle =\n\t\t\t\t\t\t(font.italic ? \"italic \" : \"\") + (font.size + \"px \") + font.id;\n\n\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\tcontext.textAlign = \"left\";\n\t\t\t\t\tcontext.textBaseline = \"alphabetic\";\n\t\t\t\t\tcontext.lineWidth = 0;\n\t\t\t\t\tcontext.lineCap = \"round\";\n\t\t\t\t\tcontext.lineJoin = \"miter\";\n\t\t\t\t\tcontext.miterLimit = 10;\n\t\t\t\t\tcontext.fillStyle = \"#FFFFFF\";\n\t\t\t\t\tUtilFont.measure(context, font);\n\n\t\t\t\t\tconst offsetX = 7;\n\t\t\t\t\tconst offsetY = Math.round(\n\t\t\t\t\t\t(fontSize - (font.ascent + font.descent)) * 0.5 + font.ascent\n\t\t\t\t\t);\n\t\t\t\t\tlet x = 0;\n\t\t\t\t\tlet y = 0;\n\t\t\t\t\tcharacters.forEach((character) => {\n\t\t\t\t\t\tconst advance = context.measureText(character.character).width;\n\t\t\t\t\t\tconst characterWidth = Math.ceil(offsetX + advance + offsetX);\n\t\t\t\t\t\tconst characterHeight = fontSize;\n\t\t\t\t\t\tif (width <= x + characterWidth) {\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t\ty += fontSize;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcharacter.x = x;\n\t\t\t\t\t\tcharacter.y = y;\n\t\t\t\t\t\tcharacter.width = characterWidth;\n\t\t\t\t\t\tcharacter.height = characterHeight;\n\t\t\t\t\t\tcharacter.advance = advance;\n\t\t\t\t\t\tcharacter.origin.x = x + offsetX;\n\t\t\t\t\t\tcharacter.origin.y = y + offsetY;\n\n\t\t\t\t\t\tx += characterWidth;\n\t\t\t\t\t});\n\t\t\t\t\tconst height = (this._height = y + fontSize);\n\n\t\t\t\t\t// Make a input canvas\n\t\t\t\t\t// Here, we need to reset the context because\n\t\t\t\t\t// context settings will be lost when we set the width/height.\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tcontext.font = fontStyle;\n\t\t\t\t\tcontext.textAlign = \"left\";\n\t\t\t\t\tcontext.textBaseline = \"alphabetic\";\n\t\t\t\t\tcontext.lineWidth = 0;\n\t\t\t\t\tcontext.lineCap = \"round\";\n\t\t\t\t\tcontext.lineJoin = \"miter\";\n\t\t\t\t\tcontext.miterLimit = 10;\n\t\t\t\t\tcontext.fillStyle = \"#FFFFFF\";\n\t\t\t\t\tcontext.clearRect(0, 0, width, height);\n\t\t\t\t\tcharacters.forEach((character) => {\n\t\t\t\t\t\tcontext.fillText(\n\t\t\t\t\t\t\tcharacter.character,\n\t\t\t\t\t\t\tcharacter.origin.x,\n\t\t\t\t\t\t\tcharacter.origin.y\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Convert to SDF font texture\n\t\t\t\t\tgenerator.updateTexture(width, height, canvas);\n\t\t\t\t\tgenerator.render();\n\t\t\t\t\tgenerator.read(canvas);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tget length(): number {\n\t\treturn this._characters.size;\n\t}\n\n\ttoJson(): DynamicSDFFontAtlasJson {\n\t\treturn {\n\t\t\twidth: this._width,\n\t\t\theight: this._height,\n\t\t\tfont: this._font,\n\t\t\tcharacters: this._characters\n\t\t};\n\t}\n\n\ttoString(): string {\n\t\treturn JSON.stringify(this.toJson());\n\t}\n\n\tdestroy(): void {\n\t\tconst generator = this._generator;\n\t\tif (generator != null) {\n\t\t\tthis._generator = null;\n\t\t}\n\n\t\tconst canvas = this._canvas;\n\t\tif (canvas != null) {\n\t\t\tthis._canvas = null;\n\t\t}\n\n\t\tthis._characters.clear();\n\t}\n\n\tprotected toPowerOf2(size: number): number {\n\t\tlet result = 32;\n\t\twhile (result < size) {\n\t\t\tresult <<= 1;\n\t\t}\n\t\treturn result;\n\t}\n}\n"]}
@@ -6,52 +6,45 @@ import { DynamicAtlasItemFontAtlas } from "./dynamic-atlas-item-font-atlas";
6
6
  import { DynamicSDFFontAtlas } from "./dynamic-sdf-font-atlas";
7
7
  var DynamicSDFFontAtlases = /** @class */ (function () {
8
8
  function DynamicSDFFontAtlases() {
9
- this._atlases = {};
9
+ this._atlases = new Map();
10
10
  }
11
11
  DynamicSDFFontAtlases.prototype.begin = function () {
12
- var atlases = this._atlases;
13
- for (var family in atlases) {
14
- var atlas = atlases[family];
12
+ this._atlases.forEach(function (atlas) {
15
13
  atlas.begin();
16
- }
14
+ });
17
15
  };
18
16
  DynamicSDFFontAtlases.prototype.end = function () {
19
17
  var atlases = this._atlases;
20
- for (var family in atlases) {
21
- var atlas = atlases[family];
22
- if (0 < atlas.length) {
23
- atlas.addAscii();
24
- }
18
+ atlases.forEach(function (atlas, family) {
25
19
  atlas.end();
26
20
  if (atlas.length <= 0) {
27
21
  atlas.destroy();
28
- delete atlases[family];
22
+ atlases.delete(family);
29
23
  }
30
- }
24
+ });
31
25
  };
32
- DynamicSDFFontAtlases.prototype.add = function (family, targets) {
33
- var atlas = this._atlases[family];
26
+ DynamicSDFFontAtlases.prototype.add = function (family, characters, nacharacters) {
27
+ var atlases = this._atlases;
28
+ var atlas = atlases.get(family);
34
29
  if (atlas != null) {
35
- atlas.add(targets);
30
+ atlas.add(characters, nacharacters);
36
31
  }
37
32
  else {
38
33
  var newAtlas = new DynamicSDFFontAtlas(family);
39
- newAtlas.add(targets);
40
- this._atlases[family] = newAtlas;
34
+ newAtlas.add(characters, nacharacters);
35
+ atlases.set(family, newAtlas);
41
36
  }
42
37
  };
43
38
  DynamicSDFFontAtlases.prototype.get = function (family) {
44
- var atlas = this._atlases[family];
39
+ var atlas = this._atlases.get(family);
45
40
  if (atlas != null) {
46
41
  return atlas;
47
42
  }
48
43
  return null;
49
44
  };
50
45
  DynamicSDFFontAtlases.prototype.update = function (baseAtlas) {
51
- var atlases = this._atlases;
52
46
  var baseTexture = baseAtlas.getBaseTexture();
53
- for (var family in atlases) {
54
- var atlas = atlases[family];
47
+ this._atlases.forEach(function (atlas) {
55
48
  if (atlas.update()) {
56
49
  var atlasId = atlas.id;
57
50
  var item = baseAtlas.get(atlasId);
@@ -69,15 +62,14 @@ var DynamicSDFFontAtlases = /** @class */ (function () {
69
62
  baseAtlas.set(atlasId, new DynamicAtlasItemFontAtlas(atlas, baseTexture));
70
63
  }
71
64
  }
72
- }
65
+ });
73
66
  };
74
67
  DynamicSDFFontAtlases.prototype.destroy = function () {
75
68
  var atlases = this._atlases;
76
- for (var family in atlases) {
77
- var atlas = atlases[family];
69
+ atlases.forEach(function (atlas) {
78
70
  atlas.destroy();
79
- }
80
- this._atlases = {};
71
+ });
72
+ atlases.clear();
81
73
  };
82
74
  return DynamicSDFFontAtlases;
83
75
  }());
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-sdf-font-atlases.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-sdf-font-atlases.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DynamicAtlas } from \"./dynamic-atlas\";\nimport { DynamicAtlasItemFontAtlas } from \"./dynamic-atlas-item-font-atlas\";\nimport { DynamicSDFFontAtlas } from \"./dynamic-sdf-font-atlas\";\n\nexport class DynamicSDFFontAtlases {\n\tprotected _atlases: Record<string, DynamicSDFFontAtlas>;\n\n\tconstructor() {\n\t\tthis._atlases = {};\n\t}\n\n\tbegin(): void {\n\t\tconst atlases = this._atlases;\n\t\tfor (const family in atlases) {\n\t\t\tconst atlas = atlases[family];\n\t\t\tatlas.begin();\n\t\t}\n\t}\n\n\tend(): void {\n\t\tconst atlases = this._atlases;\n\t\tfor (const family in atlases) {\n\t\t\tconst atlas = atlases[family];\n\t\t\tif (0 < atlas.length) {\n\t\t\t\tatlas.addAscii();\n\t\t\t}\n\t\t\tatlas.end();\n\t\t\tif (atlas.length <= 0) {\n\t\t\t\tatlas.destroy();\n\t\t\t\tdelete atlases[family];\n\t\t\t}\n\t\t}\n\t}\n\n\tadd(family: string, targets: string): void {\n\t\tconst atlas = this._atlases[family];\n\t\tif (atlas != null) {\n\t\t\tatlas.add(targets);\n\t\t} else {\n\t\t\tconst newAtlas = new DynamicSDFFontAtlas(family);\n\t\t\tnewAtlas.add(targets);\n\t\t\tthis._atlases[family] = newAtlas;\n\t\t}\n\t}\n\n\tget(family: string): DynamicSDFFontAtlas | null {\n\t\tconst atlas = this._atlases[family];\n\t\tif (atlas != null) {\n\t\t\treturn atlas;\n\t\t}\n\t\treturn null;\n\t}\n\n\tupdate(baseAtlas: DynamicAtlas): void {\n\t\tconst atlases = this._atlases;\n\t\tconst baseTexture = baseAtlas.getBaseTexture();\n\t\tfor (const family in atlases) {\n\t\t\tconst atlas = atlases[family];\n\t\t\tif (atlas.update()) {\n\t\t\t\tconst atlasId = atlas.id;\n\t\t\t\tconst item = baseAtlas.get(atlasId);\n\t\t\t\tif (item != null) {\n\t\t\t\t\tconst width = atlas.width;\n\t\t\t\t\tconst height = atlas.height;\n\t\t\t\t\tconst resolution = baseTexture.resolution;\n\t\t\t\t\titem.frame.width = width;\n\t\t\t\t\titem.frame.height = height;\n\t\t\t\t\titem.width = width / resolution;\n\t\t\t\t\titem.height = height / resolution;\n\t\t\t\t\tbaseAtlas.toDirty();\n\t\t\t\t} else {\n\t\t\t\t\tbaseAtlas.set(atlasId, new DynamicAtlasItemFontAtlas(atlas, baseTexture));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tconst atlases = this._atlases;\n\t\tfor (const family in atlases) {\n\t\t\tconst atlas = atlases[family];\n\t\t\tatlas.destroy();\n\t\t}\n\t\tthis._atlases = {};\n\t}\n}\n"]}
1
+ {"version":3,"file":"dynamic-sdf-font-atlases.js","sourceRoot":"","sources":["../../../../src/main/typescript/wcardinal/ui/util/dynamic-sdf-font-atlases.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;IAGC;QACC,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IACxD,CAAC;IAED,qCAAK,GAAL;QACC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;YAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,mCAAG,GAAH;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,MAAM;YAC7B,KAAK,CAAC,GAAG,EAAE,CAAC;YACZ,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACtB,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACvB;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,mCAAG,GAAH,UAAI,MAAc,EAAE,UAAoB,EAAE,YAAsB;QAC/D,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,IAAI,EAAE;YAClB,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;SACpC;aAAM;YACN,IAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC9B;IACF,CAAC;IAED,mCAAG,GAAH,UAAI,MAAc;QACjB,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,IAAI,EAAE;YAClB,OAAO,KAAK,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,sCAAM,GAAN,UAAO,SAAuB;QAC7B,IAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAK;YAC3B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;gBACnB,IAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACjB,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;oBAC1B,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;oBAC5B,IAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;oBAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBACzB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;oBAChC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;oBAClC,SAAS,CAAC,OAAO,EAAE,CAAC;iBACpB;qBAAM;oBACN,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,yBAAyB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;iBAC1E;aACD;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,uCAAO,GAAP;QACC,IAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK;YACrB,KAAK,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IACF,4BAAC;AAAD,CAAC,AAzED,IAyEC","sourcesContent":["/*\n * Copyright (C) 2019 Toshiba Corporation\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { DynamicAtlas } from \"./dynamic-atlas\";\nimport { DynamicAtlasItemFontAtlas } from \"./dynamic-atlas-item-font-atlas\";\nimport { DynamicSDFFontAtlas } from \"./dynamic-sdf-font-atlas\";\n\nexport class DynamicSDFFontAtlases {\n\tprotected _atlases: Map<string, DynamicSDFFontAtlas>;\n\n\tconstructor() {\n\t\tthis._atlases = new Map<string, DynamicSDFFontAtlas>();\n\t}\n\n\tbegin(): void {\n\t\tthis._atlases.forEach((atlas) => {\n\t\t\tatlas.begin();\n\t\t});\n\t}\n\n\tend(): void {\n\t\tconst atlases = this._atlases;\n\t\tatlases.forEach((atlas, family) => {\n\t\t\tatlas.end();\n\t\t\tif (atlas.length <= 0) {\n\t\t\t\tatlas.destroy();\n\t\t\t\tatlases.delete(family);\n\t\t\t}\n\t\t});\n\t}\n\n\tadd(family: string, characters: string[], nacharacters: string[]): void {\n\t\tconst atlases = this._atlases;\n\t\tconst atlas = atlases.get(family);\n\t\tif (atlas != null) {\n\t\t\tatlas.add(characters, nacharacters);\n\t\t} else {\n\t\t\tconst newAtlas = new DynamicSDFFontAtlas(family);\n\t\t\tnewAtlas.add(characters, nacharacters);\n\t\t\tatlases.set(family, newAtlas);\n\t\t}\n\t}\n\n\tget(family: string): DynamicSDFFontAtlas | null {\n\t\tconst atlas = this._atlases.get(family);\n\t\tif (atlas != null) {\n\t\t\treturn atlas;\n\t\t}\n\t\treturn null;\n\t}\n\n\tupdate(baseAtlas: DynamicAtlas): void {\n\t\tconst baseTexture = baseAtlas.getBaseTexture();\n\t\tthis._atlases.forEach((atlas) => {\n\t\t\tif (atlas.update()) {\n\t\t\t\tconst atlasId = atlas.id;\n\t\t\t\tconst item = baseAtlas.get(atlasId);\n\t\t\t\tif (item != null) {\n\t\t\t\t\tconst width = atlas.width;\n\t\t\t\t\tconst height = atlas.height;\n\t\t\t\t\tconst resolution = baseTexture.resolution;\n\t\t\t\t\titem.frame.width = width;\n\t\t\t\t\titem.frame.height = height;\n\t\t\t\t\titem.width = width / resolution;\n\t\t\t\t\titem.height = height / resolution;\n\t\t\t\t\tbaseAtlas.toDirty();\n\t\t\t\t} else {\n\t\t\t\t\tbaseAtlas.set(atlasId, new DynamicAtlasItemFontAtlas(atlas, baseTexture));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tdestroy(): void {\n\t\tconst atlases = this._atlases;\n\t\tatlases.forEach((atlas) => {\n\t\t\tatlas.destroy();\n\t\t});\n\t\tatlases.clear();\n\t}\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  export * from "./format-node";
6
+ export * from "./character";
6
7
  export * from "./deep-partial";
7
8
  export * from "./dynamic-atlas-item-empty";
8
9
  export * from "./dynamic-atlas-item-font-atlas";