@kurot/core 2.1.0 → 2.2.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 (60) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +49 -2
  3. package/dist/kurot/display/DisplayObject.d.ts +2 -1
  4. package/dist/kurot/display/DisplayObject.d.ts.map +1 -1
  5. package/dist/kurot/display/DisplayObject.js.map +1 -1
  6. package/dist/kurot/player/canvas/CanvasRenderer.d.ts +2 -0
  7. package/dist/kurot/player/canvas/CanvasRenderer.d.ts.map +1 -1
  8. package/dist/kurot/player/canvas/CanvasRenderer.js +37 -1
  9. package/dist/kurot/player/canvas/CanvasRenderer.js.map +1 -1
  10. package/dist/kurot/player/pipes/BitmapTextPipe.d.ts +20 -0
  11. package/dist/kurot/player/pipes/BitmapTextPipe.d.ts.map +1 -0
  12. package/dist/kurot/player/pipes/BitmapTextPipe.js +27 -0
  13. package/dist/kurot/player/pipes/BitmapTextPipe.js.map +1 -0
  14. package/dist/kurot/player/pipes/MaskPipe.d.ts.map +1 -1
  15. package/dist/kurot/player/pipes/MaskPipe.js +4 -1
  16. package/dist/kurot/player/pipes/MaskPipe.js.map +1 -1
  17. package/dist/kurot/player/pipes/index.d.ts +2 -0
  18. package/dist/kurot/player/pipes/index.d.ts.map +1 -1
  19. package/dist/kurot/player/pipes/index.js +1 -0
  20. package/dist/kurot/player/pipes/index.js.map +1 -1
  21. package/dist/kurot/player/webgl/WebGLRenderer.d.ts +1 -0
  22. package/dist/kurot/player/webgl/WebGLRenderer.d.ts.map +1 -1
  23. package/dist/kurot/player/webgl/WebGLRenderer.js +8 -0
  24. package/dist/kurot/player/webgl/WebGLRenderer.js.map +1 -1
  25. package/dist/kurot/resource/Resource.d.ts.map +1 -1
  26. package/dist/kurot/resource/Resource.js +4 -0
  27. package/dist/kurot/resource/Resource.js.map +1 -1
  28. package/dist/kurot/resource/ResourceItem.d.ts +1 -0
  29. package/dist/kurot/resource/ResourceItem.d.ts.map +1 -1
  30. package/dist/kurot/resource/ResourceItem.js +1 -0
  31. package/dist/kurot/resource/ResourceItem.js.map +1 -1
  32. package/dist/kurot/resource/analyzers/FontAnalyzer.d.ts +16 -0
  33. package/dist/kurot/resource/analyzers/FontAnalyzer.d.ts.map +1 -0
  34. package/dist/kurot/resource/analyzers/FontAnalyzer.js +75 -0
  35. package/dist/kurot/resource/analyzers/FontAnalyzer.js.map +1 -0
  36. package/dist/kurot/resource/analyzers/index.d.ts +1 -0
  37. package/dist/kurot/resource/analyzers/index.d.ts.map +1 -1
  38. package/dist/kurot/resource/analyzers/index.js +1 -0
  39. package/dist/kurot/resource/analyzers/index.js.map +1 -1
  40. package/dist/kurot/resource/index.d.ts +1 -0
  41. package/dist/kurot/resource/index.d.ts.map +1 -1
  42. package/dist/kurot/resource/index.js +1 -0
  43. package/dist/kurot/resource/index.js.map +1 -1
  44. package/dist/kurot/text/BitmapFont.d.ts +15 -21
  45. package/dist/kurot/text/BitmapFont.d.ts.map +1 -1
  46. package/dist/kurot/text/BitmapFont.js +59 -66
  47. package/dist/kurot/text/BitmapFont.js.map +1 -1
  48. package/dist/kurot/text/BitmapText.d.ts +29 -19
  49. package/dist/kurot/text/BitmapText.d.ts.map +1 -1
  50. package/dist/kurot/text/BitmapText.js +93 -141
  51. package/dist/kurot/text/BitmapText.js.map +1 -1
  52. package/dist/kurot/text/index.d.ts +1 -0
  53. package/dist/kurot/text/index.d.ts.map +1 -1
  54. package/dist/kurot/text/index.js.map +1 -1
  55. package/docs/ai-context.md +26 -7
  56. package/docs/architecture.md +322 -276
  57. package/docs/bitmap-fonts.md +85 -0
  58. package/docs/resource.md +185 -156
  59. package/docs/text-layout.md +9 -6
  60. package/package.json +3 -2
