xbintsc 0.3.79 → 0.3.81

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 (53) hide show
  1. package/README.md +1 -3
  2. package/README.zh-CN.md +1 -2
  3. package/dist/src/driver/compiler.js +6 -1
  4. package/dist/src/driver/compiler.js.map +1 -1
  5. package/dist/src/extensions/gui/index.js +10 -2
  6. package/dist/src/extensions/gui/index.js.map +1 -1
  7. package/dist/tests/e2e/gui-example-svg.test.d.ts +21 -0
  8. package/dist/tests/e2e/gui-example-svg.test.js +105 -0
  9. package/dist/tests/e2e/gui-example-svg.test.js.map +1 -0
  10. package/dist/tests/e2e/gui-transform.test.d.ts +7 -0
  11. package/dist/tests/e2e/gui-transform.test.js +198 -0
  12. package/dist/tests/e2e/gui-transform.test.js.map +1 -0
  13. package/doc/ai/cli.md +5 -0
  14. package/doc/ai/extensions.md +5 -1
  15. package/doc/ai/zh-CN/extensions.md +5 -1
  16. package/doc/gui/animation.md +53 -2
  17. package/doc/gui/api.md +1 -1
  18. package/doc/gui/dom.md +6 -1
  19. package/doc/gui/input.md +4 -1
  20. package/doc/gui/known-issues.md +16 -4
  21. package/doc/gui/layout.md +36 -0
  22. package/doc/gui/rendering.md +15 -0
  23. package/doc/gui.md +32 -3
  24. package/doc/implemented.md +1 -1
  25. package/doc/zh-CN/gui/animation.md +49 -2
  26. package/doc/zh-CN/gui/api.md +1 -1
  27. package/doc/zh-CN/gui/dom.md +6 -1
  28. package/doc/zh-CN/gui/input.md +2 -0
  29. package/doc/zh-CN/gui/known-issues.md +12 -2
  30. package/doc/zh-CN/gui/layout.md +31 -0
  31. package/doc/zh-CN/gui/rendering.md +11 -0
  32. package/doc/zh-CN/gui.md +28 -3
  33. package/doc/zh-CN/implemented.md +1 -1
  34. package/package.json +1 -1
  35. package/runtime/ext_gui/document.cpp +21 -3
  36. package/runtime/ext_gui/document.h +4 -1
  37. package/runtime/ext_gui/dom_api_node.cpp +6 -4
  38. package/runtime/ext_gui/layout.cpp +78 -1
  39. package/runtime/ext_gui/layout.h +21 -0
  40. package/runtime/ext_gui/paint.cpp +48 -15
  41. package/runtime/ext_gui/paint.h +8 -2
  42. package/runtime/ext_gui/renderer.cpp +4 -2
  43. package/runtime/ext_gui/renderer_image.cpp +2 -1
  44. package/runtime/ext_gui/renderer_internal.h +6 -1
  45. package/runtime/ext_gui/renderer_text.cpp +37 -15
  46. package/runtime/ext_gui/style.h +10 -0
  47. package/runtime/ext_gui/style_print.cpp +6 -0
  48. package/runtime/ext_gui/style_values.cpp +43 -0
  49. package/runtime/ext_gui/transform.cpp +412 -0
  50. package/runtime/ext_gui/transform.h +112 -0
  51. package/runtime/ext_gui/window.cpp +6 -4
  52. package/src/driver/compiler.ts +6 -1
  53. package/src/extensions/gui/index.ts +10 -2
package/README.md CHANGED
@@ -272,9 +272,7 @@ In a project, list the extension in `xbintsc.config.json`
272
272
  `node`. `XT_GUI_AUTOCLOSE_MS=<ms>` closes all windows after a delay, which is how
273
273
  the end-to-end tests run the examples headlessly.
274
274
 
275
- Two examples live in the repository: [`examples/gui/hello.ts`](./examples/gui/hello.ts)
276
- (an HTML/CSS window plus a reactive counter) and
277
- [`examples/gui/pelican-bike`](./examples/gui/pelican-bike), a playable 2D game
275
+ [`examples/gui/pelican-bike`](./examples/gui/pelican-bike) is a playable 2D game
278
276
  whose document also opens unchanged in a browser.
279
277
 
280
278
  Platforms and full details: [doc/gui.md](./doc/gui.md) is the engine overview
package/README.zh-CN.md CHANGED
@@ -221,8 +221,7 @@ xbintsc run app.ts --ext gui
221
221
  `--ext gui`,与 `node` 完全一样。设置 `XT_GUI_AUTOCLOSE_MS=<ms>` 可在指定毫秒后
