@wcardinal/wcardinal-ui 0.426.0 → 0.427.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.
@@ -18,6 +18,8 @@ export declare class DynamicSDFFontAtlas {
18
18
  protected _width: number;
19
19
  protected _height: number;
20
20
  protected _isDirty: boolean;
21
+ protected _isTouched: boolean;
22
+ protected _life: number;
21
23
  constructor(fontFamily: string);
22
24
  get id(): string;
23
25
  get font(): DynamicSDFFontAtlasFont;
@@ -26,6 +26,8 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
26
26
  }
27
27
  this._characters = characters;
28
28
  this._isDirty = true;
29
+ this._isTouched = false;
30
+ this._life = DynamicFontAtlasCharacter.LIFE;
29
31
  }
30
32
  Object.defineProperty(DynamicSDFFontAtlas.prototype, "id", {
31
33
  get: function () {
@@ -82,6 +84,7 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
82
84
  configurable: true
83
85
  });
84
86
  DynamicSDFFontAtlas.prototype.begin = function () {
87
+ this._isTouched = false;
85
88
  this._characters.forEach(function (character) {
86
89
  if (!(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
87
90
  character.ref = 0;
@@ -91,15 +94,26 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
91
94
  DynamicSDFFontAtlas.prototype.end = function () {
92
95
  var _this = this;
93
96
  var characters = this._characters;
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;
97
+ if (this._isTouched) {
98
+ this._life = DynamicFontAtlasCharacter.LIFE;
99
+ characters.forEach(function (character, id) {
100
+ if (character.ref <= 0 &&
101
+ !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
102
+ character.life -= 1;
103
+ if (character.life <= 0) {
104
+ characters.delete(id);
105
+ _this._isDirty = true;
106
+ }
100
107
  }
108
+ });
109
+ }
110
+ else {
111
+ this._life -= 1;
112
+ if (this._life <= 0 && 0 < characters.size) {
113
+ characters.clear();
114
+ this._isDirty = true;
101
115
  }
102
- });
116
+ }
103
117
  };
104
118
  DynamicSDFFontAtlas.prototype.newChar = function (character, type) {
105
119
  return new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);
@@ -111,12 +125,16 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
111
125
  var data = cs.get(nac);
112
126
  if (data != null) {
113
127
  data.ref += 1;
128
+ data.life = DynamicFontAtlasCharacter.LIFE;
114
129
  }
115
130
  else {
116
131
  cs.set(nac, this.newChar(nac, DynamicFontAtlasCharacterType.LETTER));
117
132
  this._isDirty = true;
118
133
  }
119
134
  }
135
+ if (0 < characters.length) {
136
+ this._isTouched = true;
137
+ }
120
138
  };
121
139
  DynamicSDFFontAtlas.prototype.get = function (id) {
122
140
  return this._characters.get(id);
@@ -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 { 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"]}
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\tprotected _isTouched: boolean;\n\tprotected _life: number;\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\tthis._isTouched = false;\n\t\tthis._life = DynamicFontAtlasCharacter.LIFE;\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._isTouched = false;\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\tif (this._isTouched) {\n\t\t\tthis._life = DynamicFontAtlasCharacter.LIFE;\n\t\t\tcharacters.forEach((character, id) => {\n\t\t\t\tif (\n\t\t\t\t\tcharacter.ref <= 0 &&\n\t\t\t\t\t!(character.type & DynamicFontAtlasCharacterType.RESERVED)\n\t\t\t\t) {\n\t\t\t\t\tcharacter.life -= 1;\n\t\t\t\t\tif (character.life <= 0) {\n\t\t\t\t\t\tcharacters.delete(id);\n\t\t\t\t\t\tthis._isDirty = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tthis._life -= 1;\n\t\t\tif (this._life <= 0 && 0 < characters.size) {\n\t\t\t\tcharacters.clear();\n\t\t\t\tthis._isDirty = true;\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\tdata.life = DynamicFontAtlasCharacter.LIFE;\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\tif (0 < characters.length) {\n\t\t\tthis._isTouched = true;\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"]}
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -21622,6 +21622,8 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
21622
21622
  }
21623
21623
  this._characters = characters;
21624
21624
  this._isDirty = true;
21625
+ this._isTouched = false;
21626
+ this._life = DynamicFontAtlasCharacter.LIFE;
21625
21627
  }
21626
21628
  Object.defineProperty(DynamicSDFFontAtlas.prototype, "id", {
21627
21629
  get: function () {
@@ -21678,6 +21680,7 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
21678
21680
  configurable: true
21679
21681
  });
21680
21682
  DynamicSDFFontAtlas.prototype.begin = function () {
21683
+ this._isTouched = false;
21681
21684
  this._characters.forEach(function (character) {
21682
21685
  if (!(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
21683
21686
  character.ref = 0;
@@ -21687,15 +21690,26 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
21687
21690
  DynamicSDFFontAtlas.prototype.end = function () {
21688
21691
  var _this = this;
21689
21692
  var characters = this._characters;
21690
- characters.forEach(function (character, id) {
21691
- if (character.ref <= 0 && !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
21692
- character.life -= 1;
21693
- if (character.life <= 0) {
21694
- characters.delete(id);
21695
- _this._isDirty = true;
21693
+ if (this._isTouched) {
21694
+ this._life = DynamicFontAtlasCharacter.LIFE;
21695
+ characters.forEach(function (character, id) {
21696
+ if (character.ref <= 0 &&
21697
+ !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
21698
+ character.life -= 1;
21699
+ if (character.life <= 0) {
21700
+ characters.delete(id);
21701
+ _this._isDirty = true;
21702
+ }
21696
21703
  }
21704
+ });
21705
+ }
21706
+ else {
21707
+ this._life -= 1;
21708
+ if (this._life <= 0 && 0 < characters.size) {
21709
+ characters.clear();
21710
+ this._isDirty = true;
21697
21711
  }
21698
- });
21712
+ }
21699
21713
  };
21700
21714
  DynamicSDFFontAtlas.prototype.newChar = function (character, type) {
21701
21715
  return new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);
@@ -21707,12 +21721,16 @@ var DynamicSDFFontAtlas = /** @class */ (function () {
21707
21721
  var data = cs.get(nac);
21708
21722
  if (data != null) {
21709
21723
  data.ref += 1;
21724
+ data.life = DynamicFontAtlasCharacter.LIFE;
21710
21725
  }
21711
21726
  else {
21712
21727
  cs.set(nac, this.newChar(nac, DynamicFontAtlasCharacterType.LETTER));
21713
21728
  this._isDirty = true;
21714
21729
  }
21715
21730
  }
21731
+ if (0 < characters.length) {
21732
+ this._isTouched = true;
21733
+ }
21716
21734
  };
21717
21735
  DynamicSDFFontAtlas.prototype.get = function (id) {
21718
21736
  return this._characters.get(id);
@@ -1,5 +1,5 @@
1
1
  /*
2
- Winter Cardinal UI v0.426.0
2
+ Winter Cardinal UI v0.427.0
3
3
  Copyright (C) 2019 Toshiba Corporation
4
4
  SPDX-License-Identifier: Apache-2.0
5
5
 
@@ -21619,6 +21619,8 @@
21619
21619
  }
21620
21620
  this._characters = characters;
21621
21621
  this._isDirty = true;
21622
+ this._isTouched = false;
21623
+ this._life = DynamicFontAtlasCharacter.LIFE;
21622
21624
  }
21623
21625
  Object.defineProperty(DynamicSDFFontAtlas.prototype, "id", {
21624
21626
  get: function () {
@@ -21675,6 +21677,7 @@
21675
21677
  configurable: true
21676
21678
  });
21677
21679
  DynamicSDFFontAtlas.prototype.begin = function () {
21680
+ this._isTouched = false;
21678
21681
  this._characters.forEach(function (character) {
21679
21682
  if (!(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
21680
21683
  character.ref = 0;
@@ -21684,15 +21687,26 @@
21684
21687
  DynamicSDFFontAtlas.prototype.end = function () {
21685
21688
  var _this = this;
21686
21689
  var characters = this._characters;
21687
- characters.forEach(function (character, id) {
21688
- if (character.ref <= 0 && !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
21689
- character.life -= 1;
21690
- if (character.life <= 0) {
21691
- characters.delete(id);
21692
- _this._isDirty = true;
21690
+ if (this._isTouched) {
21691
+ this._life = DynamicFontAtlasCharacter.LIFE;
21692
+ characters.forEach(function (character, id) {
21693
+ if (character.ref <= 0 &&
21694
+ !(character.type & DynamicFontAtlasCharacterType.RESERVED)) {
21695
+ character.life -= 1;
21696
+ if (character.life <= 0) {
21697
+ characters.delete(id);
21698
+ _this._isDirty = true;
21699
+ }
21693
21700
  }
21701
+ });
21702
+ }
21703
+ else {
21704
+ this._life -= 1;
21705
+ if (this._life <= 0 && 0 < characters.size) {
21706
+ characters.clear();
21707
+ this._isDirty = true;
21694
21708
  }
21695
- });
21709
+ }
21696
21710
  };
21697
21711
  DynamicSDFFontAtlas.prototype.newChar = function (character, type) {
21698
21712
  return new DynamicFontAtlasCharacter(type, character, 0, 0, 1, 1, 0);
@@ -21704,12 +21718,16 @@
21704
21718
  var data = cs.get(nac);
21705
21719
  if (data != null) {
21706
21720
  data.ref += 1;
21721
+ data.life = DynamicFontAtlasCharacter.LIFE;
21707
21722
  }
21708
21723
  else {
21709
21724
  cs.set(nac, this.newChar(nac, DynamicFontAtlasCharacterType.LETTER));
21710
21725
  this._isDirty = true;
21711
21726
  }
21712
21727
  }
21728
+ if (0 < characters.length) {
21729
+ this._isTouched = true;
21730
+ }
21713
21731
  };
21714
21732
  DynamicSDFFontAtlas.prototype.get = function (id) {
21715
21733
  return this._characters.get(id);