@@ -1,48 +1,62 @@
1
+ import { layoutBitmapText } from '@kurot/bitmap-font';
1
2
  import { DisplayObject } from '../display/DisplayObject.js';
2
- import { HorizontalAlign } from './enums/HorizontalAlign.js';
3
- import { VerticalAlign } from './enums/VerticalAlign.js';
4
3
  /**
5
- * Renders text using a BitmapFont (texture atlas), avoiding system font rendering differences.
4
+ * Draws atlas glyphs directly through WebGL batching or Canvas 2D.
5
+ * Width wraps by code point; use multiline=false for one unwrapped line.
6
+ * Fonts are borrowed. Missing glyphs are skipped; U+0020 has a fallback advance.
6
7
  */
7
8
  export class BitmapText extends DisplayObject {
9
+ // ── Static fields ─────────────────────────────────────────────────────────
10
+ /**
11
+ * @deprecated Font layout uses its explicit spaceAdvance metric.
12
+ * Set that metric in font data before constructing a font.
13
+ */
8
14
  static EMPTY_FACTOR = 0.33;
15
+ // ── Instance fields ──────────────────────────────────────────────────────
9
16
  _text = '';
10
17
  _font;
11
18
  _lineSpacing = 0;
12
19
  _letterSpacing = 0;
13
- _textAlign = HorizontalAlign.LEFT;
14
- _verticalAlign = VerticalAlign.TOP;
20
+ _textAlign = 'left';
21
+ _verticalAlign = 'top';
22
+ _smoothing = true;
23
+ _multiline = true;
24
+ _layout;
25
+ // ── Constructor ──────────────────────────────────────────────────────────
26
+ constructor() {
27
+ super();
28
+ this.$renderObjectType = 7 /* RenderObjectType.BITMAP_TEXT */;
29
+ }
30
+ // ── Getters / Setters ─────────────────────────────────────────────────────
31
+ get width() {
32
+ return super.width;
33
+ }
15
34
  set width(value) {
16
- const v = isNaN(value) ? NaN : value;
17
- if (this.$explicitWidth === v)
35
+ if (Object.is(this.$explicitWidth, value))
18
36
  return;
19
- this.$explicitWidth = v;
37
+ if (!Number.isNaN(value) && (!Number.isFinite(value) || value < 0))
38
+ throw new RangeError('BitmapText.width must be nonnegative or NaN.');
39
+ this.$explicitWidth = value;
20
40
  this._invalidate();
21
41
  }
42
+ get height() {
43
+ return super.height;
44
+ }
22
45
  set height(value) {
23
- const v = isNaN(value) ? NaN : value;
24
- if (this.$explicitHeight === v)
46
+ if (Object.is(this.$explicitHeight, value))
25
47
  return;
26
- this.$explicitHeight = v;
48
+ if (!Number.isNaN(value) && (!Number.isFinite(value) || value < 0))
49
+ throw new RangeError('BitmapText.height must be nonnegative or NaN.');
50
+ this.$explicitHeight = value;
27
51
  this._invalidate();
28
52
  }
29
- _smoothing = true;
30
- _textLinesChanged = false;
31
- _textLines = [];
32
- _textLinesWidth = [];
33
- _lineHeights = [];
34
- _textWidth = 0;
35
- _textHeight = 0;
36
- _textStartX = 0;
37
- _textStartY = 0;
38
53
  get text() {
39
54
  return this._text;
40
55
  }
41
56
  set text(value) {
42
- const v = value ?? '';
43
- if (this._text === v)
57
+ if (this._text === value)
44
58
  return;
45
- this._text = v;
59
+ this._text = value;
46
60
  this._invalidate();
47
61
  }
48
62
  get font() {
@@ -60,6 +74,8 @@ export class BitmapText extends DisplayObject {
60
74
  set lineSpacing(value) {
61
75
  if (this._lineSpacing === value)
62
76
  return;
77
+ if (!Number.isFinite(value) || value < 0)
78
+ throw new RangeError('BitmapText.lineSpacing must be finite and nonnegative.');
63
79
  this._lineSpacing = value;
64
80
  this._invalidate();
65
81
  }
@@ -69,6 +85,8 @@ export class BitmapText extends DisplayObject {
69
85
  set letterSpacing(value) {
70
86
  if (this._letterSpacing === value)
71
87
  return;
88
+ if (!Number.isFinite(value))
89
+ throw new RangeError('BitmapText.letterSpacing must be finite.');
72
90
  this._letterSpacing = value;
73
91
  this._invalidate();
74
92
  }
@@ -78,6 +96,8 @@ export class BitmapText extends DisplayObject {
78
96
  set textAlign(value) {
79
97
  if (this._textAlign === value)
80
98
  return;
99
+ if (!['left', 'center', 'right'].includes(value))
100
+ throw new RangeError('Invalid bitmap text alignment.');
81
101
  this._textAlign = value;
82
102
  this._invalidate();
83
103
  }
@@ -87,6 +107,8 @@ export class BitmapText extends DisplayObject {
87
107
  set verticalAlign(value) {
88
108
  if (this._verticalAlign === value)
89
109
  return;
110
+ if (!['top', 'middle', 'bottom'].includes(value))
111
+ throw new RangeError('Invalid bitmap text vertical alignment.');
90
112
  this._verticalAlign = value;
91
113
  this._invalidate();
92
114
  }
@@ -99,141 +121,71 @@ export class BitmapText extends DisplayObject {
99
121
  this._smoothing = value;
100
122
  this.$markDirty();
101
123
  }
124
+ get multiline() {
125
+ return this._multiline;
126
+ }
127
+ set multiline(value) {
128
+ if (this._multiline === value)
129
+ return;
130
+ this._multiline = value;
131
+ this._invalidate();
132
+ }
102
133
  get textWidth() {
103
- this._ensureLines();
104
- return this._textWidth;
134
+ return this.getLayout().width;
105
135
  }
106
136
  get textHeight() {
107
- this._ensureLines();
108
- return this._textHeight;
109
- }
110
- $measureContentBounds(bounds) {
111
- this._ensureLines();
112
- if (this._textLines.length === 0) {
113
- bounds.setEmpty();
114
- }
115
- else {
116
- bounds.setTo(this._textStartX, this._textStartY, this._textWidth, this._textHeight);
117
- }
137
+ return this.getLayout().height;
138
+ }
139
+ // ── Public methods ───────────────────────────────────────────────────────
140
+ getLayout() {
141
+ this._layout ??= this.measureText(this.$explicitWidth, this.$explicitHeight);
142
+ return this._layout;
143
+ }
144
+ /**
145
+ * Measures with independent constraints without changing the rendered field.
146
+ * NaN means unconstrained; font, spacing, alignment and multiline are retained.
147
+ */
148
+ measureText(width = NaN, height = NaN) {
149
+ return this._font
150
+ ? layoutBitmapText(this._font.data, this._text, {
151
+ width: Number.isNaN(width) ? undefined : width,
152
+ height: Number.isNaN(height) ? undefined : height,
153
+ lineSpacing: this._lineSpacing,
154
+ letterSpacing: this._letterSpacing,
155
+ textAlign: this._textAlign,
156
+ verticalAlign: this._verticalAlign,
157
+ multiline: this._multiline,
158
+ })
159
+ : { glyphs: [], lines: [], width: 0, height: 0, startX: 0, startY: 0, bounds: { x: 0, y: 0, width: 0, height: 0 } };
160
+ }
161
+ getGlyphs() {
162
+ return this.getLayout().glyphs;
118
163
  }
119
164
  getTextLines() {
120
- return this._ensureLines();
165
+ return this.getLayout().lines.map(line => line.text);
121
166
  }
122
167
  getTextLinesWidth() {
123
- this._ensureLines();
124
- return this._textLinesWidth;
168
+ return this.getLayout().lines.map(line => line.width);
125
169
  }
126
170
  getLineHeights() {
127
- this._ensureLines();
128
- return this._lineHeights;
171
+ return this.getLayout().lines.map(line => line.height);
129
172
  }
130
173
  getTextStartX() {
131
- this._ensureLines();
132
- return this._textStartX;
174
+ return this.getLayout().startX;
133
175
  }
134
176
  getTextStartY() {
135
- this._ensureLines();
136
- return this._textStartY;
177
+ return this.getLayout().startY;
137
178
  }
179
+ // ── Override methods ─────────────────────────────────────────────────────
180
+ $measureContentBounds(bounds) {
181
+ const measured = this.getLayout().bounds;
182
+ bounds.setTo(measured.x, measured.y, measured.width, measured.height);
183
+ }
184
+ // ── Private methods ──────────────────────────────────────────────────────
138
185
  _invalidate() {
139
- this._textLinesChanged = true;
186
+ this._layout = undefined;
140
187
  this.$renderDirty = true;
141
188
  this.$markDirty();
142
189
  }
143
- _ensureLines() {
144
- if (!this._textLinesChanged)
145
- return this._textLines;
146
- this._textLinesChanged = false;
147
- this._textLines = [];
148
- this._textLinesWidth = [];
149
- this._lineHeights = [];
150
- this._textWidth = 0;
151
- this._textHeight = 0;
152
- const font = this._font;
153
- if (!this._text || !font)
154
- return this._textLines;
155
- const hasWidthSet = !isNaN(this.$explicitWidth);
156
- const fieldWidth = this.$explicitWidth;
157
- const fieldHeight = this.$explicitHeight;
158
- const emptyHeight = font.getFirstCharHeight();
159
- const emptyWidth = Math.ceil(emptyHeight * BitmapText.EMPTY_FACTOR);
160
- const textArr = this._text.split(/(?:\r\n|\r|\n)/);
161
- let totalWidth = 0;
162
- let totalHeight = 0;
163
- const pushLine = (str, lh, lw) => {
164
- if (!isNaN(fieldHeight) && this._textLines.length > 0 && totalHeight > fieldHeight)
165
- return false;
166
- totalHeight += lh + this._lineSpacing;
167
- this._textLines.push(str);
168
- this._lineHeights.push(lh);
169
- this._textLinesWidth.push(lw);
170
- totalWidth = Math.max(lw, totalWidth);
171
- return true;
172
- };
173
- for (let i = 0; i < textArr.length; i++) {
174
- let line = textArr[i];
175
- let len = line.length;
176
- let lineHeight = 0;
177
- let xPos = 0;
178
- let isFirstChar = true;
179
- for (let j = 0; j < len; j++) {
180
- if (!isFirstChar)
181
- xPos += this._letterSpacing;
182
- const ch = line.charAt(j);
183
- const texture = font.getTexture(ch);
184
- let texW;
185
- let texH;
186
- if (!texture) {
187
- if (ch === ' ') {
188
- texW = emptyWidth;
189
- texH = emptyHeight;
190
- }
191
- else {
192
- if (isFirstChar)
193
- isFirstChar = false;
194
- continue;
195
- }
196
- }
197
- else {
198
- texW = texture.textureWidth;
199
- texH = texture.textureHeight;
200
- }
201
- if (isFirstChar)
202
- isFirstChar = false;
203
- if (hasWidthSet && j > 0 && xPos + texW > fieldWidth) {
204
- if (!pushLine(line.substring(0, j), lineHeight, xPos))
205
- break;
206
- line = line.substring(j);
207
- len = line.length;
208
- j = 0;
209
- xPos = len === 1 ? texW : font.getConfig(ch, 'xadvance') || texW;
210
- lineHeight = texH;
211
- continue;
212
- }
213
- xPos += j === len - 1 ? texW : font.getConfig(ch, 'xadvance') || texW;
214
- lineHeight = Math.max(texH, lineHeight);
215
- }
216
- if (!isNaN(fieldHeight) && i > 0 && totalHeight > fieldHeight)
217
- break;
218
- pushLine(line, lineHeight, xPos);
219
- }
220
- this._textWidth = totalWidth;
221
- this._textHeight = Math.max(0, totalHeight - this._lineSpacing);
222
- this._textStartX = 0;
223
- this._textStartY = 0;
224
- if (hasWidthSet && fieldWidth > totalWidth) {
225
- if (this._textAlign === HorizontalAlign.RIGHT)
226
- this._textStartX = fieldWidth - totalWidth;
227
- else if (this._textAlign === HorizontalAlign.CENTER)
228
- this._textStartX = Math.floor((fieldWidth - totalWidth) / 2);
229
- }
230
- if (!isNaN(fieldHeight) && fieldHeight > this._textHeight) {
231
- if (this._verticalAlign === VerticalAlign.BOTTOM)
232
- this._textStartY = fieldHeight - this._textHeight;
233
- else if (this._verticalAlign === VerticalAlign.MIDDLE)
234
- this._textStartY = Math.floor((fieldHeight - this._textHeight) / 2);
235
- }
236
- return this._textLines;
237
- }
238
190
  }
239
191
  //# sourceMappingURL=BitmapText.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BitmapText.js","sourceRoot":"","sources":["../../../src/kurot/text/BitmapText.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BitmapText.js","sourceRoot":"","sources":["../../../src/kurot/text/BitmapText.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export { TextFieldType } from './enums/TextFieldType.js';
4
4
  export { TextFieldInputType } from './enums/TextFieldInputType.js';
5
5
  export type { ITextStyle, ITextElement, IWTextElement, ILineElement, IHitTextElement } from './types/ITextElement.js';
6
6
  export { HtmlTextParser } from './HtmlTextParser.js';
7
+ export type { BitmapFontOptions } from './BitmapFont.js';
7
8
  export { BitmapFont } from './BitmapFont.js';
8
9
  export { BitmapText } from './BitmapText.js';
9
10
  export { measureText, getFontString } from './TextMeasurer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kurot/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -5,7 +5,7 @@ agent unfamiliar with Kurot does not need to re-derive the architecture from
5
5
  scratch on every session. Treat the package source and its `src/index.ts`
6
6
  barrel as the authority for current behavior and exports.
7
7
 
8
- Package identity: `@kurot/core@2.1.0`. It provides Kurot's scene graph,
8
+ Package identity: `@kurot/core@2.2.0`. It provides Kurot's scene graph,
9
9
  events, rendering, text, resource, network and media runtime. Rendering uses a
10
10
  flat `InstructionSet + RenderPipe` pipeline. ES2022 / evergreen browsers only
11
11
  with `strict: true`. Two
@@ -28,7 +28,7 @@ src/kurot/
28
28
  ├── player/ Game loop + both render backends. Player, createPlayer(), SystemTicker/
29
29
  │ ticker singleton, ScreenAdapter, TouchHandler. Backend-neutral abstractions
30
30
  │ live here: RenderPipe / RenderContext / RenderBuffer interfaces (the latter
31
- │ two are internal), InstructionSet, and pipes/ (Bitmap/Graphics/Mesh/Text/
31
+ │ two are internal), InstructionSet, and pipes/ (Bitmap/BitmapText/Graphics/Mesh/Text/
32
32
  │ Filter/Mask/Particle). The WebGL instruction renderer consumes the pipes.
33
33
  │ ├── webgl/ WebGLRenderer, WebGLRenderContext, WebGLRenderBuffer/Target,
34
34
  │ │ WebGLVertexArrayObject, WebGLDrawCmdManager, MultiTextureBatcher,
@@ -44,7 +44,7 @@ src/kurot/
44
44
  ├── text/ TextField, BitmapText/BitmapFont, StageText (DOM overlay, INPUT mode only),
45
45
  │ HtmlTextParser, InputController, TextMeasurer, LineBreaks, TextLineLayout, WordWrap.
46
46
  ├── resource/ Resource class + `resource` singleton, ResourceLoader, analyzers/
47
- │ (Image/Json/Text/Sound/Sheet). Async, resource.json-driven (RES-compatible).
47
+ │ (Image/Json/Text/Sound/Sheet/Font). Async, resource.json-driven (RES-compatible).
48
48
  ├── net/ HttpRequest, ImageLoader. Low-level; resource/analyzers build on these.
49
49
  ├── media/ Sound (+SoundChannel), Video. Web Audio + HTMLAudioElement fallback.
50
50
  ├── system/ Capabilities (static). Must be _init()'d — createPlayer() does this for you.
@@ -73,6 +73,10 @@ colocated under `examples/benchmark/`; none are exported from `index.ts`.
73
73
  rendering**. It's a WebGL-only optimization hint that isolates a subtree
74
74
  into its own `InstructionSet` — toggling it never changes pixels, only which
75
75
  instruction set absorbs rebuilds.
76
+ - A `scrollRect` clips a fixed viewport at local (0,0); its x/y translate the
77
+ content, not the clip. WebGL's nested/rotated stencil path must use the same
78
+ viewport origin as its axis-aligned scissor path. Rectangle masks retain
79
+ their own local x/y. See `player/pipes/MaskPipe.ts`.
76
80
  - `CanvasRenderer` is not purely a fallback. The WebGL backend depends on it
77
81
  internally to rasterize Graphics/Text to offscreen canvases before texture
78
82
  upload, and to snapshot `RenderTexture`. Don't reason about it as dead code
@@ -112,8 +116,11 @@ colocated under `examples/benchmark/`; none are exported from `index.ts`.
112
116
  - `BlurFilter.quality` controls pass pairs (1–16); large radii downsample to
113
117
  stay within the existing 32-physical-pixel shader tier. Glow/DropShadow keep
114
118
  their existing fixed-sample shader and do not use their quality metadata.
115
- - GPU filters are skipped by Canvas 2D, including the Canvas capture used by
116
- cacheAsTexture and RenderTexture. Do not cache GPU effects through those APIs.
119
+ - Canvas 2D skips CustomFilter, MultiPassFilter and BloomFilter, including the
120
+ Canvas capture used by cacheAsTexture and RenderTexture. Built-in Blur, Glow
121
+ and DropShadow use CSS approximations; ColorMatrix uses CPU pixels. These
122
+ fallbacks are not pixel-equivalent to WebGL. Do not cache GPU shader effects
123
+ through those capture APIs. See docs/filters.md.
117
124
  - Filter setters invalidate weakly attached users. Direct uniform/binding edits
118
125
  need `filter.invalidate()`. Auxiliary canvas/video edits additionally need
119
126
  `BitmapData.invalidate(source)` for upload refresh.
@@ -158,11 +165,11 @@ Re-export order: `events`, `geom`, `utils`, `display`, `net`, `filters`,
158
165
  - **Media**: `Sound`/`SoundType`/`SoundEvents`, `SoundChannel`, `Video`.
159
166
  - **Player**: `Player`, `createPlayer`/`KurotApp`/`KurotOptions`; ticker: `SystemTicker`, `ticker`, `getTimer`, `setupLifecycle`, `START_TIME`, `invalidateRenderFlag`/`setInvalidateRenderFlag`, `requestRenderingFlag`/`setRequestRenderingFlag`, `Renderable`; rendering: `InstructionSet`/`Instruction`, `RenderPipe` (type), `CanvasBuffer`, `hitTestBuffer`, `CanvasRenderer`, `DisplayList`; input/layout: `TouchHandler`, `ScreenAdapter`/`StageDisplaySize`; WebGL: `WebGLRenderer`, `WebGLRenderContext`, `WebGLRenderBuffer`, `WebGLRenderTarget`, `WebGLVertexArrayObject`, `WebGLDrawCmdManager`, `WebGLProgram`, `ShaderLib`, `checkWebGLSupport`, `MultiTextureBatcher`.
160
167
  - `RenderContext` / `RenderBuffer` (`player/RenderContext.ts`, `player/RenderBuffer.ts`) are internal backend-neutral contracts and are not re-exported.
161
- - **Text**: `HorizontalAlign`, `VerticalAlign`, `TextFieldType`, `TextFieldInputType`; types `ITextStyle`, `ITextElement`, `IWTextElement`, `ILineElement`, `IHitTextElement`; `HtmlTextParser`, `BitmapFont`, `BitmapText`, `measureText`/`getFontString`, `TextField`, `StageText`, `InputController`, `tokenize`/`splitGraphemes`.
168
+ - **Text**: `HorizontalAlign`, `VerticalAlign`, `TextFieldType`, `TextFieldInputType`; types `ITextStyle`, `ITextElement`, `IWTextElement`, `ILineElement`, `IHitTextElement`, `BitmapFontOptions`; `HtmlTextParser`, `BitmapFont`, `BitmapText`, `measureText`/`getFontString`, `TextField`, `StageText`, `InputController`, `tokenize`/`splitGraphemes`.
162
169
  - **System**: `Capabilities`.
163
170
  - **localStorage**: namespace object — `import { localStorage } from '@kurot/core'`, then `localStorage.getItem(...)`.
164
171
  - **External**: `ExternalInterface` (named, not namespaced).
165
- - **Resource**: `Resource`/`resource` (shared instance), `ProgressCallback`, `ResourceEventListener`, `ResourceItem`, `ResourceType`, `ResourceConfig`/`ResourceConfigData`/`ResourceConfigEntry`, `ResourceLoader`, `ResourceEventType`/`ResourceEvent`, `AnalyzerBase`, `ImageAnalyzer`, `JsonAnalyzer`, `TextAnalyzer`, `SoundAnalyzer`, `SheetAnalyzer`.
172
+ - **Resource**: `Resource`/`resource` (shared instance), `ProgressCallback`, `ResourceEventListener`, `ResourceItem`, `ResourceType`, `ResourceConfig`/`ResourceConfigData`/`ResourceConfigEntry`, `ResourceLoader`, `ResourceEventType`/`ResourceEvent`, `AnalyzerBase`, `ImageAnalyzer`, `JsonAnalyzer`, `TextAnalyzer`, `SoundAnalyzer`, `SheetAnalyzer`, `FontAnalyzer`.
166
173
 
167
174
  `examples/benchmark/` is dev-only tooling and is **not** exported from `index.ts`.
168
175
 
@@ -236,3 +243,15 @@ separate UI capability requiring Core 2.1.0 or later.
236
243
  See [text layout](text-layout.md) for the Core contract and
237
244
  [Label text layout](../../ui/docs/label-text-layout.md) for fit bounds, state
238
245
  restoration and shared-schema boundaries.
246
+
247
+ ## Bitmap fonts in 2.2.0
248
+
249
+ [bitmap-fonts.md](bitmap-fonts.md) documents the headless bitmap-font dependency,
250
+ FontAnalyzer and BitmapTextPipe. ResourceType.Font is built in; BitmapText
251
+ now draws via WebGL/Canvas. BitmapFontOptions controls page ownership. Native
252
+ font data comes from @kurot/bitmap-font; do not reimplement parsing/layout here.
253
+ The dependency is published @kurot/bitmap-font ^0.1.0, with no local override.
254
+ BitmapText.measureText() leaves rendered constraints and layout caches unchanged;
255
+ text borrows the font and the resource/caller retains ownership. Font pages are
256
+ full, unrotated textures at scale factor 1. Core 2.1.1 does not include these
257
+ changes. Source versions alone do not confirm Core publication.