222
222
  自动关闭所有窗口,端到端测试正是用它无头运行示例。
223
223
 
224
- 仓库里有两个示例:[`examples/gui/hello.ts`](./examples/gui/hello.ts)(HTML/CSS 窗口
225
- 加一个响应式计数器)与 [`examples/gui/pelican-bike`](./examples/gui/pelican-bike)
224
+ 仓库里的示例是 [`examples/gui/pelican-bike`](./examples/gui/pelican-bike)
226
225
  ——一个可玩的 2D 游戏,它的同一份文档在浏览器里也能直接打开。
227
226
 
228
227
  平台与完整说明:[doc/zh-CN/gui.md](./doc/zh-CN/gui.md) 是引擎总览(架构与
@@ -7,7 +7,7 @@
7
7
  * nothing relevant changed.
8
8
  */
9
9
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
10
- import { basename, extname, join, resolve } from "node:path";
10
+ import { basename, dirname, extname, join, resolve } from "node:path";
11
11
  import { DiagnosticBag, DiagnosticCode } from "../diagnostics/diagnostic.js";
12
12
  import { SourceFile } from "../diagnostics/source.js";
13
13
  import { sourceTextBytes } from "../diagnostics/source-text.js";
@@ -193,6 +193,11 @@ export function build(entryPath, options = {}) {
193
193
  return { outputPath, cached: false, diagnostics: diagnostics.diagnostics, ir };
194
194
  }
195
195
  mkdirSync(outDir, { recursive: true });
196
+ /* An explicit `-o path/to/app.exe` (or `output` in the config) may name a
197
+ * directory that does not exist yet: the IR and object files land in `outDir`,
198
+ * but clang writes the *executable* to `outputPath`, and a missing parent
199
+ * directory there makes the link fail with `LNK1104: cannot open file`. */
200
+ mkdirSync(dirname(outputPath), { recursive: true });
196
201
  const irPath = resolve(outDir, basename(absoluteEntry, extname(absoluteEntry)) + ".ll");
197
202
  writeFileSync(irPath, ir);
198
203
  if (emit === "ir") {
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/driver/compiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/driver/compiler.ts"],"names":[],"mappings":"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"}
@@ -91,8 +91,16 @@ export const guiExtension = {
91
91
  "-luser32", "-lgdi32", "-lshell32",
92
92
  "-lole32", "-loleaut32", "-luuid", "-ladvapi32",
93
93
  "-lwinmm", "-limm32", "-lversion", "-lsetupapi",
94
- /* The engine is C++; link the MSVC C++ runtime. */
95
- "-lmsvcprt",
94
+ /* The engine is C++, but `msvcprt` (the DLL C++ runtime) must not be
95
+ * named here: `gui.lib` is built with `CMAKE_MSVC_RUNTIME_LIBRARY=
96
+ * MultiThreaded` and every engine object records `libcpmt` (the static
97
+ * C++ runtime) as a dependent library — see `scripts/build-gui.ts`.
98
+ * The two runtimes define the same symbols, so requesting the DLL one
99
+ * as well fails the link with `LNK2038: mismatch detected for
100
+ * 'RuntimeLibrary'` plus a wall of `LNK2005: already defined` errors
101
+ * (surfacing as `clang: linker command failed with exit code 1169`).
102
+ * clang links the static `libcpmt` by default, which is the CRT the
103
+ * archive and the xbintsc runtime objects were both built against. */
96
104
  ];
97
105
  }
98
106
  return ["-lX11", "-lwayland-client", "-lEGL", "-lGL", "-ldl", "-lpthread", "-lstdc++"];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/gui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/gui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * End-to-end test for `examples/gui/pelican-svg` — the SVG gallery page that
3
+ * animates a CSS `transform` from the frame loop.
4
+ *
5
+ * The example's own `main.ts` is compiled here together with its `index.html`
6
+ * (the `gui` extension compiles the document and the `<img>` path it points at),
7
+ * linked against the prebuilt `gui.a`, and run under the `XT_GUI_AUTOCLOSE_MS`
8
+ * hang guard. The assertions read the example's `label=value` report, which is
9
+ * printed from the first presented frame:
10
+ *
11
+ * - the document parsed, the SVG decoded and the image reached the paint list;
12
+ * - the artwork's *layout* box is the 720x520 box CSS asked for;
13
+ * - each frame's pose (a `transform` list parsed by the engine) composed into a
14
+ * matrix that reached the display list, and the reported bounding box moved
15
+ * with it — a paint-time transform does not touch layout;
16
+ * - hit testing still lands on the `<img>` through the transform.
17
+ *
18
+ * The pose values themselves are wall-clock dependent (`requestAnimationFrame`
19
+ * timestamps), so the test matches their *shape*, not their numbers.
20
+ */
21
+ export {};
@@ -0,0 +1,105 @@
1
+ /**
2
+ * End-to-end test for `examples/gui/pelican-svg` — the SVG gallery page that
3
+ * animates a CSS `transform` from the frame loop.
4
+ *
5
+ * The example's own `main.ts` is compiled here together with its `index.html`
6
+ * (the `gui` extension compiles the document and the `<img>` path it points at),
7
+ * linked against the prebuilt `gui.a`, and run under the `XT_GUI_AUTOCLOSE_MS`
8
+ * hang guard. The assertions read the example's `label=value` report, which is
9
+ * printed from the first presented frame:
10
+ *
11
+ * - the document parsed, the SVG decoded and the image reached the paint list;
12
+ * - the artwork's *layout* box is the 720x520 box CSS asked for;
13
+ * - each frame's pose (a `transform` list parsed by the engine) composed into a
14
+ * matrix that reached the display list, and the reported bounding box moved
15
+ * with it — a paint-time transform does not touch layout;
16
+ * - hit testing still lands on the `<img>` through the transform.
17
+ *
18
+ * The pose values themselves are wall-clock dependent (`requestAnimationFrame`
19
+ * timestamps), so the test matches their *shape*, not their numbers.
20
+ */
21
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
22
+ import { tmpdir } from "node:os";
23
+ import { dirname, join, resolve } from "node:path";
24
+ import { spawnSync } from "node:child_process";
25
+ import { fileURLToPath } from "node:url";
26
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
27
+ import { build } from "../../src/driver/compiler.js";
28
+ import { createDefaultRegistry } from "../../src/extensions/registry.js";
29
+ import { guiExtension } from "../../src/extensions/gui/index.js";
30
+ import { nodeExtension } from "../../src/extensions/node/index.js";
31
+ import { guiAvailable } from "./gui-helpers.js";
32
+ /** The example lives at <repo>/examples/gui/pelican-svg. */
33
+ const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
34
+ const exampleDir = join(repoRoot, "examples", "gui", "pelican-svg");
35
+ /** Windows reports an access violation as this NTSTATUS exit code; on POSIX the
36
+ * same documented teardown fault surfaces as a signal (see
37
+ * `doc/gui/known-issues.md`). */
38
+ const ACCESS_VIOLATION = 3221225477;
39
+ const CRASH_SIGNALS = new Set(["SIGSEGV", "SIGBUS", "SIGABRT", "SIGILL", "SIGFPE"]);
40
+ let workdir = "";
41
+ describe.skipIf(!guiAvailable)("gui example — pelican svg", () => {
42
+ beforeAll(() => {
43
+ workdir = mkdtempSync(join(tmpdir(), "xbintsc-pelican-svg-"));
44
+ writeFileSync(join(workdir, "index.html"), readFileSync(join(exampleDir, "index.html"), "utf8"));
45
+ writeFileSync(join(workdir, "pelican-svg.ts"), readFileSync(join(exampleDir, "main.ts"), "utf8"));
46
+ });
47
+ afterAll(() => {
48
+ rmSync(workdir, { recursive: true, force: true });
49
+ });
50
+ it("compiles the gallery and animates the artwork", () => {
51
+ const extensions = createDefaultRegistry().register(guiExtension).register(nodeExtension);
52
+ const result = build(join(workdir, "pelican-svg.ts"), {
53
+ emit: "exe",
54
+ outDir: join(workdir, "out"),
55
+ cacheDir: join(workdir, ".cache"),
56
+ extensions,
57
+ });
58
+ expect(result.diagnostics.filter((diagnostic) => diagnostic.category === "error")).toEqual([]);
59
+ /* The example finds the artwork relative to the working directory, so it is
60
+ spawned from the repository root — the same way the CLI runs it. */
61
+ const executed = spawnSync(result.outputPath, [], {
62
+ cwd: repoRoot,
63
+ encoding: "utf8",
64
+ env: { ...process.env, XT_GUI_AUTOCLOSE_MS: "4000" },
65
+ });
66
+ const crashed = executed.status === ACCESS_VIOLATION ||
67
+ (executed.status === null && executed.signal !== null && CRASH_SIGNALS.has(executed.signal));
68
+ const outcome = executed.signal !== null ? `signal ${executed.signal}` : `exit ${executed.status}`;
69
+ expect(executed.status === 0 || crashed, `unexpected ${outcome}\nstderr:\n${executed.stderr}`).toBe(true);
70
+ const stdout = executed.stdout ?? "";
71
+ const value = (label) => {
72
+ const found = stdout.split("\n").find((entry) => entry.startsWith(`${label}=`));
73
+ expect(found, `missing ${label} in stdout:\n${stdout}\nstderr:\n${executed.stderr}`).toBeDefined();
74
+ return found.slice(label.length + 1).trim();
75
+ };
76
+ // The window, the backend and the document: the artwork laid out at 720x520
77
+ // and the vector source decoded into a single painted image.
78
+ expect(value("window")).toBe("800x640 (gui extension, SDL_GPU)");
79
+ expect(value("art-box")).toBe("x=40 y=35 720x520");
80
+ expect(value("painted-images")).toBe("1");
81
+ expect(value("painted-image")).toMatch(/^image x=40\.0 y=35\.0 w=720\.0 h=520\.0 src=.*pelican-bike\.svg$/);
82
+ expect(value("svg-declares")).toBe("720x520");
83
+ expect(value("svg-has-viewbox")).toBe("true");
84
+ expect(value("svg-paths")).toBe("44");
85
+ // The SVG is `<img>` content, so it is hit-testable like any other element,
86
+ // and `transform-origin` came through the cascade unresolved (`%`), as CSS
87
+ // requires: layout resolves it against the border box.
88
+ expect(value("hit-test")).toBe("img#art");
89
+ expect(value("art-origin")).toBe("50% 92%");
90
+ // The frame loop applied a pose: a `transform` list the engine parsed into a
91
+ // matrix, which is what the renderer received for the image quad.
92
+ /* Match the *shape* only: the values follow the wall clock, and the engine's
93
+ canonical spelling trims trailing zeros (`rotate(0.8deg)`, not `0.80deg`). */
94
+ const pose = /^translateY\(-?[\d.]+px\) rotate\(-?[\d.]+deg\) scale\([\d.]+, [\d.]+\)$/;
95
+ expect(value("art-pose@1")).toMatch(pose);
96
+ expect(value("art-pose@2")).toMatch(pose);
97
+ expect(value("art-matrix")).toMatch(/^matrix\(/);
98
+ // ...and the geometry the DOM reports follows the transform, while the
99
+ // layout box above stayed at 720x520.
100
+ const moved = value("art-moved-box");
101
+ expect(moved).toMatch(/^x=-?\d+ y=-?\d+ \d+x\d+$/);
102
+ expect(moved).not.toBe("x=40 y=35 720x520");
103
+ });
104
+ });
105
+ //# sourceMappingURL=gui-example-svg.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gui-example-svg.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-example-svg.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * End-to-end tests for the `gui` extension — CSS `transform` and
3
+ * `transform-origin`: parsing/computed style, the matrix the paint list carries,
4
+ * transformed geometry (`getBoundingClientRect`), hit testing, and animating a
5
+ * transform through a CSS transition.
6
+ */
7
+ export {};
@@ -0,0 +1,198 @@
1
+ /**
2
+ * End-to-end tests for the `gui` extension — CSS `transform` and
3
+ * `transform-origin`: parsing/computed style, the matrix the paint list carries,
4
+ * transformed geometry (`getBoundingClientRect`), hit testing, and animating a
5
+ * transform through a CSS transition.
6
+ */
7
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
8
+ import { createGuiHarness, guiAvailable } from "./gui-helpers.js";
9
+ const harness = createGuiHarness();
10
+ describe.skipIf(!guiAvailable)("gui extension — transform", () => {
11
+ beforeAll(() => harness.setup());
12
+ afterAll(() => harness.cleanup());
13
+ it("composes translate/rotate/scale into one matrix", () => {
14
+ const { stdout, value } = harness.compileAndRun("transform-matrix", `
15
+ import { createWindow, run } from "gui";
16
+
17
+ const HTML = \`
18
+ <html><head><style>
19
+ body { margin: 0; }
20
+ #moved {
21
+ position: absolute; left: 100px; top: 100px; width: 100px; height: 50px;
22
+ background-color: #ff0000;
23
+ transform-origin: 0 0;
24
+ transform: rotate(90deg) translate(10px, 0px);
25
+ }
26
+ #grew {
27
+ position: absolute; left: 100px; top: 200px; width: 40px; height: 20px;
28
+ background-color: #00ff00;
29
+ transform: scale(2, 3);
30
+ }
31
+ </style></head><body>
32
+ <div id="moved"></div><div id="grew"></div>
33
+ </body></html>
34
+ \`;
35
+
36
+ const win = createWindow({ title: "transform", width: 400, height: 300 });
37
+ win.on("ready", () => {
38
+ console.log("computed=" + win.computedStyle("#moved", "transform"));
39
+ console.log("origin=" + win.computedStyle("#moved", "transform-origin"));
40
+ console.log("default-origin=" + win.computedStyle("#grew", "transform-origin"));
41
+ const moved = win.getBoundingClientRect("#moved");
42
+ console.log("moved=" + moved.x.toFixed(1) + "," + moved.y.toFixed(1) + "," +
43
+ moved.width.toFixed(1) + "," + moved.height.toFixed(1));
44
+ const grew = win.getBoundingClientRect("#grew");
45
+ console.log("grew=" + grew.x.toFixed(1) + "," + grew.y.toFixed(1) + "," +
46
+ grew.width.toFixed(1) + "," + grew.height.toFixed(1));
47
+ console.log(win.paintList().trim());
48
+ win.close();
49
+ });
50
+ win.loadHTML(HTML);
51
+ run();
52
+ `);
53
+ expect(value("computed")).toBe("rotate(90deg) translate(10px, 0px)");
54
+ expect(value("origin")).toBe("0px 0px");
55
+ // `transform-origin` defaults to the centre of the border box.
56
+ expect(value("default-origin")).toBe("50% 50%");
57
+ /* rotate(90deg) about the top-left corner turns the 100x50 box into a
58
+ * 50x100 one; the local `translate(10px, 0)` moves it 10px down. */
59
+ expect(value("moved")).toBe("50.0,110.0,50.0,100.0");
60
+ // `scale(2, 3)` about the centre: 40x20 -> 80x60, centred on the same point.
61
+ expect(value("grew")).toBe("80.0,180.0,80.0,60.0");
62
+ // Paint keeps the untransformed layout geometry and carries the matrix.
63
+ expect(stdout).toContain("rect x=100.0 y=100.0 w=100.0 h=50.0 r=0.0 color=#ff0000ff transform=matrix(");
64
+ expect(stdout).toContain("transform=matrix(2,0,0,3,-120,-420)");
65
+ });
66
+ it("parses the 3d spellings and drops unsupported functions", () => {
67
+ const { stdout, value } = harness.compileAndRun("transform-parse", `
68
+ import { createWindow, run } from "gui";
69
+
70
+ const HTML = \`
71
+ <html><head><style>
72
+ body { margin: 0; }
73
+ #a {
74
+ position: absolute; left: 0px; top: 0px; width: 40px; height: 20px;
75
+ background-color: #ff0000; transform-origin: 0 0;
76
+ transform: translate3d(10px, 4px, 0) scale3d(2, 3, 1) rotateZ(0.5turn);
77
+ }
78
+ #b {
79
+ position: absolute; left: 0px; top: 100px; width: 40px; height: 20px;
80
+ background-color: #00ff00; transform: skewX(10deg);
81
+ }
82
+ #c {
83
+ position: absolute; left: 100px; top: 100px; width: 100px; height: 50px;
84
+ background-color: #0000ff; transform-origin: 0 0;
85
+ transform: translate(50%, 50%);
86
+ }
87
+ #d { transform-origin: top; }
88
+ #e { transform-origin: bottom right; }
89
+ #f { transform-origin: 10px; }
90
+ </style></head><body><div id="a"></div><div id="b"></div><div id="c"></div>
91
+ <div id="d"></div><div id="e"></div><div id="f"></div></body></html>
92
+ \`;
93
+
94
+ const win = createWindow({ title: "parse", width: 400, height: 300 });
95
+ win.on("ready", () => {
96
+ console.log("a=" + win.computedStyle("#a", "transform"));
97
+ console.log("b=" + win.computedStyle("#b", "transform"));
98
+ console.log("c=" + win.computedStyle("#c", "transform"));
99
+ /* translate(50%, 50%) resolves against the box: 50px, 25px. */
100
+ console.log("c-rect=" + win.getBoundingClientRect("#c").x.toFixed(1) + "," +
101
+ win.getBoundingClientRect("#c").y.toFixed(1));
102
+ /* A vertical keyword keeps x centred; bottom-right is right-bottom. */
103
+ console.log("d-origin=" + win.computedStyle("#d", "transform-origin"));
104
+ console.log("e-origin=" + win.computedStyle("#e", "transform-origin"));
105
+ console.log("f-origin=" + win.computedStyle("#f", "transform-origin"));
106
+ console.log(win.paintList().trim());
107
+ win.close();
108
+ });
109
+ win.loadHTML(HTML);
110
+ run();
111
+ `);
112
+ // `translate3d`/`scale3d` keep their x/y and drop `z`; `rotateZ` is `rotate`.
113
+ expect(value("a")).toBe("translate(10px, 4px) scale(2, 3) rotate(180deg)");
114
+ // An unsupported function invalidates the whole declaration.
115
+ expect(value("b")).toBe("none");
116
+ // Percentages stay unresolved in the computed value and resolve in layout.
117
+ expect(value("c")).toBe("translate(50%, 50%)");
118
+ expect(value("c-rect")).toBe("150.0,125.0");
119
+ expect(value("d-origin")).toBe("50% 0%");
120
+ expect(value("e-origin")).toBe("100% 100%");
121
+ expect(value("f-origin")).toBe("10px 50%");
122
+ expect(stdout).toContain("transform=matrix(1,0,0,1,50,25)");
123
+ });
124
+ it("hit tests through the transform", () => {
125
+ const { value } = harness.compileAndRun("transform-hit", `
126
+ import { createWindow, run } from "gui";
127
+
128
+ const HTML = \`
129
+ <html><head><style>
130
+ body { margin: 0; }
131
+ #box {
132
+ position: absolute; left: 100px; top: 100px; width: 100px; height: 50px;
133
+ background-color: #ff0000;
134
+ transform-origin: 0 0;
135
+ transform: rotate(90deg);
136
+ }
137
+ </style></head><body><div id="box"></div></body></html>
138
+ \`;
139
+
140
+ const win = createWindow({ title: "hit", width: 400, height: 300 });
141
+ win.on("ready", () => {
142
+ /* The rotated box covers x 50..150, y 100..200 and no longer covers the
143
+ * area it occupied before the rotation (x 100..200). */
144
+ console.log("rotated=" + win.hitTest(60, 190));
145
+ console.log("vacated=" + win.hitTest(190, 110));
146
+ win.close();
147
+ });
148
+ win.loadHTML(HTML);
149
+ run();
150
+ `);
151
+ expect(value("rotated")).toBe("div#box");
152
+ expect(value("vacated")).toBe("");
153
+ });
154
+ it("animates `transform` through a CSS transition", () => {
155
+ const { value } = harness.compileAndRun("transform-transition", `
156
+ import { createWindow, run } from "gui";
157
+
158
+ const HTML = \`
159
+ <html><head><style>
160
+ body { margin: 0; }
161
+ #box {
162
+ position: absolute; left: 20px; top: 200px; width: 60px; height: 30px;
163
+ background-color: #0000ff;
164
+ transform: translateX(0px) rotate(0deg);
165
+ transition: transform 400ms linear;
166
+ }
167
+ #box:hover { transform: translateX(40px) rotate(90deg); }
168
+ </style></head><body><div id="box"></div></body></html>
169
+ \`;
170
+
171
+ const win = createWindow({ title: "transition", width: 400, height: 300 });
172
+ win.on("ready", () => {
173
+ console.log("start=" + win.computedStyle("#box", "transform"));
174
+ win.sendEvent("mousemove", { x: 50, y: 215 });
175
+ win.advance(100);
176
+ console.log("q1=" + win.computedStyle("#box", "transform"));
177
+ win.advance(200);
178
+ console.log("q3=" + win.computedStyle("#box", "transform"));
179
+ win.advance(200);
180
+ console.log("end=" + win.computedStyle("#box", "transform"));
181
+ const end = win.getBoundingClientRect("#box");
182
+ console.log("end-rect=" + end.x.toFixed(1) + "," + end.y.toFixed(1) + "," +
183
+ end.width.toFixed(1) + "," + end.height.toFixed(1));
184
+ win.close();
185
+ });
186
+ win.loadHTML(HTML);
187
+ run();
188
+ `);
189
+ expect(value("start")).toBe("translateX(0px) rotate(0deg)");
190
+ // 100/400 and 300/400 of the way between the two lists, linearly.
191
+ expect(value("q1")).toBe("translateX(10px) rotate(22.5deg)");
192
+ expect(value("q3")).toBe("translateX(30px) rotate(67.5deg)");
193
+ expect(value("end")).toBe("translateX(40px) rotate(90deg)");
194
+ // Moved 40px right and rotated a quarter turn about its centre.
195
+ expect(value("end-rect")).toBe("75.0,185.0,30.0,60.0");
196
+ });
197
+ });
198
+ //# sourceMappingURL=gui-transform.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gui-transform.test.js","sourceRoot":"","sources":["../../../tests/e2e/gui-transform.test.ts"],"names":[],"mappings":"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"}
package/doc/ai/cli.md CHANGED
@@ -46,6 +46,11 @@ Parsing details that occasionally surprise:
46
46
  `run`, or is a positional for the other commands.
47
47
  - `-o` consumes the next argument unconditionally; the other value flags leave
48
48
  the value unset when the next argument starts with `-`.
49
+ - `-o`/`output` may name a directory that does not exist yet: the driver creates
50
+ the parent directories of the output path. (`--out` likewise creates its
51
+ directory.) Without that, an explicit path such as `-o dist/app.exe` where
52
+ `dist/` was missing used to fail inside the linker, since clang — not xbintsc —
53
+ is what writes the executable.
49
54
 
50
55
  ## Project config
51
56
 
@@ -76,7 +76,11 @@ with elements and CSS (see `examples/gui/media.ts`). Video frames and audio PCM
76
76
  are decoded on the main thread. `<canvas>` is supported too: `getContext("2d")`
77
77
  returns a context whose fills, paths, text and `drawImage` are rasterised by a
78
78
  self-written CPU rasteriser, and element handles expose `canvas` drawing plus
79
- `width`/`height`. If that archive is missing for
79
+ `width`/`height`. CSS `transform`/`transform-origin` work as paint-time
80
+ effects, so a box (and the text, images and children in it) can be translated,
81
+ scaled and rotated without reflowing anything — animate it per frame from
82
+ `requestAnimationFrame` or with `transition: transform` (see
83
+ `examples/gui/pelican-svg`). If that archive is missing for
80
84
  your platform, the build fails with an actionable message; design and roadmap
81
85
  live in [../gui.md](../gui.md) (overview; the engine is documented by function
82
86
  under [`doc/gui/`](../gui/)), and the scripting surface in
@@ -69,7 +69,11 @@ import { createWindow, run } from "gui";
69
69
  `loadedmetadata`/`play`/`pause`/`ended`/`timeupdate`/`error` 事件可让程序驱动播放。
70
70
  没有内置控件——用元素和 CSS 自绘控件(见 `examples/gui/media.ts`);视频帧与音频 PCM
71
71
  都在主线程解码。也支持 `<canvas>`:`getContext("2d")` 返回的上下文,其填充、路径、
72
- 文本与 `drawImage` 由自研 CPU 光栅器处理,元素句柄还暴露 `width`/`height`。因为主体是 C++,它以各平台预编译的 `gui.a`/`gui.lib` 形式分发。如果该
72
+ 文本与 `drawImage` 由自研 CPU 光栅器处理,元素句柄还暴露 `width`/`height`。CSS
73
+ `transform`/`transform-origin` 作为绘制期效果可用,因此一个盒子(以及其中的文本、
74
+ 图像与子元素)可以被平移、缩放与旋转而不触发任何重排——可以用
75
+ `requestAnimationFrame` 逐帧驱动,或写成 `transition: transform`(见
76
+ `examples/gui/pelican-svg`)。因为主体是 C++,它以各平台预编译的 `gui.a`/`gui.lib` 形式分发。如果该
73
77
  平台的归档不存在,构建会以明确的提示失败;设计与路线图见 [../../zh-CN/gui.md](../../zh-CN/gui.md)(总览;引擎按功能拆分在 [`doc/zh-CN/gui/`](../../zh-CN/gui/) 下),
74
78
  脚本接口见 [../../zh-CN/gui-scripts.md](../../zh-CN/gui-scripts.md)。媒体播放是
75
79
  Windows 唯一不支持的:Windows 的 `gui.a` 不构建 FFmpeg,媒体槽位为空操作。Canvas API
@@ -31,8 +31,10 @@ the engine advances the clock with real frame deltas (`XtDocument::advance`),
31
31
  and `win.advance(ms)` lets tests step it deterministically.
32
32
 
33
33
  - Supported properties: `background-color`, `color`, `border-color`,
34
- `border-radius`; `transition: all` covers them. Structural/layout-affecting
35
- properties are not animated yet (that would relayout every frame).
34
+ `border-radius` and `transform`; `transition: all` covers them. A
35
+ layout-affecting property (width, position, …) is still not animated — that
36
+ would reflow every frame — but `transform` is paint-time, so animating it costs
37
+ one matrix per animated box per frame ([Layout](./layout.md#transforms-m15)).
36
38
  - Both the `transition` shorthand and the `transition-property` / `-duration` /
37
39
  `-delay` / `-timing-function` longhands are parsed; time values accept `s` and
38
40
  `ms`; timing functions are `linear`, `ease`, `ease-in`, `ease-out` and
@@ -42,5 +44,54 @@ and `win.advance(ms)` lets tests step it deterministically.
42
44
  - `computedStyle()` reports the displayed (interpolated) value, so transitions
43
45
  are directly observable in tests.
44
46
 
47
+ `transform` lists interpolate **element-wise** (`document.cpp`,
48
+ `xt_transform_interpolate`), which is what makes the common pair
49
+ `translateY(-4px) rotate(-0.35deg)` <-> `none` glide instead of jumping: the
50
+ missing side is filled with identity ops of the same kind. Two lists whose shapes
51
+ or units do not line up (`rotate(10deg)` vs `rotate(10rad)`, or a different number
52
+ of functions) are not interpolated at all — the transition snaps to the target,
53
+ which is CSS's discrete fallback rather than a wrong-looking sweep.
54
+
55
+ ## CSS transforms (M15)
56
+
57
+ `transform` and `transform-origin` are supported as *paint-time* effects
58
+ (`translate`/`translate3d`/`translateX`/`translateY`,
59
+ `scale`/`scale3d`/`scaleX`/`scaleY`, `rotate`/`rotateZ`, `matrix`; the `3d`
60
+ spellings' `z` argument is parsed and dropped, since the engine is 2D;
61
+ `deg`/`rad`/`grad`/`turn`; `%`, `px`, `em`, `rem`, `vw`, `vh`). Layout
62
+ is not affected: geometry stays where flow put it, and only the painted result
63
+ moves, so a size, a scroll position or a sibling's position never depends on an
64
+ animation frame. See [Layout](./layout.md#transforms-m15) for the composition
65
+ rules and [Rendering](./rendering.md) for how it reaches the GPU.
66
+
67
+ Two ways to drive one:
68
+
69
+ ```ts
70
+ // 1. Per frame — a pose from the frame clock. Nothing reflows: the string is
71
+ // parsed into matrices and the display list picks them up in the same frame.
72
+ const tick = (t: number): void => {
73
+ const s = t / 1000;
74
+ art.style.setProperty(
75
+ "transform",
76
+ "translateY(" + (Math.sin(s * 2.4) * 5).toFixed(2) + "px) " +
77
+ "rotate(" + (Math.sin(s * 1.15) * 1.1).toFixed(2) + "deg)",
78
+ );
79
+ win.requestAnimationFrame(tick);
80
+ };
81
+ ```
82
+
83
+ ```css
84
+ /* 2. From a state change — a transitioned transform, like any other property. */
85
+ #caption {
86
+ transform-origin: 50% 100%;
87
+ transition: transform 260ms ease-out;
88
+ }
89
+ #caption:hover { transform: translateY(-2px) scale(1.03); }
90
+ ```
91
+
92
+ Both are exercised by `examples/gui/pelican-svg` (per-frame sway plus a
93
+ hover transition on the caption) and pinned by
94
+ `tests/e2e/gui-transform.test.ts`.
95
+
45
96
  Still to do for animation: `@keyframes` animations and `cubic-bezier(...)`.
46
97
 
package/doc/gui/api.md CHANGED
@@ -60,7 +60,7 @@ exposes read-only hooks:
60
60
  ```ts
61
61
  win.computedStyle(selector, property) // e.g. ("#main", "width") -> "60%"
62
62
  win.queryCount(selector) // number of matching elements
63
- win.getBoundingClientRect(selector) // { x, y, width, height } (border box)
63
+ win.getBoundingClientRect(selector) // { x, y, width, height } (border box, transformed)
64
64
  win.documentTree() // serialized DOM (debugging)
65
65
  win.layoutTree() // serialized layout boxes (debugging)
66
66
  win.paintCount() // number of shapes in the display list