@oh-just-another/renderer-core 0.60.0 → 0.61.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.
- package/CHANGELOG.md +49 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/caches/edge-cache-bitmap.d.ts.map +1 -0
- package/dist/caches/edge-cache-bitmap.js.map +1 -0
- package/dist/caches/edge-cache.d.ts.map +1 -0
- package/dist/caches/edge-cache.js.map +1 -0
- package/dist/caches/layer-cache-composite.d.ts.map +1 -0
- package/dist/caches/layer-cache-composite.js.map +1 -0
- package/dist/caches/lru-cache.d.ts.map +1 -0
- package/dist/caches/lru-cache.js.map +1 -0
- package/dist/caches/shape-cache-bitmap.d.ts.map +1 -0
- package/dist/caches/shape-cache-bitmap.js.map +1 -0
- package/dist/caches/shape-cache.d.ts.map +1 -0
- package/dist/caches/shape-cache.js.map +1 -0
- package/dist/caches/tile-renderer.d.ts.map +1 -0
- package/dist/caches/tile-renderer.js.map +1 -0
- package/dist/constants.d.ts +95 -9
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +98 -11
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +40 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -21
- package/dist/index.js.map +1 -1
- package/dist/raster/animation-adapter.d.ts.map +1 -0
- package/dist/raster/animation-adapter.js.map +1 -0
- package/dist/raster/image-source-guard.d.ts +2 -0
- package/dist/raster/image-source-guard.d.ts.map +1 -0
- package/dist/raster/image-source-guard.js +44 -0
- package/dist/raster/image-source-guard.js.map +1 -0
- package/dist/raster/js-rasterizer.d.ts.map +1 -0
- package/dist/raster/js-rasterizer.js.map +1 -0
- package/dist/raster/rasterizer.d.ts.map +1 -0
- package/dist/raster/rasterizer.js.map +1 -0
- package/dist/raster/wasm-bytes.d.ts.map +1 -0
- package/dist/raster/wasm-bytes.js.map +1 -0
- package/dist/rendering/built-in-renderers.d.ts +85 -0
- package/dist/rendering/built-in-renderers.d.ts.map +1 -0
- package/dist/rendering/built-in-renderers.js +1087 -0
- package/dist/rendering/built-in-renderers.js.map +1 -0
- package/dist/{edge-renderer.d.ts → rendering/edge-renderer.d.ts} +3 -3
- package/dist/rendering/edge-renderer.d.ts.map +1 -0
- package/dist/{edge-renderer.js → rendering/edge-renderer.js} +4 -4
- package/dist/rendering/edge-renderer.js.map +1 -0
- package/dist/{grid-renderer.d.ts → rendering/grid-renderer.d.ts} +1 -1
- package/dist/rendering/grid-renderer.d.ts.map +1 -0
- package/dist/{grid-renderer.js → rendering/grid-renderer.js} +1 -1
- package/dist/rendering/grid-renderer.js.map +1 -0
- package/dist/rendering/lod.d.ts +26 -0
- package/dist/rendering/lod.d.ts.map +1 -0
- package/dist/rendering/lod.js +5 -0
- package/dist/rendering/lod.js.map +1 -0
- package/dist/{scene-renderer.d.ts → rendering/scene-renderer.d.ts} +21 -21
- package/dist/rendering/scene-renderer.d.ts.map +1 -0
- package/dist/{scene-renderer.js → rendering/scene-renderer.js} +26 -9
- package/dist/rendering/scene-renderer.js.map +1 -0
- package/dist/{shape-renderer.d.ts → rendering/shape-renderer.d.ts} +32 -2
- package/dist/rendering/shape-renderer.d.ts.map +1 -0
- package/dist/rendering/shape-renderer.js.map +1 -0
- package/dist/targets/dim-target.d.ts.map +1 -0
- package/dist/targets/dim-target.js.map +1 -0
- package/dist/targets/layers.d.ts.map +1 -0
- package/dist/targets/layers.js.map +1 -0
- package/dist/{render-target.d.ts → targets/render-target.d.ts} +8 -0
- package/dist/targets/render-target.d.ts.map +1 -0
- package/dist/targets/render-target.js.map +1 -0
- package/dist/{text-editing.d.ts → text/text-editing.d.ts} +22 -1
- package/dist/text/text-editing.d.ts.map +1 -0
- package/dist/{text-editing.js → text/text-editing.js} +53 -12
- package/dist/text/text-editing.js.map +1 -0
- package/dist/{text-layout.d.ts → text/text-layout.d.ts} +1 -1
- package/dist/text/text-layout.d.ts.map +1 -0
- package/dist/text/text-layout.js.map +1 -0
- package/dist/{text-shaper.d.ts → text/text-shaper.d.ts} +9 -1
- package/dist/text/text-shaper.d.ts.map +1 -0
- package/dist/text/text-shaper.js +32 -0
- package/dist/text/text-shaper.js.map +1 -0
- package/package.json +3 -3
- package/dist/animation-adapter.d.ts.map +0 -1
- package/dist/animation-adapter.js.map +0 -1
- package/dist/built-in-renderers.d.ts +0 -25
- package/dist/built-in-renderers.d.ts.map +0 -1
- package/dist/built-in-renderers.js +0 -601
- package/dist/built-in-renderers.js.map +0 -1
- package/dist/dim-target.d.ts.map +0 -1
- package/dist/dim-target.js.map +0 -1
- package/dist/edge-cache-bitmap.d.ts.map +0 -1
- package/dist/edge-cache-bitmap.js.map +0 -1
- package/dist/edge-cache.d.ts.map +0 -1
- package/dist/edge-cache.js.map +0 -1
- package/dist/edge-renderer.d.ts.map +0 -1
- package/dist/edge-renderer.js.map +0 -1
- package/dist/grid-renderer.d.ts.map +0 -1
- package/dist/grid-renderer.js.map +0 -1
- package/dist/js-rasterizer.d.ts.map +0 -1
- package/dist/js-rasterizer.js.map +0 -1
- package/dist/layer-cache-composite.d.ts.map +0 -1
- package/dist/layer-cache-composite.js.map +0 -1
- package/dist/layers.d.ts.map +0 -1
- package/dist/layers.js.map +0 -1
- package/dist/lru-cache.d.ts.map +0 -1
- package/dist/lru-cache.js.map +0 -1
- package/dist/rasterizer.d.ts.map +0 -1
- package/dist/rasterizer.js.map +0 -1
- package/dist/render-target.d.ts.map +0 -1
- package/dist/render-target.js.map +0 -1
- package/dist/scene-renderer.d.ts.map +0 -1
- package/dist/scene-renderer.js.map +0 -1
- package/dist/shape-cache-bitmap.d.ts.map +0 -1
- package/dist/shape-cache-bitmap.js.map +0 -1
- package/dist/shape-cache.d.ts.map +0 -1
- package/dist/shape-cache.js.map +0 -1
- package/dist/shape-renderer.d.ts.map +0 -1
- package/dist/shape-renderer.js.map +0 -1
- package/dist/text-editing.d.ts.map +0 -1
- package/dist/text-editing.js.map +0 -1
- package/dist/text-layout.d.ts.map +0 -1
- package/dist/text-layout.js.map +0 -1
- package/dist/text-shaper.d.ts.map +0 -1
- package/dist/text-shaper.js +0 -16
- package/dist/text-shaper.js.map +0 -1
- package/dist/tile-renderer.d.ts.map +0 -1
- package/dist/tile-renderer.js.map +0 -1
- package/dist/wasm-bytes.d.ts.map +0 -1
- package/dist/wasm-bytes.js.map +0 -1
- /package/dist/{edge-cache-bitmap.d.ts → caches/edge-cache-bitmap.d.ts} +0 -0
- /package/dist/{edge-cache-bitmap.js → caches/edge-cache-bitmap.js} +0 -0
- /package/dist/{edge-cache.d.ts → caches/edge-cache.d.ts} +0 -0
- /package/dist/{edge-cache.js → caches/edge-cache.js} +0 -0
- /package/dist/{layer-cache-composite.d.ts → caches/layer-cache-composite.d.ts} +0 -0
- /package/dist/{layer-cache-composite.js → caches/layer-cache-composite.js} +0 -0
- /package/dist/{lru-cache.d.ts → caches/lru-cache.d.ts} +0 -0
- /package/dist/{lru-cache.js → caches/lru-cache.js} +0 -0
- /package/dist/{shape-cache-bitmap.d.ts → caches/shape-cache-bitmap.d.ts} +0 -0
- /package/dist/{shape-cache-bitmap.js → caches/shape-cache-bitmap.js} +0 -0
- /package/dist/{shape-cache.d.ts → caches/shape-cache.d.ts} +0 -0
- /package/dist/{shape-cache.js → caches/shape-cache.js} +0 -0
- /package/dist/{tile-renderer.d.ts → caches/tile-renderer.d.ts} +0 -0
- /package/dist/{tile-renderer.js → caches/tile-renderer.js} +0 -0
- /package/dist/{animation-adapter.d.ts → raster/animation-adapter.d.ts} +0 -0
- /package/dist/{animation-adapter.js → raster/animation-adapter.js} +0 -0
- /package/dist/{js-rasterizer.d.ts → raster/js-rasterizer.d.ts} +0 -0
- /package/dist/{js-rasterizer.js → raster/js-rasterizer.js} +0 -0
- /package/dist/{rasterizer.d.ts → raster/rasterizer.d.ts} +0 -0
- /package/dist/{rasterizer.js → raster/rasterizer.js} +0 -0
- /package/dist/{wasm-bytes.d.ts → raster/wasm-bytes.d.ts} +0 -0
- /package/dist/{wasm-bytes.js → raster/wasm-bytes.js} +0 -0
- /package/dist/{shape-renderer.js → rendering/shape-renderer.js} +0 -0
- /package/dist/{dim-target.d.ts → targets/dim-target.d.ts} +0 -0
- /package/dist/{dim-target.js → targets/dim-target.js} +0 -0
- /package/dist/{layers.d.ts → targets/layers.d.ts} +0 -0
- /package/dist/{layers.js → targets/layers.js} +0 -0
- /package/dist/{render-target.js → targets/render-target.js} +0 -0
- /package/dist/{text-layout.js → text/text-layout.js} +0 -0
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { req } from "@oh-just-another/types";
|
|
2
|
+
import { LIST_INDENT_EM } from "../constants.js";
|
|
2
3
|
/** Default multiplier from font size to line height (matches `drawText`). */
|
|
3
4
|
export const DEFAULT_LINE_HEIGHT_FACTOR = 1.2;
|
|
4
|
-
const wrapParagraph = (para, base, maxWidth, measure, out) => {
|
|
5
|
+
const wrapParagraph = (para, base, maxWidth, measure, out, paraIndex, indentX) => {
|
|
6
|
+
const lineBase = { indentX, para: paraIndex };
|
|
7
|
+
const first = () => out.length === 0 || req(out[out.length - 1]).para !== paraIndex;
|
|
5
8
|
if (para === "") {
|
|
6
|
-
out.push({ text: "", start: base, end: base, width: 0 });
|
|
9
|
+
out.push({ text: "", start: base, end: base, width: 0, ...lineBase, paraFirst: first() });
|
|
7
10
|
return;
|
|
8
11
|
}
|
|
9
12
|
// Word spans (non-whitespace runs) with offsets relative to `para`.
|
|
@@ -14,7 +17,14 @@ const wrapParagraph = (para, base, maxWidth, measure, out) => {
|
|
|
14
17
|
words.push({ s: m.index, e: m.index + m[0].length });
|
|
15
18
|
if (words.length === 0) {
|
|
16
19
|
// Whitespace-only paragraph — keep it as one line so offsets survive.
|
|
17
|
-
out.push({
|
|
20
|
+
out.push({
|
|
21
|
+
text: para,
|
|
22
|
+
start: base,
|
|
23
|
+
end: base + para.length,
|
|
24
|
+
width: measure(para),
|
|
25
|
+
...lineBase,
|
|
26
|
+
paraFirst: first(),
|
|
27
|
+
});
|
|
18
28
|
return;
|
|
19
29
|
}
|
|
20
30
|
// `white-space: pre-wrap` + `overflow-wrap: break-word` (standard):
|
|
@@ -28,7 +38,14 @@ const wrapParagraph = (para, base, maxWidth, measure, out) => {
|
|
|
28
38
|
let lineStart = 0;
|
|
29
39
|
const push = (start, end) => {
|
|
30
40
|
const text = para.slice(start, end);
|
|
31
|
-
out.push({
|
|
41
|
+
out.push({
|
|
42
|
+
text,
|
|
43
|
+
start: base + start,
|
|
44
|
+
end: base + end,
|
|
45
|
+
width: measure(text),
|
|
46
|
+
...lineBase,
|
|
47
|
+
paraFirst: first(),
|
|
48
|
+
});
|
|
32
49
|
};
|
|
33
50
|
let i = 0;
|
|
34
51
|
while (i < words.length) {
|
|
@@ -71,23 +88,40 @@ export const layoutText = (text, measure, options) => {
|
|
|
71
88
|
const lineHeight = options.fontSize * (options.lineHeightFactor ?? DEFAULT_LINE_HEIGHT_FACTOR);
|
|
72
89
|
const lines = [];
|
|
73
90
|
let paraStart = 0;
|
|
91
|
+
let paraIndex = 0;
|
|
74
92
|
for (let i = 0; i <= text.length; i++) {
|
|
75
93
|
if (i === text.length || text[i] === "\n") {
|
|
76
94
|
const para = text.slice(paraStart, i);
|
|
95
|
+
const attrs = options.paragraphs?.[paraIndex];
|
|
96
|
+
const levels = (attrs?.indent ?? 0) + (attrs?.list !== undefined ? 1 : 0);
|
|
97
|
+
const indentX = levels * LIST_INDENT_EM * options.fontSize;
|
|
77
98
|
if (options.maxWidth === undefined) {
|
|
78
|
-
lines.push({
|
|
99
|
+
lines.push({
|
|
100
|
+
text: para,
|
|
101
|
+
start: paraStart,
|
|
102
|
+
end: i,
|
|
103
|
+
width: measure(para),
|
|
104
|
+
indentX,
|
|
105
|
+
para: paraIndex,
|
|
106
|
+
paraFirst: true,
|
|
107
|
+
});
|
|
79
108
|
}
|
|
80
109
|
else {
|
|
81
|
-
|
|
110
|
+
// Keep at least one em of budget so a huge indent can't wedge the
|
|
111
|
+
// wrapper into zero-width lines.
|
|
112
|
+
const budget = Math.max(options.fontSize, options.maxWidth - indentX);
|
|
113
|
+
wrapParagraph(para, paraStart, budget, measure, lines, paraIndex, indentX);
|
|
82
114
|
}
|
|
83
115
|
paraStart = i + 1;
|
|
116
|
+
paraIndex++;
|
|
84
117
|
}
|
|
85
118
|
}
|
|
86
|
-
if (lines.length === 0)
|
|
87
|
-
lines.push({ text: "", start: 0, end: 0, width: 0 });
|
|
119
|
+
if (lines.length === 0) {
|
|
120
|
+
lines.push({ text: "", start: 0, end: 0, width: 0, indentX: 0, para: 0, paraFirst: true });
|
|
121
|
+
}
|
|
88
122
|
let widest = 0;
|
|
89
123
|
for (const l of lines)
|
|
90
|
-
widest = Math.max(widest, l.width);
|
|
124
|
+
widest = Math.max(widest, l.width + l.indentX);
|
|
91
125
|
const blockWidth = options.maxWidth ?? widest;
|
|
92
126
|
return { lines, lineHeight, blockWidth };
|
|
93
127
|
};
|
|
@@ -99,6 +133,13 @@ const lineLeftX = (lineWidth, blockWidth, align) => {
|
|
|
99
133
|
return blockWidth - lineWidth;
|
|
100
134
|
return 0;
|
|
101
135
|
};
|
|
136
|
+
/**
|
|
137
|
+
* Left edge of a laid-out line INCLUDING its list indent: alignment is
|
|
138
|
+
* computed within the space remaining after the indent, then shifted by
|
|
139
|
+
* it. The single source of glyph-left-x for the renderer, caret,
|
|
140
|
+
* click-to-caret and selection rects — keep them in lockstep.
|
|
141
|
+
*/
|
|
142
|
+
export const lineLeft = (line, blockWidth, align) => lineLeftX(line.width, blockWidth - line.indentX, align) + line.indentX;
|
|
102
143
|
/** Index of the line a caret offset falls on (handles boundaries). */
|
|
103
144
|
const lineIndexForCaret = (layout, caret) => {
|
|
104
145
|
const { lines } = layout;
|
|
@@ -122,7 +163,7 @@ export const caretGeometry = (layout, caret, measure, fontSize, align) => {
|
|
|
122
163
|
const line = req(layout.lines[i]);
|
|
123
164
|
const col = Math.max(0, Math.min(caret, line.end) - line.start);
|
|
124
165
|
const prefixWidth = col === 0 ? 0 : measure(line.text.slice(0, col));
|
|
125
|
-
const left =
|
|
166
|
+
const left = lineLeft(line, layout.blockWidth, align);
|
|
126
167
|
return { x: left + prefixWidth, y: i * layout.lineHeight, height: fontSize, line: i };
|
|
127
168
|
};
|
|
128
169
|
/**
|
|
@@ -133,7 +174,7 @@ export const pointToCaretIndex = (layout, point, measure, align) => {
|
|
|
133
174
|
const { lines, lineHeight } = layout;
|
|
134
175
|
const i = Math.max(0, Math.min(lines.length - 1, Math.floor(point.y / lineHeight)));
|
|
135
176
|
const line = req(lines[i]);
|
|
136
|
-
const left =
|
|
177
|
+
const left = lineLeft(line, layout.blockWidth, align);
|
|
137
178
|
// Walk columns, picking the boundary whose x is closest to point.x.
|
|
138
179
|
let best = 0;
|
|
139
180
|
let bestDist = Math.abs(left - point.x);
|
|
@@ -169,7 +210,7 @@ export const selectionRects = (layout, from, to, measure, align) => {
|
|
|
169
210
|
if (!(hi > line.end && lo <= line.end))
|
|
170
211
|
continue;
|
|
171
212
|
}
|
|
172
|
-
const left =
|
|
213
|
+
const left = lineLeft(line, layout.blockWidth, align);
|
|
173
214
|
const xa = left + (a === line.start ? 0 : measure(line.text.slice(0, a - line.start)));
|
|
174
215
|
const xb = left + (b === line.start ? 0 : measure(line.text.slice(0, b - line.start)));
|
|
175
216
|
// A line whose break is inside the selection gets a small trailing
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-editing.js","sourceRoot":"","sources":["../../src/text/text-editing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-layout.d.ts","sourceRoot":"","sources":["../../src/text/text-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM,MAAM,EACZ,QAAQ,YAAY,EACpB,SAAS,WAAW,KACnB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAiDvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-layout.js","sourceRoot":"","sources":["../../src/text/text-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,8 +43,16 @@ export interface ShapedGlyph {
|
|
|
43
43
|
* Install a process-global text shaper. Subsequent `getActiveTextShaper()`
|
|
44
44
|
* calls (used by the built-in `drawText` renderer) return it; passing `null`
|
|
45
45
|
* reverts to the Canvas2D `target.measureText` path. Idempotent — last write
|
|
46
|
-
* wins.
|
|
46
|
+
* wins. Registered listeners are notified so backends can react at the
|
|
47
|
+
* moment the shaper arrives (e.g. warm up a glyph atlas) instead of on
|
|
48
|
+
* the next frame that happens to draw text.
|
|
47
49
|
*/
|
|
48
50
|
export declare const setActiveTextShaper: (shaper: TextShaper | null) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Subscribe to active-shaper changes. Returns an unsubscribe function.
|
|
53
|
+
* The listener is NOT called for the current value — read it via
|
|
54
|
+
* `getActiveTextShaper()` first when needed.
|
|
55
|
+
*/
|
|
56
|
+
export declare const onTextShaperChange: (listener: (shaper: TextShaper | null) => void) => (() => void);
|
|
49
57
|
export declare const getActiveTextShaper: () => TextShaper | null;
|
|
50
58
|
//# sourceMappingURL=text-shaper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-shaper.d.ts","sourceRoot":"","sources":["../../src/text/text-shaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3D;;;OAGG;IACH,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,WAAW,EAAE,CAAC;CAChE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,UAAU,GAAG,IAAI,KAAG,IAG/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAK7F,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,UAAU,GAAG,IAAoB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Process-global active shaper. The built-in text renderer's signature is
|
|
2
|
+
// `(shape, target)` with no extra arg, so rather than thread a shaper
|
|
3
|
+
// through every renderer it consults this module-level registry at call
|
|
4
|
+
// time.
|
|
5
|
+
let activeShaper = null;
|
|
6
|
+
const shaperListeners = new Set();
|
|
7
|
+
/**
|
|
8
|
+
* Install a process-global text shaper. Subsequent `getActiveTextShaper()`
|
|
9
|
+
* calls (used by the built-in `drawText` renderer) return it; passing `null`
|
|
10
|
+
* reverts to the Canvas2D `target.measureText` path. Idempotent — last write
|
|
11
|
+
* wins. Registered listeners are notified so backends can react at the
|
|
12
|
+
* moment the shaper arrives (e.g. warm up a glyph atlas) instead of on
|
|
13
|
+
* the next frame that happens to draw text.
|
|
14
|
+
*/
|
|
15
|
+
export const setActiveTextShaper = (shaper) => {
|
|
16
|
+
activeShaper = shaper;
|
|
17
|
+
for (const listener of shaperListeners)
|
|
18
|
+
listener(shaper);
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Subscribe to active-shaper changes. Returns an unsubscribe function.
|
|
22
|
+
* The listener is NOT called for the current value — read it via
|
|
23
|
+
* `getActiveTextShaper()` first when needed.
|
|
24
|
+
*/
|
|
25
|
+
export const onTextShaperChange = (listener) => {
|
|
26
|
+
shaperListeners.add(listener);
|
|
27
|
+
return () => {
|
|
28
|
+
shaperListeners.delete(listener);
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export const getActiveTextShaper = () => activeShaper;
|
|
32
|
+
//# sourceMappingURL=text-shaper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-shaper.js","sourceRoot":"","sources":["../../src/text/text-shaper.ts"],"names":[],"mappings":"AA2CA,0EAA0E;AAC1E,sEAAsE;AACtE,wEAAwE;AACxE,QAAQ;AAER,IAAI,YAAY,GAAsB,IAAI,CAAC;AAC3C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuC,CAAC;AAEvE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAyB,EAAQ,EAAE;IACrE,YAAY,GAAG,MAAM,CAAC;IACtB,KAAK,MAAM,QAAQ,IAAI,eAAe;QAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAA6C,EAAgB,EAAE;IAChG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,GAAG,EAAE;QACV,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAsB,EAAE,CAAC,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-just-another/renderer-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.61.0",
|
|
4
4
|
"description": "Backend-agnostic rendering abstraction: a RenderTarget surface, an element-renderer registry, and a Scene walker.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Rustam Garifulin <rustam@n69.in>",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@oh-just-another/types": "0.57.0",
|
|
43
43
|
"@oh-just-another/math": "0.58.0",
|
|
44
|
-
"@oh-just-another/scene": "0.
|
|
45
|
-
"@oh-just-another/tokens": "0.
|
|
44
|
+
"@oh-just-another/scene": "0.62.0",
|
|
45
|
+
"@oh-just-another/tokens": "0.58.1"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "tsc -b tsconfig.build.json",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"animation-adapter.d.ts","sourceRoot":"","sources":["../src/animation-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,qBAAqB,CAAC,IAAI,GAAG,OAAO;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACrD;;;;OAIG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;CACtC;AAID,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,SAAS,qBAAqB,CAAC,CAAC,CAAC,KAAG,IAE/E,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,KAAG,IAEzD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,qBAAqB,GAAG,SACvD,CAAC;AAErB,eAAO,MAAM,kBAAkB,QAAO,SAAS,MAAM,EAA0B,CAAC;AAgBhF,eAAO,MAAM,uBAAuB,GAAI,IAAI,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAGnE,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAO,IAQ9C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,KAAK,MAAM,CAAC;AAK1E;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,cAAc,KAAG,IAEzD,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,QAAO,IAEtC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO;IACL,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,EACD,cAAa,MAA8B,KAC1C,OASF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"animation-adapter.js","sourceRoot":"","sources":["../src/animation-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA0BH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAI,OAAiC,EAAQ,EAAE;IACrF,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC/D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAqC,EAAE,CACrF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAErB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAsB,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAc,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAc,EAAgB,EAAE;IACtE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAS,EAAE;IACpD,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,EAAE,EAAE,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAwBF,IAAI,cAAc,GAAmB,GAAG,EAAE,CACxC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAqB,EAAQ,EAAE;IAC/D,cAAc,GAAG,KAAK,CAAC;AACzB,CAAC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAS,EAAE;IAC5C,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAKC,EACD,cAAsB,cAAc,CAAC,KAAK,CAAC,EAClC,EAAE;IACX,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { RenderTarget } from "./render-target.js";
|
|
2
|
-
/**
|
|
3
|
-
* Build a rounded-rect path via the standard "4 corners with
|
|
4
|
-
* quadratic Bezier arcs" pattern — same shape every backend
|
|
5
|
-
* understands without a special `roundRect()` API:
|
|
6
|
-
*
|
|
7
|
-
* ┌───arc───┐
|
|
8
|
-
* │ │
|
|
9
|
-
* arc arc
|
|
10
|
-
* │ │
|
|
11
|
-
* └───arc───┘
|
|
12
|
-
*
|
|
13
|
-
* Quadratic control points sit at each corner of the rect; the
|
|
14
|
-
* curve goes from `r` units along one side to `r` units along the
|
|
15
|
-
* adjacent side.
|
|
16
|
-
*
|
|
17
|
-
* Radius `r` is pre-clamped by `getCornerRadius` to half the
|
|
18
|
-
* smaller side, so no overlap-handling is needed here.
|
|
19
|
-
*/
|
|
20
|
-
export declare const buildRoundedRectPath: (target: RenderTarget, x: number, y: number, w: number, h: number, r: number) => void;
|
|
21
|
-
/**
|
|
22
|
-
* Registers renderers for every `BuiltinElement` type.
|
|
23
|
-
*/
|
|
24
|
-
export declare const installBuiltinRenderers: () => void;
|
|
25
|
-
//# sourceMappingURL=built-in-renderers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"built-in-renderers.d.ts","sourceRoot":"","sources":["../src/built-in-renderers.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkGvD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,YAAY,EACpB,GAAG,MAAM,EACT,GAAG,MAAM,EACT,GAAG,MAAM,EACT,GAAG,MAAM,EACT,GAAG,MAAM,KACR,IAWF,CAAC;AA2VF;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAO,IAkB1C,CAAC"}
|